# 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 - 右上角头像 - 安全设置 - 密钥管理 - 创建密钥

注意

虽然 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

文章部分内容参考链接: