在只有 IPv6 的服务器上申请 SSL 证书,现在主要有两种成熟且有效的解决方案。选择哪种,主要取决于你是否有域名,以及你的具体场景。
我把两种方案的核心要点整理成了一个表格,方便你快速了解和对比:
解决方案 核心逻辑 主要验证方式 关键要求 / 注意事项
方案一:为域名申请证书 利用支持 IPv6 的 ACME 客户端,通过服务器的 IPv6 地址完成域名验证 。 HTTP-01 或 TLS-ALPN-01 。 1. 域名需解析 AAAA 记录到服务器的 IPv6 地址 。<br>2. 确保服务器 80 (HTTP) 或 443 (TLS) 端口可通过 IPv6 公网访问 。<br>3. 使用支持 IPv6 的 ACME 客户端(如 acme.sh 、Certbot 等)。
方案二:直接为 IPv6 地址申请证书 从 2025 年 7 月起,Let's Encrypt 等 CA 开始支持为公网 IP 地址(含 IPv6)签发证书 。 | HTTP-01 或 TLS-ALPN-01 。 1. 仅限公网 IP:申请的 IPv6 地址必须是公网可路由的 。<br>2. 客户端需支持:ACME 客户端必须支持新的“短周期证书” profile 。<br>3. 有效期短:证书有效期约为 6 天,需配置高频率的自动续期 。<br>4. 无通配符:不支持泛域名,证书中需列出每个具体的 IP 地址 。
实际操作中的几个关键点
无论选择哪种方案,在纯 IPv6 环境下实操时,有几个细节特别值得留意:
ACME 客户端的 IPv6 配置:以常用的 `acme.sh` 为例,在申请证书时,可能需要通过 `--listen-v6` 参数明确指示客户端监听 IPv6 端口以完成 HTTP-01 验证 。其他客户端如 EJabberD 的 ACME 模块,也需要在配置中设置 `ipfamily` 为 `inet6fb4`(IPv6优先)来解决兼容性问题 。一些商业防火墙产品(如 Barracuda)也明确说明在双栈环境下会优先使用 IPv6 进行验证 。
DNS 解析与 DNS64:如果你的服务器需要访问外部资源(如 GitHub、软件源),可能会遇到某些域名没有 AAAA 记录的情况。这时可以配置 DNS64 服务,它能将不存在的 IPv4 地址合成一个 IPv6 地址,通过 NAT64 网关实现访问 。
Web 服务器监听配置:在 Nginx 或 Apache 中,务必配置好 IPv6 的监听。例如 Nginx 中使用 `listen [::]:80;` 和 `listen [::]:443 ssl;` 来确保服务器能够接收 IPv6 的连接请求 。
防火墙放行:确保服务器的防火墙(如 `iptables`、`firewalld`)放行了对应端口(80 和 443)的 IPv6 流量,这是验证能成功的前提 。
如果方便的话,可以告诉我你更倾向于哪种方案(用域名还是直接用IP地址),或者目前使用的是哪个操作系统和ACME客户端,我可以帮你提供更具体的配置步骤。