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

自签名SSL证书动态SAN配置或绕过SAN校验方案咨询

解决自签名SSL证书支持动态/多IP SAN的方案

1. 明确限制:SSL证书不支持IP通配符

首先要清楚:SSL证书的SAN字段不允许使用IP通配符(比如192.168.1.*这类写法完全无效),没法用通配符覆盖整个网段。

2. 预添加可能用到的IP到SAN

如果能预估部署环境的IP范围(比如确定在192.168.0.0/24或10.0.0.0/8网段内),可以把该网段内所有可能用到的IP都加到SAN字段里。

具体操作(OpenSSL为例)

  • 创建自定义配置文件(比如openssl-san.cnf):
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = MyAppServer

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.0.10
IP.2 = 192.168.0.11
IP.3 = 10.0.0.5
IP.4 = 10.0.0.6
# 可继续添加更多潜在IP
  • 用该配置生成证书和密钥:
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -config openssl-san.cnf -nodes

3. 部署时动态生成证书

如果完全无法预估IP,最可靠的方式是在部署阶段自动生成包含当前服务器IP的SAN证书。

实现思路

  • 通过部署脚本(Shell、Ansible、Terraform等)先获取当前服务器的IP(比如用hostname -I、ip addr命令提取)。
  • 动态生成包含该IP的OpenSSL配置,再生成证书。

示例Shell脚本片段

# 提取当前服务器主IP(可根据实际环境调整提取逻辑)
SERVER_IP=$(hostname -I | awk '{print $1}')

# 动态生成OpenSSL配置文件
cat > openssl-dynamic.cnf << EOF
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = MyAppServer

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = IP:$SERVER_IP
EOF

# 生成证书
openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -config openssl-dynamic.cnf -nodes

每次部署都会生成适配当前IP的SAN证书,完美解决动态IP问题。

4. 用DNS名称替代IP(优先推荐)

如果客户端支持通过DNS名称访问服务,建议用DNS SAN替代IP SAN:

  • 证书的SAN字段添加DNS条目(比如myapp.example.com),部署时将服务器IP绑定到该DNS记录(可配合动态DNS服务)。
  • 客户端通过DNS名称访问,无需关心IP变化,证书也不用修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:31:12