前回は、証明書取得のための環境を整えた。
今回は、実際に証明書を取得して、HTTPSでの閲覧が可能な状態にしていく。
まずはApacheの設定から。
HTTPSでの閲覧ができるようにするためには、mod_sslというApacheのモジュールを準備する必要がある。
入っていないと、certbotの実行中、次のようなエラーが表示される。
Could not find ssl_module; not disabling session tickets.
インストールされているモジュールを表示するには、次のコマンドを実行する。
$ httpd -M
opensslも必要なので、念の為に一緒に記載するが、これまでの流れで、すでにインストールされているはず。
# dnf install mod_ssl openssl
これだけでApache自体はSSLに対応できた。
ちなみに、追加された構成ファイルは、次のコマンドで確認できる。
$ rpm -ql mod_ssl
設定ファイルに限定すると、次のファイルが作成される。
/etc/httpd/conf.d/ssl.conf /etc/httpd/conf.modules.d/00-ssl.conf
しかし、すぐにApacheを再起動しても、起動に失敗するので注意が必要。
Apacheの設定ファイルをチェックしてみると、
$ apachectl configtest AH00526: Syntax error on line 85 of /etc/httpd/conf.d/ssl.conf: SSLCertificateFile: file '/etc/pki/tls/certs/localhost.crt' does not exist or is empty
localhost.crtという証明書ファイルが無いと言われる。
設定がエラーになると、certbotの実行時にもエラーとなり処理されないので、設定ファイルを一旦削除する。か、改名する。
# rm /etc/httpd/conf.d/ssl.conf
# mv /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.org
2行をコメントアウトすれば、次のように、設定の検証はOKとなる。
# apachectl configtest Syntax OK
certbotコマンドを実行すれば、Apacheの設定ファイルから証明書が自動生成されて、設定ファイルも書き換えられる。
だが、実際は、設定ファイルに必要な項目があったり、条件がある。
色々試して、次の手順が個人的にはオススメ。
まず、デフォルトのVirtualHostの設定ファイルを作成する。
# vi /etc/httpd/conf.d/default.conf
ファイルの中身は次の最低限の3行。
<VirtualHost _default_:80> ServerName [ホスト名].sakura.ne.jp </VirtualHost>
[ホスト名]部分は、所有しているサーバーのホスト名に。
そして、certbotコマンドの実行。
# certbot --apache Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): webmaster@example.com ←あなたのメールアドレス - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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: n ←メールとかは要らない Account registered. Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: [ホスト名].sakura.ne.jp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): ←何も入力しない Requesting a certificate for [ホスト名].sakura.ne.jp Performing the following challenges: http-01 challenge for [ホスト名].sakura.ne.jp Waiting for verification… Cleaning up challenges Created an SSL vhost at /etc/httpd/conf.d/default-le-ssl.conf Deploying Certificate to VirtualHost /etc/httpd/conf.d/default-le-ssl.conf Redirecting vhost in /etc/httpd/conf.d/default.conf to ssl vhost in /etc/httpd/conf.d/default-le-ssl.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://[ホスト名].sakura.ne.jp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/[ホスト名].sakura.ne.jp/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/[ホスト名].sakura.ne.jp/privkey.pem Your certificate will expire on 2021-04-16. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew all of your certificates, run "certbot renew" - 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
と、この時点で、既にHTTPSでのWebサーバへの接続が可能になっている。
試しに、Webブラウザで、「http://[ホスト名].sakura.ne.jp」と入力し、接続してみる。
この時、「http://〜」であっても、「https://〜」で転送される。
主な変更点は、/etc/httpd/conf/httpd.confの最後に、次の設定が追加され、
<IfModule mod_ssl.c> Listen 443 </IfModule>
/etc/httpd/conf.d/default.confが次のように、転送の設定が追加され、
<VirtualHost default:80>
ServerName [ホスト名].sakura.ne.jp
RewriteEngine on
RewriteCond %{SERVER_NAME} =[ホスト名].sakura.ne.jp
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
/etc/httpd/conf.d/default-le-ssl.confが次のような内容で追加され、
<IfModule mod_ssl.c> <VirtualHost default:443> ServerName [ホスト名].sakura.ne.jp SSLCertificateFile /etc/letsencrypt/live/[ホスト名].sakura.ne.jp/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/[ホスト名].sakura.ne.jp/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule>
/etc/letsencrypt/options-ssl-apache.confというファイルも、次のような内容で追加される。
# This file contains important security parameters. If you modify this file # manually, Certbot will be unable to automatically provide future security # updates. Instead, Certbot will print and log an error message with a path to # the up-to-date file that you will need to refer to when manually updating # this file. SSLEngine on # Intermediate configuration, tweak to your needs SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384 SSLHonorCipherOrder off SSLSessionTickets off SSLOptions +StrictRequire # Add vhost name to log entries: LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common
今回は、WebサーバをLet’s Encryptの証明書で、HTTPSに対応させた。
次回は、webminをインストールしたいと思う。