免费https证书、自动续期
CA对比
以下是主流免费 SSL 证书颁发机构(CA)的证书有效期及关键特性对比:
1. Let's Encrypt • 证书有效期:90 天
- 自动续期:支持(通过 ACME 协议,如
acme.sh
) - 通配符证书:支持(需 DNS 验证)
- 特点:
完全免费,开源社区维护,支持多域名(SAN),全球信任度高。
官方主页:letsencrypt.org
2. ZeroSSL • 证书有效期:90 天(免费版)
- 自动续期:支持(需使用 ACME 工具,如
acme.sh
) - 通配符证书:支持(付费版提供,免费版仅单域名)
- 特点:
免费版支持单域名,需每 90 天手动续期(或通过 ACME 自动化)。
官方主页:zerossl.com
3. BuyPass • 证书有效期:180 天
- 自动续期:支持(通过 ACME 协议)
- 通配符证书:不支持
- 特点:
有效期较长,但仅支持非通配符域名,需通过 ACME 客户端管理。
官方主页:buypass.com/ssl
4. SSL.com • 免费证书有效期:30 天
- 自动续期:部分支持(需手动申请或付费)
- 通配符证书:不支持(免费版仅单域名)
- 特点:
免费证书有效期短,适合短期测试,商业用途需付费升级。
官方主页:ssl.com
5. Google Public CA • 证书有效期:90 天
- 自动续期:支持(通过 Google Cloud 服务集成)
- 通配符证书:支持(需 DNS 验证)
- 特点:
免费,仅限 Google Cloud 用户使用,与 GCP 服务深度集成。
官方主页:cloud.google.com/certificate-manager
对比总结
CA | 免费有效期 | 自动续期 | 通配符支持 | 适用场景 |
---|---|---|---|---|
Let's Encrypt | 90 天 | ✔️ | ✔️ | 通用,高信任度,推荐长期使用 |
ZeroSSL | 90 天 | ✔️ | ❌(免费版) | 单域名短期需求 |
BuyPass | 180 天 | ✔️ | ❌ | 非通配符域名,需较少维护 |
SSL.com | 30 天 | ❌ | ❌ | 临时测试用途 |
Google CA | 90 天 | ✔️ | ✔️ | Google Cloud 用户专用 |
注意事项
- 信任兼容性:所有 CA 的根证书需被客户端(如浏览器、移动设备)信任,建议优先选择 Let's Encrypt 或 Google CA。
- 速率限制:Let's Encrypt 和 ZeroSSL 对域名签发频率有限制(如每周 50 次)。
- 自动化工具:使用
acme.sh
或Certbot
可简化证书续期流程(支持 Let's Encrypt、ZeroSSL、BuyPass 等)。
自动化工具
以下是 Certbot 和 acme.sh 两款主流 ACME 客户端工具的对比,涵盖功能、适用场景和操作特性:
核心功能对比
特性 | Certbot | acme.sh |
---|---|---|
开发维护 | 由 EFF 和 Let's Encrypt 官方维护 | 第三方开源社区维护 |
依赖环境 | 需 Python 环境 | 纯 Shell 脚本(无额外依赖) |
默认 CA | Let's Encrypt | ZeroSSL(可切换为 Let's Encrypt) |
通配符证书支持 | ✔️(需 DNS 验证) | ✔️(支持 DNS 验证) |
多 CA 支持 | ❌(仅 Let's Encrypt) | ✔️(Let's Encrypt、ZeroSSL、BuyPass 等) |
DNS 提供商集成 | 有限(需插件支持) | 广泛(内置 100+ DNS API 支持) |
自动化续期 | ✔️(需配置 cron) | ✔️(安装时自动配置 cron) |
证书安装灵活性 | 需手动配置路径或插件 | 支持自定义路径和命令(--install-cert ) |
权限管理 | 需 root 权限操作 Web 服务器 | 可非 root 用户运行 |
轻量化 | 较高(依赖 Python 包) | 极低(单文件脚本) |
acme.sh实战
个人比较喜欢用acme.sh,下面使用acme.sh工具来完成证书申请、自动化续期。
安装
# 通过 curl 安装
curl <https://get.acme.sh> | sh
# 或通过 git 克隆
git clone <https://github.com/acmesh-official/acme.sh.git>
cd acme.sh
./acme.sh --install
安装后,脚本会自动添加到 crontab
实现证书自动续期。
切换CA为Let's Encrypt
acme.sh默认采用的CA是ZeroSSL
acme.sh --set-default-ca --server letsencrypt
配置 DNS API 密钥
- Cloudflare 获取 API Token:
- 登录 Cloudflare 控制台。
- 进入 My Profile > API Tokens。
- 创建 Token,权限至少包含
Zone:Zone:Read
和Zone:DNS:Edit
。 - 保存生成的 Token。
设置环境变量:
export CF_Token="YOUR_API_TOKEN"
export CF_Account_ID="YOUR_CLOUDFLARE_ACCOUNT_ID" # 可选,某些情况下需要
- 阿里云 DNS (Aliyun DNS) 获取 AccessKey:
- 登录阿里云控制台。
- 进入 RAM 访问控制 > 用户管理,创建子账号并授予
AliyunDNSFullAccess
权限。 - 保存子账号的
AccessKey ID
和AccessKey Secret
。
设置环境变量:
export ALI_Key="YOUR_ALIYUN_ACCESSKEY_ID"
export ALI_Secret="YOUR_ALIYUN_ACCESSKEY_SECRET"
签发证书
- 使用 Cloudflare DNS 挑战
acme.sh --issue --dns dns_cf -d example.com -d *.example.com
- 使用阿里云 DNS 挑战
acme.sh --issue --dns dns_ali -d example.com -d *.example.com
- 参数说明:
-dns dns_cf
或-dns dns_ali
:指定 DNS 提供商。d
:指定域名,支持通配符证书(.example.com
)。
安装证书
证书默认保存在 ~/.acme.sh/example.com/
目录下,生成的证书文件类似如下图所示:

这里简单介绍下nginx的配置,acme.sh生成的证书文件虽然后缀是cer,但格式是pem格式,所以nginx可以直接用,如下:
#ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.pem;
#ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem;
ssl_certificate /root/.acme.sh/xxx.com/fullchain.cer;
ssl_certificate_key /root/.acme.sh/xxx.com/xxx.com.key;
自动续期
acme.sh
已自动添加 cron 任务,无需手动操作。验证 cron 任务:
crontab -l
如果没有,可以手动添加下,内容如下:
38 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
其他
- 权限问题:确保 API Token/AccessKey 有足够的 DNS 修改权限。
- 环境变量持久化:若将 API 密钥写入
~/.bashrc
或~/.acme.sh/account.conf
,重启后仍有效。执行上面的命令后,api密钥会自动写入~/.acme.sh/account.conf
文件。 可以通过acme.sh —info
查看 - 日志查看:使用
acme.sh --list
查看已签发证书,或通过-debug
参数调试。 - 多域名支持:通过多个
d
参数指定多个域名或子域名。
系统推荐
- MyBatis
- KVM 虚拟机安装
- 手把手教你制作Cookie、Local、Session数据导出插件
- K8S 无感发布
- InnoDB存储引擎
- 分库分表
- Flutter开发需要涉及的知识点大纲
- 多台centos服务器,文件互相备份
- PGSQL的json和 jsonb 读写性能测试
- Lombok的Accessors导致EasyExcel读取失败
- 前后端常用技术
- BBR加速
- 随机毒鸡汤:我被生活磨光了棱角,简单的说就是,我被生活盘了。