为何CSR中的stateOrProvinceName必须与CA证书中的值匹配?
为什么自签CA签名证书时stateOrProvinceName字段必须匹配?
你碰到的这个问题完全是OpenSSL自签CA的policy配置规则导致的,和公共CA的逻辑不一样:
- 自签CA的policy约束:OpenSSL的配置文件(通常是
openssl.cnf)里有个[policy]段落,用来定义CA签名证书时对CSR(证书签名请求)字段的校验规则。如果你的配置里写了stateOrProvinceName = match,就强制要求CSR里的这个字段必须和CA证书里的完全一致——哪怕CA证书里这个字段是空的,CSR里也得是空的,反过来也一样。你最开始的错误就是触发了这个严格匹配规则。 - 公共CA的逻辑差异:像Verisign这类公共CA的policy配置根本不会做这种强制匹配,它们的规则一般是把
stateOrProvinceName设为optional,或者只要求国家代码这类核心字段一致。毕竟公共CA服务全球用户,不可能要求用户的地理位置和CA所在地完全匹配。 - 调整方法:如果不想受这个约束,你可以修改CA的配置文件,把policy段里的
stateOrProvinceName = match改成stateOrProvinceName = optional,这样不管CA和CSR的这个字段是否一致、是否为空,都能正常完成签名。
内容的提问来源于stack exchange,提问作者yu saito
相关产品推荐
相关产品推荐

