前言
我一直使用的都是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 ,本文将以阿里云,腾讯云,Cloudflare为例.更多 DNS API 支持,请查看:官方dnsapi
获取dnsapi
我这边以dnspod为例。其他dnspod获取密钥相差无几。在后台找到即可。 登录dnspod控制台访问api密钥https://console.dnspod.cn/account/token/apikey。获取dnspod密钥,看清楚是dnspod的密钥哦。
dnspod api
代码语言:javascript复制export DP_Id="123xxx"
export DP_Key="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
阿里云api
代码语言:javascript复制export Ali_Key="xxxxxxxxxxxxxx"
export Ali_Secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Cloudflare api
代码语言:javascript复制export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
安装脚本
登陆 VPS 服务器使用官方一键安装脚本安装acme.sh
wget -O - https://get.acme.sh | sh
配置 DNS API
代码语言:javascript复制acme.sh 程序目录为隐藏目录.acme.sh存放在root下.执行以下命令进入目录,并编辑account.conf,根据上文获取的 API 格式,复制粘贴到文件中保存.
cd ~/.acme.sh
vi account.conf
按ins
键即可编辑。
按esc输入:wq
结束文本编辑。
注意目前 account.conf 仅支持一个 DNS API ,多个域名服务商的域名需单独加 –accountconf 参数: 相关 issues 链接
申请证书
自动 DNS 模式标准命令:
代码语言:javascript复制其中
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
本博客的域名为例:
代码语言:javascript复制acme.sh --issue --server letsencrypt --dns dns_dp -d www.solaacg.com
acme.sh 可以同时申请多个域名.例如拥有域名abc.com,123.com,qqq.com,只需要在命令后加上-d
空格
域名
即可.
代码语言:javascript复制多域名申请证书会将多个证书合并为一个证书,并存放到以第一个域名命名的文件夹内,证书信息仅显示第一个域名的信息.
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
还支持自动部署证书到指定目录并重启nginx
或apache
服务,以确保新证书生效.参考如下:
acme.sh --installcert -d mydomain.com --key-file /root/private.key --fullchain-file /root/cert.crt --reloadcmd "service nginx force-reload"
这里的mydomain.com
为你要申请证书的域名,key-file
和fullchain-file
后面的路径分别是密钥文件和证书文件的路径。使用该命令仅更改域名则将在root
目录下生成密钥文件private.key
和证书文件cert.crt
,密钥和证书路径则分别为/root/private.key
和/root/cert.crt
。--reloadcmd "service nginx force-reload"
则是重载nginx。
示例
代码语言:javascript复制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防火墙。