第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