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

使用OpenSSL 3.0命令行生成带SAN的证书失败问题排查

问题原因及解决办法

核心问题

你遇到的问题出在OpenSSL 3.0的x509 -req命令默认不会自动复制CSR中的请求扩展。虽然你用openssl req -addext把SAN添加到了CSR的请求扩展段,但签名生成证书时,这个扩展不会自动被带入最终证书。

先验证CSR是否包含SAN

先确认CSR里是否真的生成了SAN扩展,执行以下命令:

openssl req -text -noout -in server.csr

如果输出里能找到类似以下内容,说明CSR是正常的,问题出在后续签名步骤:

Requested Extensions:
X509v3 Subject Alternative Name:
DNS:haha.sam123-whatever-000.com

解决办法

方法1:让x509自动复制CSR中的请求扩展

修改x509签名命令,添加-copy_extensions copyall参数,这样会把CSR里的所有请求扩展复制到最终证书中:

openssl x509 -req -days 365 -in server.csr -key server.key -out server.cer -copy_extensions copyall

如果只需要复制标准扩展,也可以把copyall换成copy。

方法2:在x509命令中直接指定SAN扩展

如果不想依赖CSR里的扩展,也可以在签名阶段直接用-addext参数显式指定SAN:

openssl x509 -req -days 365 -in server.csr -key server.key -out server.cer -addext "subjectAltName=DNS:haha.sam123-whatever-000.com"

额外情况:CSR里也没有SAN的处理

如果验证后发现CSR里根本没有SAN,可能是req命令结合-subj使用时,需要显式启用扩展支持,修改req命令为:

openssl req -new -key server.key -out server.csr -subj "/C=US/O=SAM/OU=Certs/CN=HaHa" -addext "subjectAltName=DNS:haha.sam123-whatever-000.com" -config <(echo "[req]"; echo "distinguished_name=req_distinguished_name"; echo "x509_extensions=v3_req"; echo "[req_distinguished_name]"; echo "[v3_req]"; echo "basicConstraints=CA:FALSE")

这段临时配置会显式开启扩展支持,确保-addext参数生效。

验证最终证书

生成证书后,用以下命令确认SAN是否存在:

openssl x509 -text -noout -in server.cer

在输出中找到X509v3 Subject Alternative Name字段,确认包含指定的DNS地址即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:49:57