免费SSL(TLS)通配符证书自动签发、续签方案
前言
本人的各种服务分别在不同的运营商下,给人以很强的割裂感。比如:
- 云服务:阿里云
- SSL/TLS证书:阿里云
- 域名托管:西部数据
- 。。。。。。
原因在于当初起始购买租赁它们的时候,它们各自的服务都在推广期,价格很能打,久而久之也就沿用至今了。
但还好我自己乱中有序,要统一他们其实也并不难。但如果全部都为一家供应商,那自动化起来也就容易许多,还好我后期增加的服务都尽量使用阿里云了,诸如对象存储阿里云OSS、CICD阿里云云效。
很久以前开始市面上的网站都开始强制使用HTTPS对应的SSL/TLS加密了,还依然只有用HTTP只会是的网站被各种浏览器拦截影响用户体验,打不过就加入。
局限
我的网站早在2016年建站时就接入了HTTPS,当时使用的是阿里云的SSL证书(现改名为数字证书管理服务)
但其有痛点:
- 只能对二级域名颁发证书;
- 单证书有效期1年;
不过这两点自己可以接受,毕竟当初自己那么多二级域名需求,一年一签自己的改动倒也不算很多。
但随着时间推移,自己遇到了问题:
- 2023年左右单个二级域名证书有效期被缩短为3个月;
- 随着个人子网站增多,自己要同时维护多个二级域名;
综合起来维护难度成几何倍数增加,索性开始找寻自动化方案,还好找到了acme.sh
acme.sh自动化数字证书
官网:acme.sh
中文文档:https://github.com/acmesh-official/acme.sh/wiki/说明#tocbar-e2of1r
安装
方式一:根据文档里的安装步骤,通过shell脚本从github下载后自动安装,但会要求服务器可以访问github
方式二(推荐):在github项目Releases里(https://github.com/acmesh-official/acme.sh/releases)找到最新的包,下载后上传到服务器后安装,具体步骤:
- 解压到当前用户(尽量还是root用户)home目录
- 进入【用户home目录/acme.sh/】
- ./acme.sh --install -m my@example.com
生成证书
推荐使用自动验证(DNS API),步骤:
- 从DNS运营商列表中找到你的域名供应商
- 点击锚点跳转到对应的API
- 按照说明操作配置即可,比如我的域名在西部数据:
- 我优先进入https://www.west.cn/manager/API/APIconfig.asp设置专属密码
- 利用md5(很多在线md5加密)加密了密码后设置为WEST_Key
- 增改~/.acme.sh/account.conf下的对应字段
- 执行acme.sh --issue --dns dns_dp -d example.com -d *.example.com【替换为你的域名】
注:我首次执行,未成功签发,再次执行就好了
复制证书
不要手动复制
我的服务器为Apache,我执行(替换为你对应的信息):
acme.sh --install-cert -d example.com \
--cert-file /path/to/certfile/in/apache/cert.pem \
--key-file /path/to/keyfile/in/apache/key.pem \
--fullchain-file /path/to/fullchain/certfile/apache/fullchain.pem \
--reloadcmd "service apache2 force-reload"
--reloadcmd参数
- 会在每次更新证书后,自动通过你传递的命令("service apache2 force-reload")重载配置
reloadcmd
非常重要。证书会自动申请续签,但是如果没有正确的reloadcmd
命令,证书可能无法被重新应用到 Apache 或者 Nginx,因为配置没有被重载。
**最后一步:**修改服务器上Apache对应的配置文件后重启网站服务即可生效验证
安装证书后,相关信息是保存在 ~/.acme.sh/example.com/example.conf
文件下的,内容就是 acme.sh --info -d example.com
输出的信息,不过 reloadcmd
在文件中使用了 Base64 编码。理论上可以通过直接修改该文件来修改 ReloadCmd
,且修改时,无需 Base64 编码,直接写命令原文 acme.sh
也可以识别。
自动续签
只要运行过acme.sh --install-cert
后,即生成了自动化任务。
默认情况下,证书每 60 天更新一次(可自定义)。更新证书后,Apache 或者 Nginx 服务会通过 reloadcmd
传递的命令自动重载配置。
自己通过日志实测查看,会在中午检查:[12:48:01 AM CST 2025] Running cmd: cron
强制续签证书:
acme.sh --renew -d example.com --force
其他方案
Certbot官方工具方案
Github地址 https://github.com/certbot/certbot
中文介绍
https://docs.certcloud.cn/docs/installation/auto/acme/certbot/
签发流程
# 通过DNS插件自动验证 certbot certonly --manual --preferred-challenges dns \ -d example.com --server https://acme-v02.api.letsencrypt.org/directory
支持HTTP验证、DNS验证两种模式
自动化续签* 通过systemd定时器实现:
certbot renew --quiet --no-self-upgrade --post-hook "systemctl reload nginx" ```:ml-citation{ref="2" data="citationList"}
第三方服务平台方案
JoySSL
- 注册时填写注册码
230922
获取自动续签权限 - 支持API对接实现证书自动更新到服务器/CDN
- 注册时填写注册码
HTTPSOK平台
支持通配符证书自动签发(免费版5张/账号)
提供Nginx一键部署脚本:
curl -sSL https://dl.httpsok.com/install | bash -s <API_KEY>
自动同步证书到阿里云、腾讯云等10+云厂商
GitHub Actions自动化方案
- 私有仓库搭建 克隆auto-ssl项目到私有仓库,配置CF_TOKEN等密钥
- 证书托管机制 通过Git提交记录保存证书文件,每日自动检查有效期 续签后的证书变更自动提交到仓库
对比
方案 | 技术门槛 | 支持通配符 | 部署复杂度 | 适用场景 |
---|---|---|---|---|
acme.sh | 中 | ✔️ | 中 | 开发者/运维人员 |
Certbot | 低 | ✔️ | 低 | 常规Web服务器 |
第三方平台 | 低 | ✔️ | 低 | 非技术用户/多CDN环境 |
GitHub Actions | 高 | ✔️ | 高 | DevOps自动化流水线 |
总结
- 个人开发者优先使用acme.sh方案,功能最灵活
- 企业用户推荐HTTPSOK平台,支持多云厂商自动同步
- 需完全开源方案可选用Certbot+Let's Encrypt组合