【Let'sEncrypt】Certbotの使い方(CentOS7 + nginx)
投稿日:
■環境
CentOS 7.3
nginx 1.10.3
certbot 0.14.1
■初回SSL証明書発行
certbotをインストールする。
yum -y install yum-utils
yum install certbot
# もしCentOS6系やAWS EC2にてcertbotをインストールする場合は以下手順となります。
curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto
chmod 700 /usr/bin/certbot-auto
ln -s /usr/bin/certbot-auto /usr/bin/certbot
# certbot-autoのまま使っても良いですが、後述の手順と整合性を合わせるために
# シンボリックリンクを作っています。
証明書を発行する
certbot certonly --webroot -w /usr/share/nginx/html -d your-domain.com
※上記コマンドは環境に合わせて読み替えてください。
/usr/share/nginx/html
→設定するドメインのドキュメントルート
your-domain.com
→設定するドメイン
【補足】
2017年11月現在、AWS EC2では上記コマンドに–debug
オプションが必要でした。
調べてみるとEC2でも「–debug」は不要になったと書いてあるページがあったりするので
環境による(?)のかもしれません。
これで証明書が以下ディレクトリに生成されます。
ll /etc/letsencrypt/live/your-domain.com/
lrwxrwxrwx 1 root root 40 Jun 12 16:41 cert.pem -> ../../archive/your-domain.com/cert1.pem
lrwxrwxrwx 1 root root 41 Jun 12 16:41 chain.pem -> ../../archive/your-domain.com/chain1.pem
lrwxrwxrwx 1 root root 45 Jun 12 16:41 fullchain.pem -> ../../archive/your-domain.com/fullchain1.pem
lrwxrwxrwx 1 root root 43 Jun 12 16:41 privkey.pem -> ../../archive/your-domain.com/privkey1.pem
証明書更新の度に上記シンボリックリンクの向き先が新証明書に切り替わるので、
nginx側の設定は1度設定すれば変える必要がなくなります。
■nginx設定
nginxの設定ファイルにて、SSL証明書と秘密鍵の設定をします。
(/etc/nginx/nginx.conf)
(省略)
server {
listen 443 ssl http2 default_server;
(省略)
ssl_certificate "/etc/letsencrypt/live/your-domain.com/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/your-domain.com/privkey.pem";
(省略)
}
設定後、nginxを再起動します。
systemctl restart nginx.service
■SSL証明書の自動再発行設定
SSL証明書の期限が残り1ヶ月を切ったら、証明書更新が可能となります。
更新は以下コマンドで実施します。
certbot renew
自動で更新できるように、cronに上記コマンドを登録しておきます。
例として、毎週月曜日の早朝に更新作業を行なうようにします。
(残り期限1ヶ月以上残っている場合は空振りして終わる)
10 0 * * 1 /bin/certbot renew && /bin/systemctl reload nginx.service > /dev/null 2>&1
※※※ 注意 ※※※
証明書の更新だけしても、nginxにて再読込をしなければ反映されません。
※2020年2月追記
certbot ver1.0.0現在ではrenew後に実行するコマンドを以下のようにオプションで指定できるようになりました。
/bin/certbot renew –post-hook “systemctl restart nginx.service”
これで設定は完了です。
■SSL証明書の削除
不要になったドメインのSSL証明書の削除は以下のコマンドで実施します。
certbot revoke --cert-path=/etc/letsencrypt/archive/your-domain.com/cert1.pem
これでSSL証明書を無効化し、自動更新の対象からも外れます。