侧边栏壁纸
  • 累计撰写 64 篇文章
  • 累计创建 46 个标签
  • 累计收到 96 条评论

目 录CONTENT

文章目录

使用ACME申请泛域名证书并自动续期

草莓牛奶
2022-10-22 / 1 评论 / 4 点赞 / 1,885 阅读 / 1,119 字 / 正在检测是否收录...
温馨提示:
「博客文章out of date 会及时更新,无特殊说明仍然有效,欢迎指正内容中的错误」

推荐DNS 认证(使用 Cloudflare API),申请泛域名证书配合Xray进行SNI分流

一、安装ACME

很多教程会让你用 Cloudflare 的全局 Global API Key,真的是,风险太大了,最后怎么被黑的都不知道 = =

image-20221022160304351

# 安装 acme.sh
curl https://get.acme.sh | sh -s [email protected]

# 刷新 shell 变量配置
source ~/.bashrc

#开启自动更新
acme.sh --upgrade --auto-upgrade

# 导入 Cloudflare API Token
export CF_Token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#export CF_Account_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#export CF_Zone_ID="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

二、选择默认 CA

目前 acme.sh 支持四个正式环境 CA,分别是 Let’s Encrypt、Buypass、ZeroSSL 和 SSL.com,默认使用 ZeroSSL,如果需要更换可以使用如下命令:

功能 LE Buypass ZeroSSL SSL.com Google Public CA
有效期 90 天 180 天 90 天 90 天 90 天
多域名 支持 支持,最多 5 个 支持 收费支持 支持
泛域名 支持 不支持 支持 收费支持 支持
Rate Limit 收费无 未知
GUI 管理
ECC 证书链 未知
客户支持 社区 收费 收费 收费 收费

简单来说,如果没有特殊需求,可以选择 Let’s Encrypt,如果服务器在国内,可以选择 ZeroSSL 或 Buypass,如果愿意付费得到更好的服务和保障,可以选择 ZeroSSL 和 SSL.com,如果面向欧盟用户,可以选择 Buypass 和 ZeroSSL。

注意:经过测试 Google Public CA 的 ACME 验证域名在国内是无法访问的,只有国外服务器才可以申请,申请完成后的证书并无影响。

#切换 Let's Encrypt
acme.sh --set-default-ca --server letsencrypt
#切换 Buypass
acme.sh --set-default-ca --server buypass
#切换 ZeroSSL
acme.sh --set-default-ca --server zerossl
#切换 SSL.com
acme.sh --set-default-ca --server ssl.com
#切换 Google Public CA(Google Public CA 需要按照官方博客申请内测,然后获取 Key)
acme.sh --set-default-ca --server google

添加ZeroSSL账号

在ZeroSSL后台控制面板拿到 API Key

apt install jq
curl -s -X POST "https://api.zerossl.com/acme/eab-credentials?access_key=你的API_Key" | jq

终端输出如下内容

{
  "success": true,
  "eab_kid": "kid字符串",
  "eab_hmac_key": "hmac_key字符串",
}

添加帐号

acme.sh --register-account  --server zerossl \
        --eab-kid kid字符串  \
        --eab-hmac-key hmac_key字符串

三、获取并部署SSL证书

**RSA算法:**国际标准算法,应用较早,最为普及,比ECC算法的适用范围更广,兼容性更好,一般采用 2048 位的加密长度,但是对服务端性能消耗高。

**ECC算法:**中文名称为椭圆加密算法,新一代算法趋势主流,一般采用 256 位加密长度,加密速度快,效率更高,对服务器资源消耗低,而且最重要的是更安全,抗攻击型更强。

# 签发 RSA 证书
acme.sh --issue --dns dns_cf -d domain.tld -d *.domain.tld

# 安装 RSA 证书到指定路径
acme.sh --install-cert -d domain.tld \
--key-file       /path/to/ssl/domain.tld_private.key  \
--fullchain-file /path/to/ssl/domain.tld_chain.crt

注意, 默认生成的证书都放在安装目录下: ~/.acme.sh/ , 请不要直接使用此目录下的证书文件。 正确的使用方法是使用 –install-cert 命令,并指定目标位置, 然后证书文件会被copy到相应的位置

# 签发 ECC 证书
acme.sh --issue --dns dns_cf -d domain.tld -d *.domain.tld --keylength ec-256

# 安装 ECC 证书到指定路径
acme.sh --install-cert -d domain.tld --ecc \
--key-file       /path/to/ssl/domain.tld_private.key  \
--fullchain-file /path/to/ssl/domain.tld_chain.crt

四、自动刷新证书

安装 acme.sh 时会自动创建一个 cronjob,每天定期检查所有证书,如果证书需要更新会自动更新证书。
通过 crontab -l 查看 crontab 任务:

#查看Crontab定时任务
crontab -l

#若无定时任务,加之如下,对应路径改一下
crontab -e
17 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

五、其他

如果要撤销一个证书,使用:

acme.sh --list
acme.sh --revoke -d domain.tld
acme.sh --revoke -d domain.tld --ecc

如果要删除一个证书,使用:

acme.sh --list
acme.sh --remove -d domain.tld
acme.sh --remove -d domain.tld --ecc

强制刷新证书

acme.sh --renew -d domain.tld --force
acme.sh --renew -d domain.tld --ecc --force
4

评论区