推荐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,如果需要更换可以使用如下命令:
功能 | 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
评论区