acme.sh 申请证书笔记
写在开头
由于一年期免费证书现在已经基本绝迹,最省时省力的方案莫过于acme.sh自动部署更新。虽然我的目前大多数服务以及跑在了无服务器系统上,但通过一个自动程序来随时获得有效的网站证书,还是有一定必要性。 若像我一样均采用Cloudflare的服务,可以在Cloudflare的仪表盘中生成15年有效期的自签证书,可通过Cloudflare系统的https验证,无需部署公共CA证书,公共CA证书系统会帮助自动申请,目前的提供商是GTS和Sectigo。 以下简单记录下在申请过程中的一些步骤和注意点。 ACME
安装并设置
安装acme.sh
curl https://get.acme.sh | sh -s [email protected]
设置alias以便快速启动
echo "alias acme.sh='~/.acme.sh/acme.sh'" >> ~/.bashrc
source ~/.bashrc
测试是否安装成功
acme.sh --version
成功返回版本即为安装成功
设置默认申请邮箱
acme.sh --register-account -m [email protected]
请将 [email protected] 替换为你要设置的邮箱地址,设置完成后,后续的证书申请都会默认使用该邮箱。
选择申请证书的机构
根据官方文档,目前acme支持五家SSL证书发行商,分别是:
- ~ZeroSSL.com CA~(默认)
- 支持多域名&泛域名,有效期90天
- 上级CA:Sectigo(USERTrust ECC Certification Authority)
- Letsencrypt.org CA
- 支持多域名&泛域名,有效期90天
- 上级CA:ISRG(ISRG Root X1)
- ~BuyPass.com CA~
- 支持多域名(单证书内最多5个),有效期180天
- 上级CA:Buypass(Buypass Class 3 Root CA)
- ~SSL.com CA~
- 仅支持单域名,需注册,有效期90天
- 上级CA:SSL.com(SSL.com Root Certification Authority RSA R2)
- ~Google.com Public CA~
- 支持多域名&泛域名,有效期90天
- 上级CA:GTS(GTS Root R4)
综上建议选择默认的ZeroSSL/Let’s Encrypt/GTS,自动续签且支持多域名&泛域名,一次申请一劳永逸。
#### 证书机构切换
bash acme.sh --set-default-ca --server zerossl
其中—server后表示要切换到的机构,可选项为:
- zerossl/letsencrypt/buypass/google/ssl.com
以下申请步骤以ZeroSSL为例,使用Cloudflare DNS API。
配置Cloudflare DNS API
获取API密钥步骤:
1.登录到 Cloudflare Dashboard。
2.转到 My Profile。
3.在 API Tokens 下,创建一个带有 DNS 编辑权限的 API 令牌,或使用 Global API Key。
填入下列代码中,终端运行。
bash
export CF_Token="你的Cloudflare_API_Token"
同时也支持多家DNS服务商,详见Github。
申请证书
acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'
申请examle.com及*.example.com 两个域名的证书,可根据需要自行修改,新增域名在后面继续加入-d 域名即可。
若需指定证书机构,加入—server选项即可。
bash
acme.sh --issue --dns dns_cf -d example.com --server zerossl
安装证书
根据自己网站服务器版本选择相应的代码安装,以下以Apache为例:
bash
acme.sh --install-cert -d example.com \
--key-file /path/to/your/domain.key \
--fullchain-file /path/to/your/domain.cer \
--reloadcmd "service apache2 reload"
以上部分的域名及路径请手动修改,路径在上一步申请完成证书后会反馈。
设置定期更新
acme.sh --renew -d example.com --force
后续即可自动完成证书更新,无需人为干预。
以上,就是acme.sh申请配置证书的全过程,附最终效果参考。