这篇文章上次修改于 484 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
腾讯云的域名证书免费的只能签发十个, 虽然管一年但是不支持通配符. 够用是够用但有些麻烦, 之前找别人签的今天到期了, 于是就自己动手了.
由于签发的是 Let's Encrypt 所以只能管九十天. 但我觉得也没必要搞个自动续签, 回头想起来了再弄一次就是了.
首先是很常规的 curl https://get.acme.sh | sh
, 记得五月份自己想搞的时候直接卡在这里了.....
好在这次运气不错, 网络没出什么大问题.
拉过来之后会在用户根目录下生成一个 .acme.sh 文件夹, 这些不需要管.
首先会填写一个邮箱, 似乎可以随便写.acme.sh --register-account -m [email protected]
如果不使用 DNS 验证就不能签泛域名, 而且会涉及到修改配置文件可能产生冲突.
比如我就做了一些重定向路径重写和 403 404 的操作, 导致单域名也验证失败了.
然后需要去申请一个 DNSPod 的 Token, 老实说这个地方有点坑.
下面来猜猜到底要填什么呢, 答案是六位数字的 Token ID 和它本身, 至于另一个 Id 和 Key 是完全没关系的一个东西(这里真的要吐了
export DP_Id="**ID**"
export DP_Key="***KEY***"
现在已经取得了 acme.sh 对 Token 账号下域名的操作权, 接下来就可以开始签发了!
腾讯云应该是这样的:acme.sh --issue -d kazusa.cc -d *.kazusa.cc --dns dns_dp
然后你会发现拿到的证书看不懂, 还需要下一步操作:
acme.sh --installcert -d kazusa.cc \
--key-file /usr/local/nginx/conf/cert/90-kazusa.cc.key \
--fullchain-file /usr/local/nginx/conf/cert/90-kazusa.cc.fullchain.cer \
--reloadcmd "systemctl restart nginx.service"
这样就可以把证书转换成可以直接用的格式并且放到对应目录下重载 nginx 了.
最后开启脚本的自动更新(不是自动更新证书)以便下次用acme.sh --upgrade --auto-upgrade
据说这样可以实现自动续签, 我没这需求也没试过
# crontab -l
47 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
acme.sh --cron -f
已有 2 条评论
其实推荐使用 DNS API 去签发泛域名。通配符(泛域名)证书是真的方便,而且你可以让所有子域的网站证书文件(软链接等)指向第一个站点,然后使用 acme.sh 去更新第一个站点的证书即可。而且 acme.sh 也有计划任务,自动帮你续签。
@timochan 这个还真没试过, 不过我这样也只是签两个域名, 还好啦.