我正在签署 x509 证书,该证书只能用于特定域下的 CN,而不是任何 IP/电子邮件/UPN。
这rfc5280表示传递empty
给允许的值将允许所有这些类,而传递给排除的类将拒绝所有这些类。
initial-permitted-subtrees,表示对于每种名称类型(例如,X.500 专有名称、电子邮件地址或 IP 地址),证书路径中每个证书的所有主题名称都必须属于一组子树。initial-permitted-subtrees 输入包括每个名称类型的一个集合。对于每种名称类型,该集合可能由包含该名称类型的所有名称的单个子树或每个指定该名称类型名称子集的一个或多个子树组成,或者该集合可能为空。如果名称类型的集合为空,则如果证书路径中的任何证书包含该名称类型的名称,则该证书路径将被视为无效。
--- rfc5280 6.1.1 (h)
首先,我了解到此扩展没有 UPN 类,因此从一开始我就知道这不行。然后继续查看电子邮件和 IP。
我找不到如何empty
指定openssl 扩展配置文件也不适用于一般openssl 配置文件。有一个选项的特殊情况被单独提及,即接受EMPTY
。但是同时使用EMPTY
或empty
(正如 powershell 工具所接受的)会导致我的电子邮件证书上出现文字字符串,而 IP 则失败。
$ grep namedConstraints cert.cfg
nameConstraints=permitted;DNS:01.org, excluded;IP:empty, excluded;email:empty
$ openssl x509 ... -extfile my-root-ca-br.cfg
40F784080B7F0000:error:11000076:X509 V3 routines:a2i_GENERAL_NAME:bad ip address:crypto/x509/v3_san.c:556:value=empty
40F784080B7F0000:error:11000080:X509 V3 routines:X509V3_EXT_nconf_int:error in extension:crypto/x509/v3_conf.c:48:section=...
$ grep namedConstraints cert2.cfg
nameConstraints=permitted;DNS:01.org, excluded;email:EMPTY
$ openssl x509 ... -extfile my-root-ca-br.cfg
$ openssl x509 -in crt -text
...
Excluded:
email:EMPTY
...
$ grep namedConstraints cert2.cfg
nameConstraints=permitted;DNS:01.org, excluded;email:empty
$ openssl x509 ... -extfile my-root-ca-br.cfg
$ openssl x509 -in crt -text
...
Excluded:
email:empty
...
...我认为这看起来不对。
编辑:或者,如何指定所有电子邮件/IP?
nameConstraints=critical,permitted... excluded;email:., excluded;IP:0.0.0.0/0.0.0.0, excluded;IP:::/::
...
Excluded:
email:.
IP:0.0.0.0/0.0.0.0
IP:0:0:0:0:0:0:0:0/0:0:0:0:0:0:0:0
是这个吗?