acme自动化---免费SSL证书申请并自动续期

1,645 阅读5分钟

开始自己弄了一遍自动续期的,测试了一下,本来想过段时间看看效果后再写这篇文章的,但是有效期三个月,现在等了一个多月了,我自己的网站申请的免费证书过期了,这个测试自动续期的还有一个多月,据说到一个月的时候才会自动续期,所以再弄一遍,顺便写一下,到时候续期了再更新结果

老规矩先上网站,freessl

一、配置获取部署命令

点击 ACME 自动化 点击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 密钥 点击API密钥 选择 DNSPod Token 选择DNSPod Token 创建一个密钥 创建一个密钥 获取到 ID 和 token,保存下来 保存ID和token 然后回到服务器配置刚才拿到的密钥

export DP_Id="密钥ID"
export DP_Key="密钥token"

四、申请证书

拿到刚才给的部署命令的 acme.sh 部署命令,直接输上即可 等好多个 15 秒后就申请成功了 申请证书成功 申请证书成功

五、使用

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

六、报错

过程报了两次错误

  1. 报错场景:安装了 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… 报错示例
  2. 报错场景:当天使用 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 更换为Let's Encrypt 然后再手动续期一下就正常了 手动续期示例 这里可以看到 key 还是没有变化的,但是证书是变了的,可以使用新的证书和这个 key 查看证书目录 测试了一下更换证书后又是 89 天了 查看到期时间 然后因为我这里使用的是宝塔面板,宝塔面板在使用 ssl 时会把填写的内容生成一个证书并保存到/www/server/panel/vhost/cert/网站 目录下,因此 acme 自动续期后宝塔面板的 ssl 并不会使用续期后的证书,这里只需要把网站的配置文件改一下就行 更改宝塔面板网站证书配置 把这两行路径改为 acme.sh 自动续期的证书和私钥的路径即可

❀❀❀❀❀❀ 完结散花 ❀❀❀❀❀❀

Written ❤️ sywdebug.