「Kingyo AI Navi」[1]のデモにサーバを使用しているのだが, そのSSL証明書発行にLet's Encryptの無料サービスを利用している.
無料サービスなので, 3カ月(90日)に一度SS証明書の更新を行う必要がある.
今回で二度目の更新だったのだが, 少しハマってしまったので, メモを残しておく.
1. SSL証明書更新
本来, 更新自体は簡単な作業であるが, 今回は更新しようとして以下のエラーが発生した.
$ sudo certbot renew Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/XXXX.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert is due for renewal, auto-renewing... Plugins selected: Authenticator standalone, Installer None Renewing an existing certificate Performing the following challenges: http-01 challenge for XXXX http-01 challenge for www.XXXX Cleaning up challenges Attempting to renew cert (XXXX) from /etc/letsencrypt/renewal/XXXX.conf produced an unexpected error: Problem binding to port 80: Could not bind to IPv4 or IPv6.. Skipping. All renewal attempts failed. The following certs could not be renewed: /etc/letsencrypt/live/XXXX/fullchain.pem (failure) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - All renewal attempts failed. The following certs could not be renewed: /etc/letsencrypt/live/XXXX/fullchain.pem (failure) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 renew failure(s), 0 parse failure(s)
※XXXXはドメイン名
Let's Encryptは認証のために80ポートと443ポートを使用するらしく, 今回は80ポートで問題が発生したようだ.
多分サービスか何かが80ポートを使用していて, certbotが80ポートをバインドできなかったのだ.
とりあえず, 稼働しているサービスをチェックしてみる.
$ service --status-all | grep + [ + ] apparmor [ + ] apport [ + ] atd [ + ] binfmt-support [ + ] chrony [ + ] cron [ + ] dbus [ + ] ebtables [ + ] grub-common [ + ] iscsid [ + ] kmod [ + ] lvm2-lvmetad [ + ] lvm2-lvmpolld [ + ] lxcfs [ + ] nginx [ + ] procps (省略)
どうもnginxがじゃましてそうなので, nginxを止めて再度更新してみる.
(このサーバでhttpdやnginxを稼働させた記憶はないのだが...)
$ sudo service nginx stop $ sudo certbot renew (省略) Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/XXXX/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $ sudo service nginx restart
更新されたSSL証明書を確認してみる.
$ openssl x509 -in /etc/letsencrypt/live/XXXX/cert.pem -noout -dates notBefore=Sep 1 07:47:36 2019 GMT notAfter=Nov 30 07:47:36 2019 GMT
正常にSSL証明書が更新されたようだ.
2. 自動更新の設定[2]
前回初めてSSL証明書を更新したときはすんなりと更新できて, そんなに気にならなかったのだが, 今回は3カ月経つのが意外と早いと感じたのと, トラブってまた同じようなことを調べるのは面倒なので, 自動更新を設定してみることにした.
一応, nginxが動作しているという前提で, crontabを設定.
$ sudo crontab -u root -e no crontab for root - using an empty one crontab: installing new crontab
エディタで, 条件およびコマンドを設定.
毎月1日の12時にSSL証明書を更新するようにしてみた.
0 12 1 * * /usr/bin/certbot renew --dry-run --pre-hook "service nginx stop" --post-hook "service nginx restart"
しばらくは, ちゃんとSSL証明書が更新されるか気にとめておこう!!
---
参照URL:
[1] 「Kingyo AI Navi」のアプリ化を考える (1) ~ (5)
[2] Let’s Encryptの証明書更新に失敗した時の対処法とcronの自動更新設定
サーバ/インフラエンジニア養成読本 ログ収集〜可視化編 [現場主導のデータ分析環境を構築!] Software Design plus
|
本気で学ぶ Linux実践入門 サーバ運用のための業務レベル管理術
|
Linuxサーバーがゼロから作れる本 (日経BPパソコンベストムック)
|
[改訂新版]プロのためのLinuxシステム構築・運用技術 (Software Design plus)
|