第250123期 - acme.sh
40.9k star,快速使用acme.sh,ssl证书替换神器
40.9k star,快速使用acme.sh,ssl证书替换神器
假设你搞了博客,服务器买好了,域名买好了,服务开发好了,然后发现还需要证书,而且免费的3个月就要换?
假设你是网站的维护人员,公司预算紧张,就是没有买一年ssl证书的预算,但你又不想吭哧吭哧的隔三个月就去替换,怎么办?
假设你们公司不大,站点不少,有的用的还是三级域名,以往证书都是一个域名一个,你想要使用泛域名证书,怎么办?
好办,使用acme.sh就可以解决上述所有问题。
在开始介绍之前,我们先了解下acme。
acme
acme是一种协议,就是用来简化及自动化获取和管理SSL证书的。
而acme.sh就是一个开源的acme协议的客户端,用于从 Let’s Encrypt 和其他 ACME 兼容的证书颁发机构获取免费的 SSL/TLS 证书。它完全用 Unix shell 脚本编写。
如何安装acme.sh
如果你的网络通畅,那么可以使用官方给出安装脚本,如下:
curl https://get.acme.sh | sh -s email=my@example.com
如果你是国内用户,那么可以采用如下方式:
git clone https://gitee.com/neilpang/acme.sh.git
cd acme.sh/
./acme.sh --install -m my@example.com
安装完成后,它会直接添加环境变量,你可以直接执行 acme.sh
并且会自动添加crontab
可以通过 crontab -l 查看
快速使用acme.sh
主要分为两步,生成证书、安装证书
下面场景,主要针对nginx环境,如果是apache,可以到官方去查看
证书生成
可以通过http方式或者dns方式来生成证书。
http验证方式:
acme.sh --issue -d mydomain.com -d www.mydomain.com --webroot /home/wwwroot/mydomain.com/
上述域名及网站的根路径需要替换为你的实际域名及路径
上述命令会完成如下事项:
-
生成证书签名请求(CSR):acme.sh 将生成一个 CSR 文件。
-
创建验证文件:acme.sh 将在指定的 Web 根目录中创建一个验证文件,以证明您对域名的所有权。
-
请求证书:acme.sh 将向证书颁发机构(CA)请求证书。
-
验证域名:CA 将访问验证文件以确认域名所有权。
-
签发证书:验证通过后,CA 将签发 SSL/TLS 证书。
dns验证方式:
acme.sh --issue --dns -d mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
上述命令会生成一条TXT记录需要在域名解析平台添加,添加完成后,再次执行
acme.sh --renew -d mydomain.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
官方提供可通过api方式去验证,如果你的域名解析是配置在阿里云、腾讯dnspod、cloudfare等平台上,那么该过程可以自动完成。
如下为DNSPod的一个简单使用,开始之前你需要建立一个拥有域名解析管理的ak、sk
生成后设置环境变量
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
执行如下命令
acme.sh --issue --dns dns_dp -d mydomain.com -d www.mydomain.com
证书安装
通过执行如下的命令,可以将证书文件从默认的目录下复制到指定的位置:
-
—cert-file 指定证书文件的目标路径。
-
—key-file 指定私钥文件的目标路径。
-
—fullchain-file 指定完整链证书文件的目标路径。
acme.sh --install-cert -d mydomain.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"
上述命令中
—reloadcmd 参数指定了在证书安装或更新后需要执行的命令,nginx会重新加载新的证书。
前面最开始的时候我们看到过在安装的时候,会生成一条crontab记录,如果你想要自己手动去更新,那么可以将那条配置去掉。
同样nginx的reload工作也可以自行完成,可以去掉。
泛域名证书生成及安装
大部分步骤与上面一致,关键在于生成证书的命令需要调整为
acme.sh --issue --dns dns_dp -d *.mydomain.com -d mydomain.com
acme.sh 的更新
因为各种协议的变更,所以建议及时更新acme.sh
你可以选择手动更新或者自动更新,分别如下:
acme.sh --upgrade
acme.sh --upgrade --auto-upgrade
docker方式使用acme.sh
docker run --rm -it -v /path/to/acme.sh:/acme.sh neilpang/acme.sh --issue --dns dns_dp -d mydomain.com