1. 仮想マシンの作成
この章ではWebサーバー用の仮想マシンを作成します。
1. 仮想マシンを作成します。
仮想マシンの作成方法は、「Webサイトの本番環境を構築したい(Web1台構成)」の「1. 仮想マシンの作成」をご参照ください。
設定例は下記の通りです。
項目 | 設定内容 | |
---|---|---|
マシンタイプ | Light.S1 | |
イメージ | おすすめTemplate - CentOS 7.9 64-bit | |
ボリューム | データディスクなし(空欄のまま) | |
SSH Key | ※注1 | |
仮想マシン台数 | 1台 | |
ネットワークインターフェース | ※注2 | |
詳細情報 |
マシン名 | web01 |
グループ | (なし) |
※注1: SSH Keyの項目は、SSH秘密鍵を未作成の場合は[作成]を選択し、生成された秘密鍵をローカルPCに保存します。詳しくは「めちゃ楽ガイド」6ページの手順3をご参照ください。
※注2: ご利用のアカウントによってネットワークインターフェースとして選択できるゾーン名が異なります。普段お使いのゾーン名をご選択ください。
2. ファイアウォールとポートフォワードの設定を行います。
設定方法は、「Webサイトの本番環境を構築したい(Web1台構成)」の「2. ネットワークの設定(ファイアウォールとポートフォワードの設定)」をご参照ください。
ファイアウォールとポートフォワードの設定例は以下のとおりです。
(Let’s EncryptのSSL証明書作成時にポート80を使用します)
ファイアウォール設定例
コメント | ソースCIDR | タイプ | ポートレンジ |
---|---|---|---|
HTTP | Any | HTTP | 80 |
HTTPS | Any | HTTPS | 443 |
SSH | My IP | SSH | 22 |
ポートフォワード設定例
コメント | パブリックポート | プライベートポート | 仮想マシン |
---|---|---|---|
HTTP | HTTP | 80 | web01 |
HTTPS | HTTPS | 443 | web01 |
SSH | SSH | 22 | web01 |
3. 仮想マシン「web01」にsshログインできることを確認します。
アクセス方法は「Webサイトの本番環境を構築したい(Web1台構成)」の「3. 仮想マシンへのアクセス」をご参照ください。
2. DNSレコードの設定
対象のFQDNに対する名前解決の設定を行います。
Let’s Encryptではドメイン名でサーバー認証を行うため、事前に対象FQDNに対して名前解決できる状態にしておきます。
IDCFクラウド DNSでの設定例を紹介します。お客さま環境に応じて、同様の設定を行ってください。
IDCFクラウド DNSの詳細な操作手順については「DNS/GSLBご利用ガイド」をご参照ください。
1. [コンピュート]をクリックしてサービス一覧を表示し、ネットワーキングより[DNS/GSLB]をクリックしてください。
2. 作成してあるDNSゾーン名をクリックしてレコード設定画面を表示します。
※DNSゾーンを作成していない場合は別途DNSゾーンを作成してください。
3. [+レコード登録]をクリックして、FQDNの数に応じたAレコードを登録します。
設定例は以下のとおりです。ここでは2つのAレコードを設定します。
タイプ | レコード名 | GSLB※ | TTL | 値 |
---|---|---|---|---|
A | www1 | 無効 | 600 | 「1.仮想マシンの作成」の手順2で確認したパブリックIPアドレス |
A | www2 | 無効 | 600 | 同上 |
※今回はGSLB機能は使わないので無効とします。GSLBについては「DNS/GSLB ヘルプ」をご参照ください。
3. Webサイト環境構築
仮想マシン「web01」にてWebサイト環境構築を行います。ここでは、HTTPでアクセスできる環境を準備します。
1. 仮想マシン「web01」にsshログインし、Webサイト環境構築を行います。
Webサイト環境構築方法は「Webサイトの本番環境を構築したい(Web1台構成)」の「4. Webサイト環境構築」をご参照ください。
2. VirtualHostおよび関連設定を行います。
設定例は以下の通りです。ドメイン(example.com)は、お客さまにて運用されているドメインに読み替えてください。
// 2サイトのDocumentRootおよびコンテンツを作成 [root@web01 ~]# mkdir /var/www/html/www1 [root@web01 ~]# mkdir /var/www/html/www2 [root@web01 ~]# echo www1 > /var/www/html/www1/index.html [root@web01 ~]# echo www2 > /var/www/html/www2/index.html // VirtualHost設定を作成 [root@web01 ~]# cat<<EOF > /etc/httpd/conf.d/vhost.conf <VirtualHost *:80> DocumentRoot /var/www/html/www1 ServerName www1.example.com </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/html/www2 ServerName www2.example.com </VirtualHost> EOF // Apache httpdのコンフィグ文法チェック [root@web01 ~]#apachectl configtest // Apache httpd再起動 [root@web01 ~]# systemctl restart httpd
3. ブラウザより、設定したFQDNに対してHTTPアクセスを行い、アクセスできることを確認します。
ブラウザに入力するURL例は以下のとおりです。
http://www1.example.com
http://www2.example.com
4. SSL証明書とHTTPS設定ファイルの作成
Let’s EncryptのCertbotクライアントを使用してSSL証明書とHTTPS設定ファイルの作成を行います。
OS,Webサーバー毎に手順が異なりますので、詳細はCertbot公式サイト をご参照ください。
以下、CentOS7,Apache httpdでの設定例です。
1. snapdをインストールします。ここでは、後で必要になるmod_sslもあわせてinstallします。
[root@web01 ~]# yum -y install epel-release [root@web01 ~]# yum -y install snapd mod_ssl [root@web01 ~]# systemctl enable --now snapd.socket [root@web01 ~]# ln -s /var/lib/snapd/snap /snap
2. ログアウトして再度ログインするか、仮想マシンを再起動して、snapのパスが正しく更新されていることを確認します。
// $PATHに/var/lib/snapd/snap/binが含まれることを確認。 [root@web01 ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/var/lib/snapd/snap/bin:/root/bin
3. 以下のコマンドを実行して、最新バージョンのsnapdを使用していることを確認します。
「error: too early for operation, device not yet seeded or device model not acknowledged」のエラーが表示された場合は、1分程度待って再度コマンド実行してみてください。
[root@web01 ~]# snap install core [root@web01 ~]# snap refresh core
4. certbotをinstallします。
[root@web01 ~]# snap install --classic certbot
5. certbotコマンドの準備をします。
シンボリックリンクを作成し、certbotのバージョンが表示されることを確認します。
[root@web01 ~]# ln -s /snap/bin/certbot /usr/bin/certbot [root@web01 ~]# certbot --version
6. SSL証明書の取得と、httpsアクセスに必要なhttpd設定を作成します。
以下は、コマンド実行例です。
[root@web01 ~]# certbot --apache Saving debug log to /var/log/letsencrypt/letsencrypt.log Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): <メールアドレスを入力> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: Y Account registered. Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: www1.example.com 2: www2.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1,2 Requesting a certificate for www1.example.com and www2.example.com Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/www1.example.com/fullchain.pem Key is saved at: /etc/letsencrypt/live/www1.example.com/privkey.pem This certificate expires on 2022-02-24. These files will be updated when the certificate renews. Certbot has set up a scheduled task to automatically renew this certificate in the background. Deploying certificate Successfully deployed certificate for www1.example.com to /etc/httpd/conf.d/vhost-le-ssl.conf Successfully deployed certificate for www2.example.com to /etc/httpd/conf.d/vhost-le-ssl.conf Congratulations! You have successfully enabled HTTPS on https://www1.example.com and https://www2.example.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - If you like Certbot, please consider supporting our work by: * Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate * Donating to EFF: https://eff.org/donate-le - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [root@web01 ~]#
7. 参考までに、vhost.confとvhost-le-ssl.confを確認します。
vhost.confではRewriteに関する設定(「RewriteEngine」「RewriteCond」「RewriteRule」の行)が追加され、vhost-le-ssl.confでは、証明書(cert.pem)、中間証明書(chain.pem)、秘密鍵(privkey.pem)が設定されたことが分かります。
[root@web01 conf]# cat /etc/httpd/conf.d/vhost.conf <VirtualHost *:80> DocumentRoot /var/www/html/www1 ServerName www1.example.com RewriteEngine on RewriteCond %{SERVER_NAME} =www1.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/html/www2 ServerName www2.example.com RewriteEngine on RewriteCond %{SERVER_NAME} =www2.example.com RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost> [root@web01 conf]# [root@web01 conf]# cat /etc/httpd/conf.d/vhost-le-ssl.conf <IfModule mod_ssl.c> <VirtualHost *:443> DocumentRoot /var/www/html/www1 ServerName www1.example.com SSLCertificateFile /etc/letsencrypt/live/www1.example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www1.example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/www1.example.com/chain.pem </VirtualHost> </IfModule> <IfModule mod_ssl.c> <VirtualHost *:443> DocumentRoot /var/www/html/www2 ServerName www2.example.com SSLCertificateFile /etc/letsencrypt/live/www1.example.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www1.example.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/www1.example.com/chain.pem </VirtualHost> </IfModule> [root@web01 conf]#
8. Apache httpdのコンフィグ文法チェックと再起動を実施します。
// Apache httpdのコンフィグ文法チェック [root@web01 ~]#apachectl configtest // Apache httpd再起動 [root@web01 ~]# systemctl restart httpd
9. certbot自動更新のテストを行います。
[root@web01 ~]# certbot renew --dry-run //「Congratulations, all simulated renewals succeeded:」と表示されたらOK [root@web01 ~]# systemctl list-timers // snap.certbot.renewのNEXTに予定時刻が表示されていればOK
10. ブラウザより設定したFQDNに対してHTTPSアクセスを行います。
ブラウザに入力するURL例は以下のとおりです。
https://www1.example.com
https://www2.example.com
証明書エラーが出ずに、テストページが表示されれば問題ありません。
鍵マークをクリックし、証明書を確認しエラーがないか確認します。(以下は、Chromeの例です。ブラウザにより挙動が異なる可能性があります)
以上でバーチャルホスト環境にHTTPSでアクセスできることが確認できました。
本マニュアルでは説明のためにApacheを利用しましたが、Nginxでも設定可能です。
証明書を発行したLet’s Encrypt(Certbotクライアント)はLinux Foundationのコラボレートプロジェクトで、ISRGが中心となり複数企業で運営を行っています。
2016年4月12日に正式サービスとしてリリースされました。
手軽に暗号化して通信を行いたい場合や今回のようにHTTPSのテストを行いたい場合等、さまざまなシーンで有用なサービスです。
しかしながら、身元審査等は行わないため、信頼されたサイトの証明として使用する場合は、OV証明書、EV証明書を使用することをおすすめします。