HTTPS证书终于挥下了无情的镰刀-HTTPS证书自动续签方案
现在网站基本都上了 HTTPS 证书
阿里云 SSL 产品日前发布公告,公告显示自 2023 年 11 月 14 日开始生效厂商策略,对于免费提供的 SSL 证书签发后证书有效期统一为 3 个月,不再免费提供 1 年版免费证书。想要 1 年的需要购买 68 块一年。终于 HTTPS 证书也开始收割了。有钱的可以去支持下,毕竟不能一直靠爱发电。
继而腾讯云等相关证书厂商也都更改了策略,一时间 HTTPS 证书哀嚎遍野。 腾讯云可以申请 1 年的的,但是数量只有 10 个。
之前是免费 1 年的,数量也够用,也就懒得折腾了。到期再换,本来也想看证书自动续期的方案,正好借此机会研究下。
使用 acme.sh 自动签发 ZeroSSL 的 ECC 证书
安装 acme.sh
先安装好 curl,然后执行脚本:
在线安装 使用如下命令,邮箱设置为你接受通知的邮箱号 curl https://get.acme.sh | sh -s email=my@example.com 或者 wget -O - https://get.acme.sh | sh -s email=my@example.com git方式 国内服务器使用 git clone https://gitee.com/neilpang/acme.sh.git git clone https://github.com/acmesh-official/acme.sh.git cd ./acme.sh ./acme.sh --install -m my@example.com
请注意替换 my@example.com.com 为你自己的邮箱,方便证书到期或者签发等结果通知。
安装完成后重新加载 Bash:
source ~/.bashrc
然后开启自动更新:
acme.sh --upgrade --auto-upgrade
目前 acme.sh 支持 5 个正式环境 CA,分别是
Let's Encrypt
Buypass
ZeroSSL
SSL.com
Google Public CA,
默认使用 ZeroSSL,如果需要更换可以使用如下命令:
切换 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 acme.sh --set-default-ca --server google
配置 zerossl 的泛域名证书
如果没有 zerossl 账户也是可以生成的,但是建议注册个账户方便以后通过 api 管理你申请的证书。
注册后进入 developer 界面
如图上面是 API key,下面是 EAB
将 acme.sh 的注册服务器改为 ZeroSSL
acme.sh --register-account --server zerossl \ --eab-kid xxxxxxxxxxxx \ --eab-hmac-key xxxxxxxxx
获取 eab-kid 和 eab-hmac-key
方式 1 通过 API Key 获取
curl -s -X POST "https://api.zerossl.com/acme/eab-credentials?access_key=c3xxxxxx" { "success": true, "eab_kid": "EWxxxxxxxx", "eab_hmac_key": "KPeQJxxxxxxxxx" }
方式 2 直接生成 eab
保存后执行上面的命令 将 acme.sh 的注册服务器改为 ZeroSSL,然后返回注册成功信息
使用 Dns Api 注册正式
可以申请泛域名证书。 比如 *.abc.com 可以自动检测更新。
有多种方式可以申请证书,但是 如果使用泛域名,只能使用 DNS API 模式,且会自动更新,推荐这种方式:
为了保证安全 创建一个用户 单独申请 DNS 管理权限
打开 RAM 访问控制-->身份管理-->创建用户”,输入 用户名、备注; 选择 OpenAPI 调用访问 启用 AccessKey ID 和 AccessKey Secret, 支持通过 API 或其他开发工具访问
点击右边的“添加权限”按钮,打开授权窗口。
# 先添加阿里云Aliyun的DNS api密钥到临时环境变量 export Ali_Key="AccessKeyId" export Ali_Secret="AccessKeySecret"
执行注册命令 (可以进行单域名、多域名、泛域名进行颁发。)
# 上面的临时变量,在添加证书后,会保存在account.conf中,后续不需要再指定 acme.sh --issue --dns dns_ali -d abc.com -d *.abc.com --keylength ec-256 #查看命令帮助 acme.sh -h
--dns 指定 DNS 服务商,dns_dp 代表 DNSPod,还有 dns_cf 代表 CloudFlare,更多的字段见 https://github.com/acmesh-official/acme.sh/tree/master/dnsapi
-d *.abc.com 表示签发泛域名证书 如果 shell 工具不行视情况加*转义
--keylength ec-256 表示签发 ECC 证书,不添加则签发 RSA 证书,可选参数还有 ec-384 和 ec-521
这里会进行域名的 DNS 验证,中间会等待 若干 秒来验证正确性,验证成功后会有成功标记。
export DP_Id="API Token 的 ID" export DP_Key="API Token"
acme.sh --issue --dns dns_dp -d abc.com -d *.abc.com --keylength ec-256
要停止续签某域名的话,手动执行 然后删除证书目录
acme.sh --remove -d abc.com
其他
ECC 证书:ECC 证书是基于 ECC 算法的 SSL 证书,ECC 证书中文名称为椭圆加密算法,新一代算法趋势主流,一般采用 256 位加密长度,加密速度快,效率更高,对服务器资源消耗低,而且最重要的是更安全,抗攻击型更强。
RSA 证书:RSA 证书是基于 RSA 算法的 SSL 证书,RSA 算法是国际标准算法,应用较早,最为普及,比 ECC 算法的适用范围更广,兼容性更好,一般采用 2048 位的加密长度,但是对服务端性能消耗高。
acme 的 github 地址(https://github.com/acmesh-official/acme.sh?tab=readme-ov-file)