WHY
可恶啊!("▔□▔)/ 为了 能让更多用户买付费证书 进一步提高证书安全性,由google提议将免费SSL证书的有效期从一年进一步下调到90天!!!
消息来源以及参考文章:
- 知乎23年底的文章,可恶Σ( ̄□ ̄||),居然那个时候还不知道
- 腾讯云:关于免费 SSL 证书策略调整通知,(°∀°)可以说是刚刚好在这之前申请上了最后一个一年期的免费证书
然而橘子的证书马上就要到期了Σ( ̄□ ̄||)急需更新。真的是被时代洪流裹挟不得不学新知识~之前那篇老文章的SSL证书申请方法虽然是没失效吧,但是每次都手动申请有效期只有90天的证书也太累了。所以,急需一种自动化更新SSL证书的手段!
使用现成自动化工具
总的来说,使用的是这个自动化工具,acme.sh
:
这个自动化工具有中文的教程!戳这里:acme.sh中文教程
注意事项
所以接下来是踩坑的地方以及注意事项~
安装命令干了什么事?
首先使用下面这个命令安装的时候,实际上是把get.acme.sh
网址上下载的内容直接作为输入交给了shell,因此这个命令实际上不会在执行目录下载什么文件,而是直接把文件安装到了~/.acme.sh/
。
#!/usr/bin/bash
curl https://get.acme.sh | sh -s email=my@example.com
此外,这里的邮箱应该填写自己的邮箱。这里有一个小知识点,就是免费签发证书的机构是不需要自己手动注册的,只要你通过 acme.sh
申请证书,它会自动为你注册一个证书签发机构的账户(例如Let's Encrypt),并将它与你提供的邮箱关联。这个注册过程实际上是没有认证的
(小声)但也不需要认证不是吗,毕竟只有实际网站拥有者持有的秘钥才是有效的,其他人冒用该网站申请的证书也是无用的——除非网站后台被攻破了!那这……
用DNS进行验证
然后,我这里是没有按照教程修改默认CA的,直接使用的ZeroSSL
,而不是教程推荐的Let's Encrypt
,问题不大。
我是使用的DNSPod,因此该教程正好完美符合我的情况。这里有一个坑,很蠢的坑,就是教程中提示,拿到的id需要这样设置。首先export
这个命令是在shell环境中使用的,所以这个配置不用存入某个文件而是直接在终端中输入,并且后续acme.sh
会自己把它记住。
#!/usr/bin/bash
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
其次,教程给的DNSPod的链接是这个,这实际上是DNSPod的官网,而由于它和腾讯云的奇怪结合,导致经常点某个按钮就跳转到腾讯云了非常麻烦,所以这里给出明确指路~
- 首先点击右上角头像,选择“API秘钥”
- 然后在界面上有两个选项卡,一个是“腾讯云API秘钥”(默认选项卡),一个是“DNSPod Token”
- 这里要选后一个,“DNSPod Token”。("▔□▔)/一定要选对!
必须使用“DNSPod Token”这个生成的才能使用,“腾讯云API秘钥”是用不了的!!
必须使用“DNSPod Token”这个生成的才能使用,“腾讯云API秘钥”是用不了的!!
必须使用“DNSPod Token”这个生成的才能使用,“腾讯云API秘钥”是用不了的!!
(重要的事情说三遍)
那怎么自动化呢
既然问到了自动更新,那就不妨试试这行代码吧:
#!/usr/bin/bash
crontab -l
他能列出所有当前用户的定时任务~(之前的文章介绍过,这篇: 使用crontab设置服务器定时任务)然后你就会发现已经有一条acme的自动任务了,在每天自动检查证书情况。
常用代码
其他事项教程都已经给出来了,这里就不一一列举了。最后贴上常用代码:
#!/usr/bin/bash
# 更新命令,如果没有到更新时间则会不更新
acme.sh --renew -d example.com
# 强制更新命令
acme.sh --renew -d example.com --force
# 查看已经安装的证书信息
acme.sh --info -d example.com
# 将已安装的证书安装(复制)到指定路径,同时重启nginx
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx reload"
# 更新acme.sh
acme.sh --upgradee
# 启动acme.sh的自动更新
acme.sh --upgrade --auto-upgrade
# 关闭acme.sh的自动更新
acme.sh --upgrade --auto-upgrade 0
Comments NOTHING