Let’s Encrypt 通配符证书如何续期 https脑瓜疼

96
恒骊_任建君
2018.11.22 11:31* 字数 932

前言

从去年一直用Let’s Encrypt觉得还挺不错的,毕竟是免费的,用着也挺方便,不过当时不是通配符的,只能申请www开头域名,直到今年3月份后,Let’s Encrypt开放了通配符证书,所以搞事情的我又申请了通配符证书,并且写了一篇从http网站快捷免费升级到https的文章,欢迎过来点个小心心❥(^_-)

但是通配符该如何升级呢?很多朋友现在使用了 *.yuming.com 却不能直接更新了,那么这篇文章就带大家来看看如何更新通配符证书。

先来个小广告,君哥的Java零基础初级学习全套视频已经推出啦
弟弟妹妹的可以看过来 https://hledu.ke.qq.com
想做在线讲课的也可联系

一、证书常规操作

查看当前服务器所配置的证书
  -- 查看证书可执行文件位置
  find / -name certbot-auto

  -- 找到位置后执行该命令查看证书
  ./certbot-auto certificates

输出证书状态如下,我这边有4个

服务器上申请了4个证书
直接更新证书

如果你申请了通配符证书,直接按正常流程直接执行./certbot-auto renew更新,单域名的证书更新完成了,但通配符就蛋疼了,出现错误如下代码和图,这里我只贴出异常部分

Attempting to renew cert (51object.com-0001) from /etc/letsencrypt/renewal/51object.com-0001.conf 
produced an unexpected error: The manual plugin is not working; there may be problems with your existing configuration.

The error was: PluginError('An authentication script must be provided with --manual-auth-hook
 when using the manual plugin non-interactively.',). Skipping.
更新错误图-部分

重点是:--manual-auth-hook,意思就是当我们自动使用插件的时候必须提供一个身份验证脚本,我们可以使用cerbot提供的--manual-auth-hook来进行证书的更新,因为要录入DNS记录,所以会失败(说到这里,是否还记得申请时需要走云服务器配置DNS记录的那一刻)

根据这个解决思路:

  • 可以使用 certbot 插件,比如 certbot-dns-cloudflare 插件(还有其他的),就是自动更新 cloudflare 等 DNS 的记录。
  • 手动编写脚本,cerbot 官方提供了 cloudflare 的样例。

这里呢我使用了Github上已有朋友编写的python脚本代码进行操作,其原理就是通过访问【阿里 or 腾讯】云接口生成DNS校验记录,大家先下载下来。
在这里感谢他们的付出与贡献,开源推动了互联网的进步,你们是优秀的程序员
代码地址如下:Let’s Encrypt 通配符证书如何续期代码

注意:使用python的朋友只需要2个文件即可(sslupdate.sh和27|36.py)

继续干,如何续期?

如下两行命令是需要先将github文件下载下来,替换掉py文件中的ACCESS_KEY_IDACCESS_KEY_SECRET,首先需要开放云控制台中的accesskeys,如何开放可以去查阅其他资料,这里不做描述,

此步骤一定要做,否则通过接口生成DNS
命令如下

1:对机器上所有证书 renew
$ ./certbot-auto renew  --manual --preferred-challenges dns  --manual-auth-hook /usr/local/ssltpfupdate/sslupdate.sh

2:对某一张证书进行续期
$ ./certbot-auto renew --cert-name 51object.com-0001  --manual-auth-hook /usr/local/ssltpfupdate/sslupdate.sh

小叉子,没问题的可以跳过这段
我CentOS上的python版本为自带的2.7.5,运行python脚本时,提示出错:No module named pytz.tzinfo

pytz模块没有

所以需要安装pytz模块才能接着做,pytz.whl模块下载地址

[root@iz2zeip7gvbiukof8kwdapz python]# pip install wheel

[root@iz2zeip7gvbiukof8kwdapz script]# pip install pytz-2018.5-py2.py3-none-any.whl

安装完成后执行sh文件,这次成功更新,执行的命令如下:

-- 检验过程是否无异常,成功后并不会生效(测试命令)
./certbot-auto renew --cert-name 51object.com-0001  --manual-auth-hook /usr/local/ssltpfupdate/sslupdate.sh --dry-run

-- 正式更新,此操作生效
./certbot-auto renew --cert-name 51object.com-0001  --manual-auth-hook /usr/local/ssltpfupdate/sslupdate.sh 

下图为测试命令执行

注意,此图为测试命令执行结果

正式更新命令我就不贴图了,和测试的输出基本一致,祝你好运啦。。。。

更新完成之后你会发现阿里云上多了一条TXT记录,就是py代码中通过接口新增的

新增的TXT记录
再次查看记录

本次更新操作到此结束,接下来我们可以加入到定时任务中

加入 crontab
编辑文件 /etc/crontab :

1 1 */1 * * root certbot-auto renew --manual --preferred-challenges dns  --manual-auth-hook /脚本目录/sslupdate.sh 
日记本
Web note ad 1