Administrator
Published on 2025-10-27 / 2 Visits
0

Let's Encrypt 和 ZeroSSL 免费证书申请差异

#AI

在使用 acme4j 库申请证书时,Let's Encrypt 和 ZeroSSL 存在以下主要差异,需根据实际需求选择:

1. 服务器连接与环境

特性Let's EncryptZeroSSL
生产服务器 URIacme://letsencrypt.orgacme://zerossl.com
测试服务器提供(acme://letsencrypt.org/staging不提供(截至 2024 年 2 月无官方测试环境)
目录地址生产:https://acme-v02.api.letsencrypt.org/directory
测试:https://acme-staging-v02.api.letsencrypt.org/directory
固定为 https://acme.zerossl.com/v2/DV90

2. 账户创建要求

特性Let's EncryptZeroSSL
外部账户绑定(EAB)不需要(默认支持匿名账户)必须(需通过 ZeroSSL 控制台获取 EAB 凭证,如 keyIdentifierhmacKey
账户验证无需提前注册,通过 ACME 协议自动创建需先在 ZeroSSL 平台注册账户并获取 EAB 信息,否则无法创建 ACME 账户

3. 证书申请流程差异

特性Let's EncryptZeroSSL
证书生成时间通常几分钟内完成可能长达 24 小时(需处理 retry-after 头部反复重试)
服务器响应速度较快有时较慢,建议增加超时时间(如设置 networkSettings().setTimeout(Duration.ofSeconds(120))
挑战类型支持全面支持 http-01dns-01tls-alpn-01支持标准挑战类型,但需注意其服务器特性
订单查询不支持 Account.getOrders()(违反 RFC8555,调用会抛 AcmeNotSupportedException未知(文档未明确说明,需测试)

4. 其他注意事项

特性Let's EncryptZeroSSL
库版本要求无特殊要求acme4j 3.2.0+(首个支持版本)
实验性支持稳定支持标记为“实验性”(experimental
社区与文档生态成熟,文档丰富(参考 Let's Encrypt 文档文档较少,问题需提交至 acme4j 仓库而非 ZeroSSL 支持

代码层面的主要差异示例

ZeroSSL 需配置 EAB

// ZeroSSL 必须设置 EAB 凭证
Login login = new AccountBuilder()
    .agreeToTermsOfService()
    .useKeyPair(accountKeyPair)
    .externalAccountBinding("keyIdentifier", "hmacKey") // 从 ZeroSSL 控制台获取
    .createLogin(session);

Let's Encrypt 无需 EAB

// Let's Encrypt 直接创建账户
Login login = new AccountBuilder()
    .agreeToTermsOfService()
    .useKeyPair(accountKeyPair)
    .createLogin(session);

超时设置(针对 ZeroSSL)

// ZeroSSL 建议延长超时时间
Session session = new Session("acme://zerossl.com");
session.networkSettings().setTimeout(Duration.ofSeconds(120)); // 设为 120 秒

总结建议

  • 优先选择 Let's Encrypt:适合测试(有 staging 环境)、快速签发、无需提前注册的场景,生态成熟且稳定。
  • 选择 ZeroSSL:若需其特定证书服务(如某些合规场景),需注意 EAB 配置、长时间等待及超时处理,且仅在 acme4j 3.2.0+ 中支持。