You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何生成可绕过Common Name校验的Docker自签名SSL证书?

问题:Docker SSL证书CN校验失败,如何生成支持IP访问的证书

将证书脚本中的CN="192.168.56.10"替换为CN="*"后,访问https://192.168.56.10:2375/version时出现如下错误:

Symfony\Component\HttpClient\Exception\TransportException: SSL: certificate subject name '*' does not match target host name '192.168.56.10' for "https://192.168.56.10:2375/version"

原因说明

通配符*作为Common Name(CN)仅适用于域名场景,无法匹配IP地址。SSL校验IP访问时,会检查证书的**Subject Alternative Name(SAN)**字段是否包含目标IP,而非仅依赖CN。

修改后的证书生成脚本

以下脚本会生成包含指定IP的SAN扩展的服务器证书,解决IP访问时的校验问题:

#!/bin/bash

set -eo pipefail

cd $(dirname $0)

# 配置信息
C=PL
ST=Mazovia
L=Warsaw
O="PHP-HTTP"
TARGET_IP="192.168.56.10"

# 1. 生成CA证书和私钥(用于签署服务器证书)
openssl req -out ca.pem -new -x509 -subj "/C=$C/ST=$ST/L=$L/O=$O/CN=docker-ca" -passout pass:password -keyout ca.key

# 2. 生成服务器私钥
openssl genrsa -out server.key

# 3. 生成证书请求(CSR),添加SAN扩展指定目标IP
openssl req -key server.key -new -out server.req -subj "/C=$C/ST=$ST/L=$L/O=$O/CN=*" -passout pass:password -addext "subjectAltName=IP:$TARGET_IP"

# 4. 用CA签署服务器证书,确保SAN扩展被包含
openssl x509 -req -in server.req -CA ca.pem -CAkey ca.key -CAserial file.srl -out server.pem -passin pass:password -extfile <(echo "subjectAltName=IP:$TARGET_IP")

关键调整点

  • 显式生成CA私钥ca.key(原脚本未明确指定,避免依赖默认生成的privkey.pem)
  • 在生成证书请求和签署证书时,都添加subjectAltName扩展,指定允许访问的IP地址
  • 若需支持多个IP或域名,可扩展SAN字段,例如:subjectAltName=IP:192.168.56.10,IP:127.0.0.1,DNS:docker.local

测试注意事项

确保测试脚本中使用的客户端证书信任该CA(或直接使用生成的ca.pem作为根证书),避免出现证书不信任的问题。

内容的提问来源于stack exchange,提问作者sebastian_t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 15:17:16