This post was updated 882 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 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
配置 DNS API
acme.sh 程序目录为隐藏目录.acme.sh存放在root下.执行以下命令进入目录,并编辑account.conf,根据上文获取的 API 格式,复制粘贴到文件中保存.
cd ~/.acme.sh vi account.conf
按ins
键即可编辑。
按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
还支持自动部署证书到指定目录并重启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。
示例
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防火墙。
参与讨论