开始自己弄了一遍自动续期的,测试了一下,本来想过段时间看看效果后再写这篇文章的,但是有效期三个月,现在等了一个多月了,我自己的网站申请的免费证书过期了,这个测试自动续期的还有一个多月,据说到一个月的时候才会自动续期,所以再弄一遍,顺便写一下,到时候续期了再更新结果
老规矩先上网站,freessl
一、配置获取部署命令
点击 ACME 自动化
点击添加
输入自己的域名,支持通配符,然后点击下一步
配置 cname 解析,完成后点”配置完成,立即检测“
完事后会给部署命令

二、使用 ACME 申请证书
参考上面部署完成旁边的”ACME 自动化快速入门“ 安装 acme,后面my@example.com换成自己的邮箱
curl https://get.acme.sh | sh -s email=my@example.com
如果上面官方下载地址失败 或者 太慢,可以选用国内的备用地址
curl https://gitcode.net/cert/cn-acme.sh/-/raw/master/install.sh?inline=false | sh -s email=my@example.com
然后在 root 目录下ls -a就可以看到有一个.acme.sh的文件夹,进入后里面有个 account.conf 配置文件,里面有前面安装时填写的邮箱,不知道有什么用,估计到时候会给通知什么的吧
下面命令开启 acme 自动更新
acme.sh --upgrade --auto-upgrade
三、配置 dns 解析 api
在用之前需要先配置一下 dns 解析 api,应该是方便后面续期吧,我这里使用的是腾讯云的域名及 dns 解析,也就是 dnspod,各配置可以参考如何使用 DNS API
如果是 dnspod,点击右上角头像,然后点击 API 密钥
选择 DNSPod Token
创建一个密钥
获取到 ID 和 token,保存下来
然后回到服务器配置刚才拿到的密钥
export DP_Id="密钥ID"
export DP_Key="密钥token"
四、申请证书
拿到刚才给的部署命令的 acme.sh 部署命令,直接输上即可
等好多个 15 秒后就申请成功了

五、使用
看上面证书位置第一个是证书位置,第二个是证书密钥位置
可以直接使用,我这里使用的是宝塔面板,所以直接配置 ssl 就行了,虽然是写需要 pem 格式,但是上面 cer 也可以直接使用
保存之后剩余 90 天到期了,按理说用这个 acme 到了 30 天以内就会自动续期

六、报错
过程报了两次错误
- 报错场景:安装了 acme 之后直接使用提供的 acme.sh 部署命令申请证书报错,没有重连服务器也没有配置 dns 解析 api
解决办法:直接重新连接了一下服务器就好了,也没有配置 dns 解析 api,所以可能与这个没关系
Please refer to curl.haxx.se/libcurl/c/l… for error code: 28
Sign failed, finalize code is not 200.
Please add '--debug' or '--log' to check more details.
See: github.com/acmesh-offi…

- 报错场景:当天使用 B 服务器事先给此域名申请了一遍,想着熟悉一下再用 A 服务器申请,然后再写教程,结果用 B 服务器申请过了,用 A 服务器申请就报了这个错误,申请几遍都是如此
解决办法:后面又试着用 B 服务器申请也是报了这个错,所以应该不是服务器或者 acme 的问题,在网上也找不到解决办法,猜测是重复申请,然后第二天再申请就好了。。
Create new order error. Le_OrderFinalize not found. {
"type": "urn:ietf:params:acme:error:serverInternal",
"detail": "Trace-ID: fc5f48b2-15c3-4754-bd82-5c08215a47cb, Server internal error",
"status": 500
}

======时隔两个月更新======
上面可以看到申请的时候是 Jul 月也就是 7 月,也就是说到 10 月份到期,那么在 9 月份的时候应该会自动续期
上去之后看一眼,cer 是证书文件,key 是私钥文件,都没有更新,变得是 csr 文件,这个文件是申请前创建的,与这个无关,但是可以看出是有自动续期,但是没有续期成功
我这里使用下面命令手动续期一下,看看是哪里的问题
acme.sh --cron --debug 2
结果后面给我报了什么连接超时,再次查看文件还是那三个变了,其他的没变
看网上说有时候连接超时是因为 ZeroSSL 的原因,下面说一下
目前 acme.sh 支持 Let's Encrypt、Buypass、ZeroSSL、SSL.com 和 Google Public CA,默认使用 ZeroSSL,如果需要更换可以使用下面命令:
切换 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
切换 Buypass
acme.sh --set-default-ca --server buypass
切换 ZeroSSL
acme.sh --set-default-ca --server zerossl
切换 SSL.com
acme.sh --set-default-ca --server ssl.com
切换 Google Public CA
acme.sh --set-default-ca --server google
我这里更换为 Let's Encrypt
然后再手动续期一下就正常了
这里可以看到 key 还是没有变化的,但是证书是变了的,可以使用新的证书和这个 key
测试了一下更换证书后又是 89 天了
然后因为我这里使用的是宝塔面板,宝塔面板在使用 ssl 时会把填写的内容生成一个证书并保存到/www/server/panel/vhost/cert/网站 目录下,因此 acme 自动续期后宝塔面板的 ssl 并不会使用续期后的证书,这里只需要把网站的配置文件改一下就行
把这两行路径改为 acme.sh 自动续期的证书和私钥的路径即可
❀❀❀❀❀❀ 完结散花 ❀❀❀❀❀❀