我有以下自签署证书链:
RootCA -> IntermediateCA (由root签名) ->服务器证书(leaf for TLS,由中间签名)
RootCA有MaxPathLen =0
我的证书是使用certstrap使用CreateCertificateAuthority和CreateIntermediateCertificateAuthority生成的,因此我假设默认设置是正确的。但是,当试图让我自己签名的证书使用Python或Node客户端时,我遇到了一个path length constraint exceeded错误。
注意:通过提供中间CA证书,使用Go TLS客户端时,设置工作正常。Python和Node似乎需要完整的证书链,因此出现了问题。
在rfc5280中,我看到了这样的声明:
在这种情况下,它给出了在有效的证书路径中可能跟随此证书的非自颁发中间证书的最大数量。
我被non-self-issued intermediate certificates弄糊涂了。这是否意味着我的链是有效的,因为RootCA对中间层进行了签名(因此它是,而不是,非自发)。或者它是无效的,因为中间值算作是一个non-self-issued证书。self到底指的是什么?可能是自我签名,也可能是根是自我。
在这种情况下,我的rootCA是否应该有一个MaxPathLen为1?
发布于 2022-01-13 20:28:26
自我颁发指的是链中的证书,该证书是发给自己的--即主体和签发者是相同的。这通常用于密钥转换目的,否则可以忽略。
您的问题之所以出现,是因为您将basicConstraint pathLenConstraint 0放置在根上。如果值为0,则应该位于链中的最后一个CA上--您称为中间CA。
来自RFC 5280:
pathLenConstraint为零表示在有效的证书路径中不可能遵循非自颁发的中间CA证书。
这是明智的,不要在你的根上的pathLenConstraint,因为你可能不知道签署时,你的下属CA将如何随着时间的推移。
发布于 2022-01-13 20:25:12
如果根有一个MaxPathLen=0,那么它只能发出end实体证书,并且没有中间CA证书可以跟随。根CA是自签名的.
在您的情况下,根已经发出了一个中间CA,这是不允许的。会得到你描述的错误。
非自发中级证书
这指的是中间CA,它可以跟随由该根发出的根。
或者它是无效的,因为该中间值是一个非自发证书.
这是正确的,中间超过MaxPathlen = 0。
自我
指的是根。
根CA与maxPathLen
具有maxPathLen >= 1的根CA将适用于所给出的场景。它可以有一个中间CA,该中间可以对end实体证书进行签名。
Root -> ICA -> EE但是,使用该maxPathLen=1,以下内容将无法工作:
Root -> ICA-1 -> ICA-2 -> EEhttps://stackoverflow.com/questions/70702548
复制相似问题