無料の「Let's Encrypt」のSSL証明書のApacheへの設定手順
カテゴリ:SSL証明書
常時TLS/SSL化が常識になってきたこともあり、VPSで公開しているすべてのドメインのサイトに無料SSL証明書である「Let's Encrypt」のSSL証明書をインストールしましたのでメモとして残しておきます。※OSはCentOS 6.10を使用しています。
参考にしたサイト:
- https://lima.world/blog/tech/lets-encrypt.html
- https://snap.textfile.org/20160203205833/
- https://qiita.com/Ayame/items/42d9fcac64085bacbb73
インストール
注意この記事のcertbotのインストール手順は古いものとなっています。snap版certbotのインストール手順を参照してください。
/usr/bin配下にgitとcertbotをインストールします。
cd /usr/bin yum -y install git git clone https://github.com/certbot/certbot
certbot-autoのパーミッションを設定します。
chmod 700 /usr/bin/certbot/certbot-auto
certbot-autoを実行します。
cd certbot/ ./certbot-auto
証明書の作成
証明書を作成します。
複数ドメインを1つの証明書として作成することが可能です。
その場合、以下のように -w [ドキュメントルート] -d [ドメイン] の順番で連続して指定します。
※ドメインごとに対応するドキュメントルートをきちんと指定することが重要です。
最初に指定したドメインがコモンネームになります。
./certbot-auto certonly --webroot \ -w /var/www/html/hoge/ -d hoge.com \ -w /var/www/html/foo/ -d foo.com \ -w /var/www/html/bar/ -d bar.com \ ...
いくつかの質問に答えるだけで証明書が作成されます。
証明書は「/etc/letsencrypt/live/ドメイン名」に置かれています。
# ls /etc/letsencrypt/live/hoge.com README cert.pem chain.pem fullchain.pem privkey.pem
自動更新
「Let's Encrypt」のSSL証明書の有効期限は3ヶ月です。
そこで、cronで証明書の自動更新を実施するように設定します。
以下の場合は、毎週日曜日の16:00にチェックします。
有効期限までの日数が30日未満なら証明書を更新後、Apacheを再起動します。
有効期限まで30日以上ある場合は更新しません。
vi /etc/cron.d/letsencrypt 00 16 * * 0 root /usr/bin/certbot/certbot-auto renew --renew-hook "systemctl restart httpd"
複数のプロセスを再起動する場合は、以下のように--renew-hookを複数記述します。
vi /etc/cron.d/letsencrypt 00 16 * * 0 root /usr/bin/certbot/certbot-auto renew --renew-hook "service httpd restart" --renew-hook "postfix stop" --renew-hook "postfix start" --renew-hook "service dovecot restart" --renew-hook "service vsftpd restart" --renew-hook "service webmin restart"
作成したcronの設定のパーミッションを644に設定します。
※所有者はroot、パーミッションは644である必要があります。Group と Other に書き込み権限があってはいけません。
chmod 644 /etc/cron.d/letsencrypt
--renew-hook、--post-hook、--pre-hookの違い
--renew-hook、--post-hook、--pre-hookの違いは以下となり、--renew-hookを使用するのが一般的となっています。
--renew-hook | 証明書が正常に更新された後にそれぞれ1回ずつ呼ばれる |
---|---|
--post-hook | 証明書の取得・更新を試行した後に呼ばれる |
--pre-hook | 証明書の取得・更新を試行する前に呼ばれる |
httpd.confの設定
Apache側のSSL証明書の設定は、他のSSL証明書の場合と同じです。
VirtualHostを使用している場合のSSL証明書の設定は、ssl.confではなくhttpd.conf側で設定します。
※VirtualHost *:80 ディレクティブに80番ポートへのアクセスを443番ポートにリダイレクトするよう設定し、VirtualHost *:443 ディレクティブ内でSSLの設定を記述します。
<VirtualHost *:80>
ServerName hoge.com:80
RewriteEngine on
RewriteCond %{HTTP_HOST} ^hoge\.com
RewriteRule ^/(.*)$ https://hoge.com/$1 [R=301,L]
</VirtualHost>
<VirtualHost *:443>
ServerName hoge.com
DocumentRoot /var/www/html/hoge
SSLEngine on
SSLProtocol All -SSLv2 -SSLv3 -TLSv1
SSLCertificateFile /etc/letsencrypt/live/hoge.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/hoge.com/privkey.pem
SSLCACertificateFile /etc/letsencrypt/live/hoge.com/chain.pem
...
</VirtualHost>
※VirtualHostを使用している場合のSSL証明書の設定の詳細は以下の記事をご参照ください。
関連記事:仮想ホスト環境でHTTPS化(SSLを有効)を行う場合の設定
Webブラウザで作成した証明書を確認してみましょう。以上、CentOS6.xへのLet's EncryptのSSL証明書の設定手順でした。
公開日時:2018年09月30日 22:32:48