# Let’s Encrypt
使用 acme.sh
脚本申请 TLS 证书
Last updated on 2020-04-05
# 安装
解决依赖
# Ubuntu
apt -y install socat netcat
# CentOS
yum -y install socat
- 安装
acme.sh
curl https://get.acme.sh | sh
为确保自动更新正常,执行以下命令查看该任务是否存在
crontab -l
使变量生效
source ~/.bashrc
# 申请证书
假设域名为 example.com
;操作时会临时监听 80
端口,请确保执行该命令前端口没有被占用
acme.sh --issue -d example.com --standalone -k ec-256
最后的 ec-256
表示申请的是 ECC 证书(内置公钥是 ECDSA 公钥)
兼容性
ECC 证书不支持 WindowsXP 和 Android 4.X 以下操作系统
- 泛域名证书
泛域名证书仅支持 DNS 验证,通过 DNS 提供商的 API 自动完成操作
以 DNSPod 为例:登录 DNSPod (opens new window) - 右上角头像 - 安全设置 - 密钥管理 - 创建密钥
注意
虽然 DNSPod 被腾讯收购,但是 acme.sh
验证的还是 DNSPod 控制台的密钥,而不是腾讯云控制台中的 API 密钥
申请泛域名证书是验证 DNS 记录完成的,所以不需要占用 80
端口
在终端中将 API 秘钥按如下格式添加到环境变量
DNSPod
export DP_Id="DP_Id"
export DP_Key="DP_Key"
阿里云
export Ali_Key="Ali_Key"
export Ali_Secret="Ali_Secret"
获取泛域名证书
acme.sh --issue --dns dns_dp -d example.com -k ec-256 -d *.example.com
--dns
指定域名提供商;DNSPod:dns_dp
,阿里云:dns_ali
# 更新证书
证书有效期只有 3 个月,但是 acme.sh
脚本会每 60 天自动更新证书Z
注意
虽然脚本会自动更新证书有效期,但你可能需要重启使用证书应用才可使新证书生效; 对于网站若证书已过期则需要客户端清空缓存再试
- 手动更新:
acme.sh --renew -d example.com --force --ecc
# 应用
假设将证书和密钥安装到 ~/.ssl
目录中:
acme.sh --installcert -d example.com --fullchainpath ~/.ssl/example.crt --keypath ~/.ssl/example.key --ecc
提示
使用 --installcert
安装的证书会跟随自动更新任务一并更新
# 自动更新 acme.sh
当 acme.sh
有新版本时自动更新
acme.sh --upgrade --auto-upgrade
禁用自动更新
acme.sh --upgrade --auto-upgrade 0
# 卸载
执行以下命令卸载 acme.sh
acme.sh --uninstall
文章部分内容参考链接: