今天复查服务器SSL证书,发现Let’s Encrypt证书就快要到期了,查看crontab定时任务计划日志,也是正常执行的。例如:
$ cat /var/log/cron
...
CROND[31471]: (root) CMD (/usr/bin/certbot renew --quiet && /bin/systemctl restart nginx)
CROND[31470]: (root) MAIL (mailed 375 bytes of output but got status 0x004b#012)
CROND[31482]: (root) CMD (run-parts /etc/cron.hourly)
...
奇怪的是,证书并没有正常续期,什么个原因呢,后来手动执行证书更新:
$ /usr/bin/certbot renew --quiet
Attempting to renew cert from /etc/letsencrypt/renewal/renwole.com.conf produced an unexpected error: 'ascii' codec can't encode characters in position 247-248: ordinal not in range(128). Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/renwole.com.conf/fullchain.pem (failure)
1 renew failure(s), 0 parse failure(s)
更新失败,提示“ascii
”编解码器不能编码字符。
经过分析研究发现,开发人员修改了网站根目录,导致LetsEncrypt找不到相关配置文件。
PS:唉,出了问题,都是运维的锅哈。
解决方案
修改以下配置文件中的网站根目录:
$ vim /etc/letsencrypt/renewal/renwole.com.conf
...
# Options used in the renewal process
[renewalparams]
authenticator = webroot
installer = None
account = a07a7160ea489g586aeaada1368ce0d6
[[webroot_map]]
renwole.com = /apps/data/www/renwolecom
...
修改蓝色部分为Nginx指定的根目录,其他默认,然后保存即可。
再次更新证书成功。
使用以下命令查看续期状态:
$ certbot certificates