代码之家  ›  专栏  ›  技术社区  ›  Despertar

InvalidBasicConstraints:尚未观察到证书的基本约束扩展

  •  2
  • Despertar  · 技术社区  · 11 年前

    我弄错了 "InvalidBasicConstraints: A certificate's basic constraint extension has not been observed." 此证书是由OpenSSL颁发的,将用作WCF服务的服务器端测试证书(验证证书时会出现相同的错误)。我可以用这个代码复制错误。

    X509Certificate2 cert = new X509Certificate2(@"c:\test.cer");
    
    X509Chain chain = X509Chain.Create();
    X509ChainPolicy policy = new X509ChainPolicy();
    policy.RevocationMode = X509RevocationMode.NoCheck;
    chain.ChainPolicy = policy;
    bool valid = chain.Build(cert);
    
    Console.WriteLine(string.Join(" -- ", chain.ChainStatus.Select(o => o.Status + ": " + o.StatusInformation)));
    Console.WriteLine(valid ? "VALID" : "NOT VALID");
    

    查看证书我可以看到这些基本约束,

    Subject Type=End Entity
    Path Length Constraint=None
    

    这个错误是什么意思?我该如何修复它?

    我发现的关于基本约束的最相关的文章是这篇, http://unitstep.net/blog/2009/03/16/using-the-basic-constraints-extension-in-x509-v3-certificates-for-intermediate-cas/ 然而,它只谈到禁止儿童证书签署/创建更多的儿童证书,而在我的情况下,我并没有试图这样做。

    此外,任何解释上述基本约束意味着什么的参考文献都会有所帮助。

    1 回复  |  直到 11 年前
        1
  •  6
  •   Despertar    11 年前

    http://forums.juniper.net/t5/SSL-VPN/quot-Failed-to-authenticate-client-certificate-quot-after/td-p/89232/page/4

    在阅读了上面的线索之后,我发现有两种不同的主题类型,

    Basic Constraints: Subject Type=CA, Length Constraint=None
    Basic Constraints: Subject Type=End Entity, Path Length Constraint=None
    

    我使用的服务器端证书实际上是hiearchy中的第三个链接。

    A->B->C.…A签发了B,然后签发了签字的C。

    证书B也有 Subject Type=End Entity 在基本约束中。我找不到任何说明不同类型的基本约束或其含义的文件,但基于以上两种类型的差异,我想说 End Entity 意味着它不能颁发证书。它是链条的末端,而不是 Subject Type=CA .

    当.NET验证链时,它发现B没有其父证书颁发证书的权限,并抛出错误, A certificate's basic constraint extension has not been observed .

    编辑: 使用由自签名证书颁发的新证书进行进一步测试验证了上述理论。