超出自签名证书路径约束

我有以下自签名证书链:

RootCA -> IntermediateCA(由根签名)-> 服务器证书(TLS 的叶子,由中间签名)

RootCA 的 MaxPathLen = 0

我的证书是使用 certstrap 生成的CreateCertificateAuthorityCreateIntermediateCertificateAuthority所以我假设默认设置是正确的。但是,当尝试让我的自签名证书与 Python 或 Node 客户端一起使用时,我遇到了path length constraint exceeded错误。

注意:使用 Go TLS 客户端时,只需提供中间 CA 证书,设置就可以正常工作。Python 和 Node 似乎需要完整的证书链,因此问题出现了。

rfc5280我看到声明:

在这种情况下,它给出了可以在有效证书路径中跟随此证书的非自发行中间证书的最大数量。

我很困惑non-self-issued intermediate certificates。这是否暗示我的链是有效的,因为 RootCA 签署了中间(因此它不是非自发行的)。或者它是无效的,因为中间体算作non-self-issued证书。self这里具体指的是什么?它可能是自签名或 rootca 是自我。

在这种情况下,我的 rootCA 实际上是否应该具有 1 的 MaxPathLen?


慕斯709654
浏览 201回答 2
2回答

弑天下

自颁发是指链中的证书颁发给自己-即Subject 和Issuer 相同。这通常用于密钥转换目的,否则可以忽略。出现问题是因为您已将 0 的 basicConstraint pathLenConstraint 放在根上。值为 0 时,它应该位于链中的最后一个 CA - 您称为中间 CA 的那个。来自 RFC 5280:pathLenConstraint 为零表示没有 [非自行颁发的] 中间 CA 证书可以跟随在有效的证书路径中明智的做法是不要在您的 Root 上设置 pathLenConstraint,因为您在签署从属 CA 时可能不知道随着时间的推移将如何填充。

潇潇雨雨

如果根有MaxPathLen=0,那么它只能颁发最终实体证书,并且不能跟随中间 CA 证书。根 CA 是自签名的。在您的情况下,根已颁发中间 CA,这是不允许的。并会得到你描述的错误。非自发的中间证书这指的是可以遵循由该根颁发的根的中间 CA。或者它是无效的,因为中间体算作非自行颁发的证书。这是正确的中间超过 MaxPathlen = 0。自己指根。根 CA 和 maxPathLenmaxPathLen >= 1 的根 CA 将适用于所呈现的场景。它可以有一个中间 CA,并且该中间可以签署最终实体证书。Root -> ICA -> EE但是,如果 maxPathLen=1,以下内容将不起作用:Root -> ICA-1 -> ICA-2 -> EE
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go