OpenSSL 基本约束

信息安全 openssl 证书颁发机构 服务器
2021-08-23 04:28:57

我一直在研究“ PKI 规划”一书,并且已经到了要创建最终实体证书的地步。但是,我遇到一条错误消息,指出证书中存在扩展错误。我在老师的指导下仔细研究了如何更改基本约束扩展来解决这个问题。

本书建议不要在最终实体证书中使用基本约束扩展。但是,当我简单地删除它时,CA:TRUE无论如何都会插入默认扩展名“”。

所以我的问题是:

  1. 有没有办法覆盖这个自动插入或者我误解了这本书?
  2. 关于我可能做错了什么的任何想法?

以下是我用来创建证书的扩展:

[ server_ext ]
basicConstraints        = critical,CA:false
nsCertType              = server
subjectKeyIdentifier    = hash
authorityKeyIdentifier  = keyid,issuer:always
keyUsage                = critical,digitalSignature,keyEncipherment
extendedKeyUsage        = serverAuth
2个回答

我怀疑 openSSL 手册页可能会有所帮助:

如果 basicConstraints 扩展不存在,则证书被认为是“可能的 CA”,其他扩展将根据证书的预期用途进行检查。在这种情况下会给出警告,因为证书实际上不应被视为 CA:但是允许它作为 CA 来解决一些损坏的软件。

即 KeyUsage/ExtendedKeyUsage 将(似乎)用于猜测。

取自https://www.openssl.org/docs/manmaster/man1/x509.html,证书扩展部分。

这似乎(对我而言)与 openssl 食谱所说的不同(https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html):

Basic Constraints 扩展用于将证书标记为属于 CA,使它们能够签署其他证书。非 CA 证书要么省略此扩展名,要么将 CA 的值设置为 FALSE。这个扩展很关键,这意味着所有使用软件的证书都必须理解它的含义。

检查 x509v3_config 的手册页(https://www.openssl.org/docs/manmaster/man5/x509v3_config.html - 请参阅标准扩展部分),一个可能的问题是您的语法。

他们提供以下示例:

basicConstraints=CA:TRUE

basicConstraints=CA:FALSE

basicConstraints=critical,CA:TRUE, pathlen:0

它们提供了另一种实现类似结果的方法:

basicConstraints=critical,@bs_section

[bs_section]

CA=true
pathlen=1

我只是将您的配置修改为:

basicConstraints=CA:FALSE

代替:

basicConstraints = critical,CA:false

这样,您的个人资料是明确的,并且应该覆盖在其他地方应用的任何其他(可能相反的)配置。

当扩展中缺少基本约束时,我设法覆盖了包含基本约束的默认功能。这与 openssl.cnf 文件中的 csr 和复制扩展属性有关。