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 自动更新

在这里最好先切换一下证书类型,看下面续期时出现过问题

./acme.sh --set-default-ca --server letsencrypt

在这里插入图片描述

二、配置 DNS API

通过官方说明文档可知,acme.sh 申请证书有两种方式,http 和 dns 验证

  1. http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了
  2. 手动 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 自动续期的证书和私钥的路径即可

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

Written ❤️ sywdebug.
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐