这里CN的总长度是86个字符。为什么我没有收到错误消息?
听起来 OpenSSL 函数之一没有像您期望的那样验证参数(也许)。问题是,要针对什么进行验证。
一般来说,浏览器遵循CA/Browser Forums发布策略。非浏览器客户端,如 cURL、Wget 和 OpenSSL 遵循 IETF 和 RFC。它们是不同的发行政策。
发布政策只是要遵循的一组规则。对于 CA/B 和 IETF,它们通常是相同的,但它们在某些领域有所不同。其中一个领域是中间 CA 证书的密钥用法。 IETF 将它们视为一个联合体,因此它们是相加的;而 CA/B 将它们视为交叉点,因此链中缺少的密钥用法是减法的。另一个细节是通用名长度。
CA/B 的公用名长度不受限制。 IETF 将通用名称限制在 64 位。更改 IETF 的发行政策不久前就出现在 PKIX 邮件列表中。见Amendment to CABF Baseline Requirements。我不记得是怎么回事。
在我们的应用程序中,CN 字段不是域名,它们只是来自设备的信息
很好(主机名不在通用名中)。公用名是向用户显示的友好名称。主机名总是出现在Subject Alternate Name,而不是Common Name。 CA/B 和 IETF 都同意这一点。 CA/B 和 IETF 都同意将主机名放在 Common Name 中的做法是不推荐使用,但不是禁止。 CA/B 很快就改了,很快就被禁止了。
将其作为自定义字段添加到证书中甚至可能是个好主意。
-subj "/C=YY/O=XXXX/CN=YY:12/CN=XXX:ABCDDMW0B170XX494/CN=ABCD:01020304050604567892030405060708/CN=BBBBCCCC"
我认为这是格式错误的。在树的某个级别上只能存在一个通用名称。
同样,将其作为自定义字段添加到证书中甚至可能是一个好主意。
我相信在RFC 4514 - Lightweight Directory Access Protocol 中提供了用于编码专有名称 的 IETF 规则。我不记得 CA/B 使用什么。
在带有 pyopenssl 的 python 中,由于错误“字符串太长”,我无法通过此主题
谁能解释一下并告诉我如何将这个长主题传递给 pyopenssl
听起来 PyOpenSSL 正在使用 IETF 发布策略。但它可能应该将 CN 字符串视为格式错误而不是太长而拒绝。我猜字符串长度检查效率更高,所以先执行。
在这种情况下,您应该将其作为自定义字段添加到证书中。您甚至可以将其添加为otherName 或directoryName 类型的Subject Alternate Name。但是,我不知道名称长度限制是什么。
Microsoft 对证书中的用户主体名称 (UPN) 进行了类似的编码。该公司只是添加了一个带有登录凭据的自定义字段。这是一个相关的问题:How to encode a username in PKIX certificate?。
您可能应该在Information Security Stack Exchange 上问几个问题。他们应该能够帮助您解决问题,“如何在 PKIX 证书中编码名称 ABCD:01020304050604567892030405060708:BBBBCCCC?”
这是一个相关问题:Distinguished Name length constraint in X.509 certificate,但它没有回答您在此处提出的一些问题。