免费https证书、自动续期

Rockyacmecertbothttps证书大约 6 分钟

CA对比

以下是主流免费 SSL 证书颁发机构(CA)的证书有效期及关键特性对比:

1. Let's Encrypt • 证书有效期:90 天

  • 自动续期:支持(通过 ACME 协议,如 acme.sh
  • 通配符证书:支持(需 DNS 验证)
  • 特点:

完全免费,开源社区维护,支持多域名(SAN),全球信任度高。

官方主页:letsencrypt.orgopen in new window

2. ZeroSSL • 证书有效期:90 天(免费版)

  • 自动续期:支持(需使用 ACME 工具,如 acme.sh
  • 通配符证书:支持(付费版提供,免费版仅单域名)
  • 特点:

免费版支持单域名,需每 90 天手动续期(或通过 ACME 自动化)。

官方主页:zerossl.comopen in new window

3. BuyPass • 证书有效期:180 天

  • 自动续期:支持(通过 ACME 协议)
  • 通配符证书:不支持
  • 特点:

有效期较长,但仅支持非通配符域名,需通过 ACME 客户端管理。

官方主页:buypass.com/sslopen in new window

4. SSL.comopen in new window • 免费证书有效期:30 天

  • 自动续期:部分支持(需手动申请或付费)
  • 通配符证书:不支持(免费版仅单域名)
  • 特点:

免费证书有效期短,适合短期测试,商业用途需付费升级。

官方主页:ssl.comopen in new window

5. Google Public CA • 证书有效期:90 天

  • 自动续期:支持(通过 Google Cloud 服务集成)
  • 通配符证书:支持(需 DNS 验证)
  • 特点:

免费,仅限 Google Cloud 用户使用,与 GCP 服务深度集成。

官方主页:cloud.google.com/certificate-manageropen in new window

对比总结

CA免费有效期自动续期通配符支持适用场景
Let's Encrypt90 天✔️✔️通用,高信任度,推荐长期使用
ZeroSSL90 天✔️❌(免费版)单域名短期需求
BuyPass180 天✔️非通配符域名,需较少维护
SSL.comopen in new window30 天临时测试用途
Google CA90 天✔️✔️Google Cloud 用户专用

注意事项

  1. 信任兼容性:所有 CA 的根证书需被客户端(如浏览器、移动设备)信任,建议优先选择 Let's Encrypt 或 Google CA。
  2. 速率限制:Let's Encrypt 和 ZeroSSL 对域名签发频率有限制(如每周 50 次)。
  3. 自动化工具:使用 acme.shCertbot 可简化证书续期流程(支持 Let's Encrypt、ZeroSSL、BuyPass 等)。

自动化工具

以下是 Certbot 和 acme.shopen in new window 两款主流 ACME 客户端工具的对比,涵盖功能、适用场景和操作特性:

核心功能对比

特性Certbotacme.shopen in new window
开发维护由 EFF 和 Let's Encrypt 官方维护第三方开源社区维护
依赖环境需 Python 环境纯 Shell 脚本(无额外依赖)
默认 CALet's EncryptZeroSSL(可切换为 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.shopen in new window,下面使用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 密钥

  1. Cloudflare 获取 API Token:
  2. 登录 Cloudflare 控制台。
  3. 进入 My Profile > API Tokens。
  4. 创建 Token,权限至少包含 Zone:Zone:ReadZone:DNS:Edit
  5. 保存生成的 Token。

设置环境变量:

export CF_Token="YOUR_API_TOKEN"
export CF_Account_ID="YOUR_CLOUDFLARE_ACCOUNT_ID"  # 可选,某些情况下需要

  1. 阿里云 DNS (Aliyun DNS) 获取 AccessKey:
  2. 登录阿里云控制台。
  3. 进入 RAM 访问控制 > 用户管理,创建子账号并授予 AliyunDNSFullAccess 权限。
  4. 保存子账号的 AccessKey IDAccessKey Secret

设置环境变量:

export ALI_Key="YOUR_ALIYUN_ACCESSKEY_ID"
export ALI_Secret="YOUR_ALIYUN_ACCESSKEY_SECRET"

签发证书

  1. 使用 Cloudflare DNS 挑战
acme.sh --issue --dns dns_cf -d example.com -d *.example.com
  1. 使用阿里云 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/ 目录下,生成的证书文件类似如下图所示:

image.png
image.png

这里简单介绍下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

其他

  1. 权限问题:确保 API Token/AccessKey 有足够的 DNS 修改权限。
  2. 环境变量持久化:若将 API 密钥写入 ~/.bashrc~/.acme.sh/account.conf,重启后仍有效。执行上面的命令后,api密钥会自动写入~/.acme.sh/account.conf 文件。 可以通过 acme.sh —info 查看
  3. 日志查看:使用 acme.sh --list 查看已签发证书,或通过 -debug 参数调试。
  4. 多域名支持:通过多个 d 参数指定多个域名或子域名。

系统推荐









  • 随机毒鸡汤:我被生活磨光了棱角,简单的说就是,我被生活盘了。

    Lush cherry blossoms in full bloom in a vibrant spring setting.