This post was updated 631 days ago and some of the ideas may be out of date.

前言

我一直使用的都是Let's Encrypt免费的证书,昨天看到群里的大佬发出了一个测试的证书申请的脚本命令,我才接触到acme.sh,于是我查阅了很多大佬的博文了解这个脚本的使用方法。acme.sh功能非常强大,自动安装证书,支持广泛的环境和场景的部署。

acme.sh 是一款方便,强大的 Let's Encrypt 域名证书申请续签程序.支持一键脚本和 docker 部署.支持 http 和 DNS 两种域名验证方式,其中包括手动,自动 DNS 及 DNS alias 模式方便各种环境和需求.可同时申请合并多张单域名,泛域名证书,并自动续签证书和部署到项目.

acme部署

通过使用域名服务商提供的 API 密钥,让acme.sh自动创建域名验证记录以申请域名证书. acme.sh 支持全球各种域名服务商的 API ,本文将以腾讯云为例.更多 DNS API 支持,请查看:官方dnsapi

获取dnsapi

我这边以dnspod为例。其他dnspod获取密钥相差无几。在后台找到即可。
登录dnspod控制台访问api密钥https://console.dnspod.cn/account/token/apikey。获取dnspod密钥,看清楚是dnspod的密钥哦。
dnspod控制台

dnspod api

export DP_Id="123xxx"
export DP_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

阿里云api

export Ali_Key="xxxxxxxxxxxxxx"
export Ali_Secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Cloudflare api

export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

安装脚本

登陆 VPS 服务器使用官方一键安装脚本安装acme.sh

wget -O -  https://get.acme.sh | sh

安装acme

配置 DNS API

acme.sh 程序目录为隐藏目录.acme.sh存放在root下.执行以下命令进入目录,并编辑account.conf,根据上文获取的 API 格式,复制粘贴到文件中保存.

cd ~/.acme.sh
vi account.conf

ins键即可编辑。
编辑conf
按esc输入:wq结束文本编辑。
完成文本编辑

注意目前 account.conf 仅支持一个 DNS API ,多个域名服务商的域名需单独加 --accountconf 参数: 相关 issues 链接

申请证书

自动 DNS 模式标准命令:

其中dns_dp为 腾讯云DNSPod.cn 服务商,自行根据官方dnsapi修改.例如:dns_ali为阿里云,dns_cf为CLoudflare.

acme.sh --issue --server letsencrypt --dns dns_dp -d example.com -d www.example.com

本博客的域名为例:

acme.sh --issue --server letsencrypt --dns dns_dp -d www.solaacg.com

acme.sh 可以同时申请多个域名.例如拥有域名abc.com,123.com,qqq.com,只需要在命令后加上-d 空格 域名即可.

多域名申请证书会将多个证书合并为一个证书,并存放到以第一个域名命名的文件夹内,证书信息仅显示第一个域名的信息.

acme.sh --issue --server letsencrypt --dns dns_dp -d abc.com -d *.abc.com -d 123.com -d *.123.com -d qqq.com -d *.qqq.com

安装证书到指定文件夹

acme.sh 还支持自动部署证书到指定目录并重启nginxapache服务,以确保新证书生效.参考如下:

acme.sh --installcert -d mydomain.com --key-file /root/private.key --fullchain-file /root/cert.crt --reloadcmd "service nginx force-reload"

这里的mydomain.com为你要申请证书的域名,key-filefullchain-file后面的路径分别是密钥文件和证书文件的路径。使用该命令仅更改域名则将在root目录下生成密钥文件private.key和证书文件cert.crt,密钥和证书路径则分别为/root/private.key/root/cert.crt--reloadcmd "service nginx force-reload"则是重载nginx。

示例

acme.sh --installcert -d www.solaacg.com --key-file /www/server/panel/vhost/cert/sola/private.key --fullchain-file /www/server/panel/vhost/cert/sola/cert.crt --reloadcmd "service nginx force-reload"

>

自动续签证书

由于 Let's Encrypt 的证书有效期为三个月.为避免证书失效 acme.sh 会每60天根据你的历史申请记录和部署记录重新续签证书并部署.

昨天向大佬讨教acme的时候,谈到了waf防火墙。他向帮我接入waf,我觉得这个防火墙特别贵,我站点使用简直小题大做,但是大佬坚持给我接入。今天大佬帮我接入了waf防火墙。特别感动。感谢大佬为我的小博客提供了waf防火墙。