
在互联网快速发展的今天,网站安全愈发重要,而 SSL/TLS 证书成为了保护网站数据的基础。对于管理多个子域的用户来说,泛域名证书(Wildcard Certificate)是一种高效便捷的选择。
各家云厂商也开始割起来了域名证书的韭菜,泛域名证书收费昂贵,单域名证书免费但将有效期都调整为了三个月。
我之前也是宁愿花费一些小钱来解决这个问题,一年更新一次也不是不行,现在调制为三个月后就需要频繁更新了,正好之前的服务器过期,迁移之后顺便研究起来了证书部署的问题,于是有了这篇文章。
什么是 acme.sh?
ACME(自动证书管理环境)是一个互联网工程任务组维护的协议,它允许自动化 Web 服务器证书的部署,acme.sh 是支持 ACME 协议流行的客户端之一,可以通过其实现 SSL 证书的自动申请、续期等。
安装
在使用 acme.sh 前,需要先在服务器上安装它。acme.sh
的安装过程简单,只需执行几条命令即可。
将 my@example.com
更换为自己的邮箱后执行,安装主要把 acme.sh 安装到你的 home
目录下,并且添加了一个 crontab
用于自动检测所有的证书,如果快过期了,需要更新,则会自动更新证书。
注册 ZeroSSL 账号
acme.sh 目前默认使用 ZeroSSL.com
,ZeroSSL 没有速率限制,可以颁发无限制、有效期为 90 天的 TLS/SSL 证书。
- 先去创建一个 ZeroSSL 账号
- 访问 https://app.zerossl.com/developer 生成你的 EAB 凭证,点击
EAB Credentials for ACME Clients
- 执行命令,注册你的 EAB 凭证,将
xxxxxxxxx
替换为第二步获取到的内容
申请签发泛域名证书
我选择直接使用 DNS API 模式进行签发,还支持其他模式可以自己研究,我的域名都在腾讯云,所以通过 DNSPod 可以管理。
登录 DNSPod 控制台获取到 DNSPod Token:https://console.dnspod.cn/account/token/token
获取后将值存入到系统环境变量中:
保存后就可以开始申请了:
运行后,acme.sh 将自动为 example.com
域名申请泛域名证书,如果没有出错,会将证书文件保存在 ~/.acme.sh/example.com/
目录下,并且会自动为该域名创建配置,以便自动执行续期任务。
安装证书
acme.sh 不建议直接使用 ~/.acme.sh/
目录下的证书文件,而是通过 acme.sh 提供的命令将证书安装到指定位置,以确保证书的正确使用和续期。
将路径设置为自己的路径即可,在 reloadcmd
中执行重启 Nginx 的命令,到这一步本机的证书已经是没问题了,但是如果使用了 CDN 等服务的话,仍然需要更新对应服务的证书配置。
acme.sh 提供了阿里云 CDN 的脚本,没有腾讯云的,所以我自己顺手写了一个小工具。
Cert Manager
将本地通过 acme.sh 生成的证书上传到对应云服务的证书服务中,以便于在云服务中使用证书。
调用了腾讯云的获取证书列表和一键更新旧证书资源两个接口,可以直接更新对应的资源使用的证书,支持 clb、cdn、waf、live、ddos、teo、apigateway、vod、tke、tcb、tse、cos。
使用 composer 安装后,获取腾讯云的 SecretId 和 SecretKey,也放到环境变量中:
从 config.example.php
复制一份到 config.php
,并根据实际情况修改配置:
这样就可以使用 tx-cert-manger
命令来更新腾讯云的服务了。
配合 reloadcmd,就可以实现续期后自动更新证书文件到腾讯云,并重启本地的 Nginx 服务了。
acme.sh 是一个功能强大、配置灵活的 ACME 客户端,特别适合需要管理多个域名和子域名的用户。
通过 acme.sh,不仅可以快速申请泛域名证书,还能轻松实现自动更新,降低了 SSL 证书管理的复杂度。
如果你的站点涉及多个子域名,那么使用 acme.sh 申请泛域名证书是一个不错的选择。