Let's Encrypt 通配符证书申请-更新 | 幸福的猪窝

Let's Encrypt 通配符证书申请-更新

之前介绍过一篇升级 Let’s Encrypt通配符证书的文章。当时时使用手动交互模式需要在DNS服务器添加记录证明对域名的所有权。开始以为就是签发是一次认证就可以,以后重新申请会像以前普通证书一样直接更新。最近在更新的时候发现这个认识是错误的。当执行 certbot-auto renew 时返回了如下错误:

1
2
Could not choose appropriate plugin: 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.',)

意思就是没有找到认证的插件,需要通过参数 –manual-auth-hook 指定,否则无法申请。这个插件的用处就是在重新签发的时候仍然要验证一次身份,需要在DNS上添加解析记录。网上搜搜了一下有人用python写了一个支持阿里云和腾讯云插件。让我想起了之前用nodejs的一个修改ALIDNS的插件。当时用来实现类似花生壳的DDNS功能。于是准备升级一下这个系统用于自动处理证书签发。

申请证书

申请证书跟上篇内容有一些更新。不再需要指定服务器,默认已经是v2的服务器了,新加了一个参数默认允许记录申请时的公网IP实现全自动申请,中间没有交互步骤。
下面这个命令是测试命令,真是申请需要删除最后的 –dry-run

1
sudo ./certbot-auto  certonly --email <email> -d <domain>  --manual --manual-auth-hook "/apps/server/nodejs/bin/node cert-manual-hook.js add" --manual-cleanup-hook "/apps/server/nodejs/bin/node cert-manual-hook.js delete" --preferred-challenges dns --manual-public-ip-logging-ok --dry-run

参数说明:

1
2
3
4
5
6
7
8
9
certonly 只签发证书
--email <email> 关联账号的额main地址
-d <domain> 证书的域名,注意这里*.domain.com是不能用于 domain.com 的所以如果你想一个证书全搞定就需要添加多个参数。
--manual 指定使用手动认证模式
--manual-auth-hook "/apps/server/nodejs/bin/node cert-manual-hook.js add" 指定手动认证模式下认证的关联脚本,我没有在写脚本而是直接使用node启动。这里需要注意很有可能node不在sudo的 PATH 中所以需要手动指定完整目录
--manual-cleanup-hook "/apps/server/nodejs/bin/node cert-manual-hook.js delete" 指定手动认证模式下验证后清理的关联脚本,因为认证的记录认证成功后就没用了,所以这里多加一个清理脚本从DNS上再删除。
--preferred-challenges dns 指定使用DNS方式验证。泛域名证书只能使用这个方式。
--manual-public-ip-logging-ok 可以跳过申请过程中询问是否允许记录申请人的公网IP。
--dry-run 以测试方式执行,不会实际签发证书,用来测试各个参数是否正确的好方法。成功后再次执行把这个参数删除就可以了。

重新签发

注意默认到期前30天内才允许再次申请,不够不会实际签发新证书
下面这个命令是测试命令,真是申请需要删除最后的 –dry-run

1
sudo ./certbot-auto  renew --manual-auth-hook "/apps/server/nodejs/bin/node cert-manual-hook.js add" --manual-cleanup-hook "/apps/server/nodejs/bin/node cert-manual-hook.js delete" --dry-run

参数说明:

1
2
3
4
renew 重新签发证书
--manual-auth-hook "/apps/server/nodejs/bin/node cert-manual-hook.js add" 指定手动认证模式下认证的关联脚本,我没有在写脚本而是直接使用node启动。这里需要注意很有可能node不在sudo的 PATH 中所以需要手动指定完整目录
--manual-cleanup-hook "/apps/server/nodejs/bin/node cert-manual-hook.js delete" 指定手动认证模式下验证后清理的关联脚本,因为认证的记录认证成功后就没用了,所以这里多加一个清理脚本从DNS上再删除。
--dry-run 以测试方式执行,不会实际签发证书,用来测试各个参数是否正确的好方法。成功后再次执行把这个参数删除就可以了。

插件项目地址:

NodeDDNS