[转]acme自动化---免费SSL证书申请并自动续期
原文地址:acme自动化---免费SSL证书申请并自动续期_create new order error. le_orderfinalize not found-CSDN博客
背景:
各CA厂家都在缩短免费证书的有效时间,包括现在与阿里合作的,普遍只有90天,这样如果频繁手动申请更换就很繁琐,正好github上有一个star数很高的工具acme.sh,有官方中文说明.
还有一个申请免费证书的网站https://freessl.cn/,上面还介绍了其他自动续期的方法,不过上面的文档写的不是很清晰,建议找相应工具的官方wiki来使用;网站上还有提供一年有效期免费证书的CA厂商TrustAsia ,怕麻烦的也可以使用.
重点:
1.使用 github上的脚本工具 acme.sh
2.有官方中文说明配置
3.新版本默认设置的CA (ZeroSSL)不太稳定,可更换为稳定的Let's Encrypt(对频繁申请有限制,但一般使用足够)
---------------------------------------------------------------------------------------------------------------------------------------------------
acme.sh 仓库地址:acme.sh
acme.sh 中文说明:官方中文说明
各个 dnsapi 说明:dnsapi
一、安装并配置 acme.sh
安装 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.sh 目录后使用下面命令开启 acme 自动更新
./acme.sh --upgrade --auto-upgrade
在这里最好先切换一下证书类型,看下面续期时出现过问题
./acme.sh --set-default-ca --server letsencrypt
二、配置 DNS API
通过官方说明文档可知,acme.sh 申请证书有两种方式,http 和 dns 验证
http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了
手动 dns 方式, 手动在域名上添加一条 txt 解析记录, 验证域名所有权
第一种方便一些,只需要一条命令就完成了,前提是需要有服务器并且在此服务器中搭建了网站
第二种更灵活一些,只需要有域名手动添加验证即可,不需要服务器,但是这种方式需要配置 Automatic DNS API,否则 acme.sh 将无法自动更新证书,此外配置了 DNS API 就不需要手动添加验证了
我使用的是 dnspod,所以这里写一下 dnspod 的,dnspod 的 token 生成页面,也可以进入dnspod 网站,点击右上角头像,然后点击 API 密钥,选择 DNSPod Token,就到了 dnspod 的 token 生成页面
点击创建密钥,输入获取到 ID 和 token,保存下来
然后回到服务器配置刚才拿到的密钥
export DP_Id="密钥ID"
export DP_Key="密钥token"
三、申请证书
使用下面命令申请证书,mydomain.com 就是需要申请证书的域名,支持通配符域名
./acme.sh --issue --dns dns_dp -d mydomain.com -d www.mydomain.com
证书很快就申请下来了,这里给出的 api id 和 api key 会被自动记录下来, 将来你在使用 dnspod api 的时候, 就不需要再次指定了,直接生成就好了
申请的证书默认是放在/root/.acme.sh/目录下的,如果要在申请证书更改证书存放目录可以加入--cert-home参数,使用下面命令申请证书,其中 mydomain.com 是需要申请证书的域名,sslpath 是存放证书的目录
./acme.sh --issue --dns dns_dp -d mydomain.com --cert-home sslpath
四、删除证书
使用下面命令删除证书,mydomain.com 就是需要删除证书的域名,支持通配符域名
./acme.sh --remove -d mydomain.com
四、使用
看上面申请证书后给的路径
第一个是证书位置
第二个是证书密钥位置
可以直接使用,我这里使用的是宝塔面板,所以直接配置 ssl 就行了,虽然是写需要 pem 格式,但是上面 cer 就可以直接使用
保存之后剩余 3 个月左右到期了,按理说用这个 acme.sh 到了 30 天以内就会自动续期
上面是重新写的,以下是之前写的,记录了一个问题没有删除,之前写的使用了freeSSL,但是使用acme.sh其实是不需要使用其他的配合,之前也是先接触到freeSSL,所以按照freeSSL教程做的,实际上使用其他的还可能会产生其他不太好的问题,之前有记录,但是这次重写删掉了
时隔两个月更新
上面可以看到申请的时候是 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 自动续期的证书和私钥的路径即可
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/sywdebug/article/details/125852872
其他参考文章:
从 acme.sh v3.0 说说 ZeroSSL - 知乎