2013-03-13 288 views
2

我收到錯誤"InvalidBasicConstraints: A certificate's basic constraint extension has not been observed."此證書與OpenSSL一起發佈,並將用作WCF服務的服務器端測試證書(在驗證證書時會出現相同的錯誤證書)。我可以用這段代碼複製錯誤。InvalidBasicConstraints:未觀察到證書的基本約束擴展

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/但是它只談論禁止孩子證書籤署/創建更多的兒童證書,在我的情況下,我不想做。

另外任何解釋上述基本約束條件意味着什麼的參考都會有幫助。

回答

4

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 - >乙 - >。C ....甲發行B,然後發出簽署C.

證書B也具有在基本約束Subject Type=End Entity。我找不到任何說明不同類型的基本限制或其含義的文檔,但基於上述兩種類型的差異,我認爲End Entity意味着它不能頒發證書。它是鏈條的末端,而不是Subject Type=CA

當.NET驗證鏈時,它看到B沒有來自其父證書的許可來頒發證書並拋出錯誤A certificate's basic constraint extension has not been observed

編輯:用自簽名證書頒發的新證書進一步測試驗證上述理論。

+0

你的觀察對我也有意義。謝謝! – 2016-08-16 12:32:40