如何将CommonName继承至Subject Alternative Name?Windows 10下OpenSSL实操问题
解决仅含单个匹配CN的SAN证书生成问题
嘿,我来帮你搞定这个证书配置的小麻烦!针对你在Windows 10上用OpenSSL 1.0.2n,需要生成仅含1个Subject Alternative Name(SAN)且与CommonName(CN)完全匹配的证书需求,下面是一步步的实操方案:
步骤1:修改openssl.cfg配置文件
找到你调整过的C:\OpenSSL-Win64\bin\openssl.cfg,重点修改这两个核心段落:
- 在
[req]段中,确保存在(没有就添加):
这会让OpenSSL在生成证书请求时自动加载v3扩展配置。req_extensions = v3_req - 在
[v3_req]段中,把subjectAltName配置改成仅包含一个和目标CN完全一致的DNS项:
比如你要设置CN为subjectAltName = DNS:your-target-domain.comexample.com,这里就写DNS:example.com。同时确保该段的基础约束配置正常,避免证书不被系统信任:basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment
步骤2:生成证书请求(CSR)和私钥
打开命令提示符,切换到OpenSSL的bin目录(执行cd C:\OpenSSL-Win64\bin),然后运行以下命令:
openssl req -new -newkey rsa:2048 -nodes -keyout your-domain.key -out your-domain.csr -config openssl.cfg
执行过程中,当提示输入Common Name (e.g. server FQDN or YOUR name)时,输入和刚才SAN里完全一致的域名(比如example.com),其他字段(国家、组织名称等)可以按需填写,或者直接回车跳过。
步骤3:生成自签名证书(按需操作)
如果是生成自签名证书,继续执行这条命令:
openssl x509 -req -days 365 -in your-domain.csr -signkey your-domain.key -out your-domain.crt -extensions v3_req -extfile openssl.cfg
这里必须加上-extensions v3_req和-extfile参数,否则SAN信息不会被写入最终的证书文件。
步骤4:验证证书是否符合要求
生成完成后,用这条命令检查证书内容:
openssl x509 -in your-domain.crt -text -noout
在输出里重点确认两个部分:
Subject:字段中的CN=值,和你设置的域名完全一致;X509v3 Subject Alternative Name:字段,只有一个DNS项,且和CN的值完全匹配。
额外注意事项
- 如果之前的配置文件里SAN有多个DNS项,一定要删除多余的,只保留目标域名;
- OpenSSL 1.0.2n对配置语法要求严格,确保
subjectAltName的格式正确,不要有多余的逗号或空格; - 尽量在OpenSSL的bin目录下执行命令,避免因路径问题导致配置文件加载失败。
内容的提问来源于stack exchange,提问作者Luca Sepe
相关产品推荐
相关产品推荐

