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

OpenSSL创建链式证书遇证书无效错误及SubjectAltName添加问题

解决OpenSSL 1.0.1g服务器证书添加Subject Alternative Name的问题

OpenSSL 1.0.1g对证书扩展的处理比较死板——必须显式关联配置段,光修改配置文件不指定对应段的话,扩展根本不会生效。下面是针对你的三级证书链场景的具体解决步骤:


1. 修正配置文件的扩展定义

不管是生成服务器CSR的配置,还是中间CA签名用的配置,都要明确扩展段:

服务器CSR配置(比如openssl-server.cnf)

[ req ]
default_bits        = 2048
distinguished_name  = req_distinguished_name
req_extensions      = v3_req  # 生成CSR时就把扩展嵌进去

[ req_distinguished_name ]
# 保留你原来的DN配置,比如国家、组织、CN等
commonName                  = your-server-domain.com

[ v3_req ]
basicConstraints        = CA:FALSE
keyUsage                = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName          = @alt_names

[ alt_names ]
DNS.1 = your-server-domain.com
DNS.2 = sub.your-server-domain.com
IP.1  = 192.168.1.100  # 有需要就加IP地址

中间CA签名配置(比如openssl-intermediate.cnf)

必须确保中间CA允许签发带扩展的服务器证书:

[ ca ]
default_ca = CA_default

[ CA_default ]
# 保留你原来的CA配置(比如证书路径、数据库等)
policy      = policy_anything
x509_extensions = server_cert  # 指定签服务器证书用的扩展段

[ policy_anything ]
# 允许DN字段灵活匹配,根据你的需求调整
countryName             = optional
stateOrProvinceName     = optional
commonName              = supplied

[ server_cert ]
basicConstraints        = CA:FALSE
keyUsage                = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName          = @alt_names  # 引用SAN段

[ alt_names ]
# 和服务器CSR里的SAN保持一致,或者按需调整
DNS.1 = your-server-domain.com
DNS.2 = sub.your-server-domain.com
IP.1  = 192.168.1.100

2. 重新生成服务器CSR

用修改后的配置生成CSR,确保扩展被包含:

openssl req -new -key server.key -out server.csr -config openssl-server.cnf

验证CSR是否带SAN:

openssl req -text -noout -in server.csr

输出里找X509v3 Subject Alternative Name,确认存在且内容正确。


3. 用中间CA签名时必须指定扩展段

这是最容易踩坑的地方!OpenSSL 1.0.1g签名时必须显式指定-extensions参数,否则会忽略配置里的扩展:

openssl ca -in server.csr -out server.crt -cert intermediate.crt -keyfile intermediate.key -config openssl-intermediate.cnf -extensions server_cert

这里的-extensions server_cert对应中间CA配置里的[ server_cert ]段,必须写对。


4. 验证最终证书

检查签名后的服务器证书是否带SAN:

openssl x509 -text -noout -in server.crt

确认X509v3 Subject Alternative Name字段存在,内容正确。


额外提醒

  • 中间CA的证书必须有basicConstraints = CA:TRUE和keyUsage = cRLSign, keyCertSign,否则没资格签下级证书。
  • 证书链合并顺序要对:服务器证书 → 中间CA证书 → 根CA证书,按这个顺序拼接成一个PEM文件。
  • 测试前清浏览器缓存,或者用隐私窗口,避免旧证书干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:33:14