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

一、安装ACME

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

# 安装 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

简单来说,如果没有特殊需求,可以选择 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

DigitalOcean Referral Badge
最后修改:2024 年 04 月 20 日
如果觉得我的文章对你有用,请随意赞赏