【问题标题】:Self signed certificate path constraint exceeded超出自签名证书路径约束
【发布时间】:2022-01-13 20:10:32
【问题描述】:

我有以下自签名证书链:

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

RootCA 的 MaxPathLen = 0

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

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

来自rfc5280我看到声明:

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

我对@9​​87654325@ 感到困惑。这是否暗示我的链是有效的,因为 RootCA 签署了中间(因此它是不是非自发行的)。或者它是无效的,因为中间体算作non-self-issued 证书。 self 到底指的是什么?它可能是自签名或 rootca 是 self。

在这种情况下,我的 rootCA 是否应该有一个 MaxPathLen 为 1?

【问题讨论】:

    标签: python go ssl ssl-certificate x509certificate


    【解决方案1】:

    self-issued是指链中的一个证书,是颁发给自己的——即Subject和Issuer是相同的。这通常用于密钥转换目的,否则可以忽略。

    您的问题出现是因为您已将 0 的 basicConstraint pathLenConstraint 放在 Root 上。值为 0 时,它应该位于链中的最后一个 CA - 您称为中间 CA 的那个。

    来自 RFC 5280:

    pathLenConstraint 为零表示没有 [non- self-issued] 中间 CA 证书可以跟随在一个有效的 认证路径

    明智的做法是不要在您的 Root 上设置 pathLenConstraint,因为您在签署从属 CA 时可能不知道随着时间的推移将如何填充。

    【讨论】:

      【解决方案2】:

      如果根有MaxPathLen=0,那么它只能颁发最终实体证书,而不能跟随中间CA证书。根 CA 是自签名的。

      在您的情况下,根已颁发中间 CA,这是不允许的。并且会得到你描述的错误。

      非自发的中间证书

      这指的是可以跟随由该根颁发的根的中间 CA。

      或者它是无效的,因为中间算作 非自发证书。

      正确的是中间值超过了 MaxPathlen = 0。

      自我

      指根。

      根 CA 和 maxPathLen

      maxPathLen >= 1 的根 CA 将适用于所呈现的场景。它可以有一个中间 CA,并且该中间可以签署最终实体证书。

      Root -> ICA -> EE
      

      但是,如果 maxPathLen=1,以下将不起作用:

      Root -> ICA-1 -> ICA-2 -> EE
      

      【讨论】:

      • This refers to intermediate CAs that can follow the Root that are issued by that Root. 在这种情况下,中介由该根发出。我相信 garethTheReds 的回答会伴随您对这个术语的解释
      猜你喜欢
      • 2011-09-30
      • 2021-05-06
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 2012-11-01
      • 2017-03-15
      相关资源
      最近更新 更多