無料の「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

インストール

/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

本格的なスキルを身につける

Linux/ITエンジニアとしてのスキルを身につけるにはLPI-Japanアカデミック認定校リナックスアカデミーがおすすめですよ。

SSL証明書に戻る

「SSL証明書」に関する他のTips

このページのトップに戻る