标签归档:LetsEncrypt自动续期

Let’s Encrypt SSL证书续期失败 ascii编解码器不能编码

今天复查服务器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