【CentOS7】Let's Encrypt のSSL証明書を導入する
CentOS 7 のサーバーに Certbot を使って、Let's Encrypt の SSL 証明書を導入し、自動更新する手順のメモです。
環境
- CentOS Linux release 7.9.2009 (Core)
- Apache/2.4.6 (CentOS)
- certbot 1.9.0
手順書
例として、ドキュメントルート /var/www/example
にドメイン www.example.com
として https でアクセスさせたい場合の手順を載せる。
必要なソフトウェアをインストールする
yum install epel-release
yum install certbot python-certbot-apache
Apache やドメインの設定をする
SSL 証明書を発行する前にブラウザなどからドメインにアクセスできるように設定しておく必要がある。
ドメインの DNS レコードの設定が必要な場合は、反映に時間がかかる場合があるので先にやっておく。
今回は、Apache を使うので、その場合の設定例を下記に示す。
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /var/www/example
</VirtualHost>
ポートを開放する
http(80) と https(443)のポートを開放しておく。
手順は、下記の記事を参考にして下さい。
certbot を実行して SSL 証明証を発行する
下記のコマンドを実行する。
certbot certonly --webroot -w /var/www/example/ -d www.example.com
初回の場合、メールアドレスと Terms への同意を求められるのでそれぞれ入力する。
証明証の発行に失敗する場合は、Chrome などのブラウザで設定したドメインでページが正常に表示されるか確認する。
証明証の発行に成功するうと下記のディレクトリーに証明証が保管される。(厳密に言うとリンクが保管されていてファイル自体は別のディレクトリーにある)
/etc/letsencrypt/live/www.example.com/*
https でアクセスできるよう apache を設定する
https の設定と http のアクセスを 強制的に https へ転送する設定を下記に示す。
<VirtualHost *:80>
ServerName www.example.com
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</IfModule>
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.example.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.example.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.example.com/chain.pem
ServerName www.example.com
DocumentRoot /var/www/example
</VirtualHost>
設定ファイルを保管後、下記のコマンドを実行して apache を再起動する。
systemctl restart httpd
apache を再起動後、ブラウザで https://www.example.com
にアクセスして https でちゃんとページが表示されるか確認する。
cron で証明証が自動更新されるように設定する
Let's Encrypt の SSL 証明書は、3 ヶ月で有効期限が切れるので、cron を使い、自動更新されるように設定する。
下記のコマンドを実行して cron の設定ファイルを開く。
crontab -e
vi でファイルが開かれる。
i
を押して編集モードに入ると、カーソルキーでカーソルを移動、 Enter
で改行できるようになるので改行して新しい行に設定を入力する。
下記は、毎月の 1 日の 6:30 に有効期限が 30 日未満の証明証が更新されるように設定する例です。
30 6 1 * * root certbot renew --quieti
入力が終わったら Esc
→ :wq
→ Enter
の順に押して、設定ファイルを保存、vi を終了する。
下記のコマンドを実行し、cron のサービスを再起動しておく。
systemctl restart crond.service
cron に先程入力した設定が反映されてるか下記のコマンドを実行し確認する。
crontab -l
先程入力した内容が出力されれば、cron に反映されている。
尚、オプションで有効期限が 30 日以上ある証明証を強制的に更新する事もできますが、そこまでする必要はないです。