利用 ACME 实现SSL证书自动化配置更新

最近收到腾讯云的通知SSL证书要到期了,本想直接申请的发现现在申请的免费SSL证书有效期只有90天了,顺便了解了一下原因是包括Google在内的国际顶级科技公司一直都有在推进免费证书90天有效期的建议,免费证书加密等级低,难以应对今天日益复杂的网络环境,90天一更新有助于及时发现可能存在的安全漏洞,从而降低风险。 这本意是好的但是苦了我们这些的IT 人了,不过好在有自动化的SSL证书更新神器acme,可以一键申请SSL证书,到期也会自动更新,省去了很多麻烦。


安装acme

首先下载安装 acme,后面的 email修改为自己的用于收取SSL证书相关的消息,acme 默认会安装在~/.acme.sh/目录下。

bash 复制代码
curl https://get.acme.sh | sh -s email=mymail@mail.com

修改SSL证书服务商

默认SSL 证书服务商为 ZeroSSL,申请过程比较容易出错建议修改为letsencrypt,

bash 复制代码
acme.sh --set-default-ca --server letsencrypt

证书申请

证书申请过程需要一个域名验证操作,acme 支持两种验证方式:http 验证和 dns 验证,这里我们采用 dns 验证方式,dns 验证可以手动添加CNAME记录也可以通过 dns 厂商提供的 api 进行添加,后者更方便一下,提供 dns 服务的厂商也很多这里以 dnspod 为例进行说明。

申请DNSAPI

登录 DNSPod通过 API 密钥创建 DNSPod Token,密钥创建后要保存好后续无法查询。

配置DNSAPI

将上一步申请的DNSPod Token的 ID 和 Token导入到环境变量中

BASH 复制代码
export DP_Id="511111"
export DP_Key="2d111111111"

执行申请操作

使用issue命令申请证书, 参数-d 用户指定要申请证书的域名,*.domain.cn是泛域名,domain.cn是根域名,test.domain.cn是单域名,此处需要注意要确定前面指定的SSL证书服务商是否支持申请泛域名,如果不支持就需要多次重复此步操作申请多个 SSL 证书,letsencrypt支持申请泛域名证书;参数 dns 用于指定 dns 服务厂商,执行器需要需要确保上一步的环境变量已经正确导入,可以检查~/.acme.sh/目录下的account.conf文件内容进行确认;命令执行后会通过dnsapi 自动添加CNAME记录并进行验证,验证通过后会在~/.acme.sh/domain.cn 目录生成申请好的证书。

申请过程请关注输出信息,存在异常时可以通过添加--debug参数输出更多信息以便排查。

bash 复制代码
acme.sh --issue -d domain.cn -d *.domain.cn --dns dns_dp

证书安装

证书申请成功还需要安装到对应的位置,需要使用--install-cert命令,这里以 nginx 为例进行说明,-d 参数指定域名,需要和安装的证书文件一一对应,--key-file指定证书私钥的安装位置,--fullchain-file指定证书文件的安装位置,--reloadcmd指定证书文件安装完成应用的重启命令,执行成功会提示 success,可以通过访问自己的域名进行验证,同时命令为添加一条自动化任务"/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null用于定时自动更新 SSL 证书,可以通过crontab -l命令查看。

bash 复制代码
acme.sh --install-cert -d domain.cn \
	--key-file       /usr/local/nginx/conf/cert/domain.cn.key  \
	--fullchain-file /usr/local/nginx/conf/cert/domain.cn.cer \
	--reloadcmd     "/usr/local/nginx/sbin/nginx -s reload"

相关网址

acme 使用说明
dnsapi 使用说明

相关推荐
BullSmall1 天前
Prometheus 如何配置监控 SSL 证书即将过期
网络协议·ssl·prometheus
Zhu7582 天前
【软件更新】在Ubuntu24 LTS中更新openssl到指定版本,例如openssl3.5.6 LTS
linux·ssh·ssl
阿凤214 天前
nginx部署如何配置ssl证书
运维·nginx·ssl
AscendKing4 天前
一款开源、本地部署的 SSL 证书自动化管理工具Certimate介绍 部署教程
开源·自动化·ssl
MonkeyKing_sunyuhua4 天前
Nginx + Let’s Encrypt 免费 SSL 证书 的完整配置过程
运维·nginx·ssl
wAEWQ6Ib76 天前
当今互联网安全的基石 - TLS/SSL
网络·安全·ssl
芯智工坊7 天前
第8章 Mosquitto消息高级特性
网络·人工智能·mqtt·开源·ssl
芯智工坊7 天前
第7章 Mosquitto增加SSL/TLS加密通信
网络协议·https·ssl
EmbeddedCore7 天前
低成本物联网产品放弃SSL加密的隐形成本与市场逻辑
物联网·网络协议·ssl
EmbeddedCore7 天前
守护网络通信的基石:深入解析SSL/TLS协议
网络·网络协议·ssl