2008-09-18 137 views
8

我有一個給定的證書安裝在我的服務器上。該證書具有有效日期,並且在Windows證書MMC管理單元中似乎完全有效。爲什麼這個X.509證書被認爲是無效的?

但是,當我嘗試讀取證書時,爲了在HttpRequest中使用它,我無法找到它。以下是使用的代碼:

X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); 
    store.Open(OpenFlags.ReadOnly); X509Certificate2Collection col = 
    store.Certificates.Find(X509FindType.FindBySerialNumber, "xxx", true); 

xxx是序列號;參數true的意思是「只有有效的證書」。返回的集合是空的。

奇怪的是,如果我通過false,表示無效證書可以接受,則集合包含一個具有指定序列號的元素—。

結論:證書似乎有效,但Find方法將其視爲無效!爲什麼?

回答

7

嘗試使用X509Chain類驗證證書鏈。這可以準確地告訴你爲什麼證書不被視爲有效。

正如erickson所建議的,您的X509Store可能沒有來自鏈中CA的可信證書。如果您使用OpenSSL或其他工具來生成自己的自簽名CA,則需要將該CA的公共證書添加到X509Store。

+0

鏈證書存在,但不知何故無法訪問此用戶。我使用MSDN的示例代碼來檢查鏈狀態:http://tinyurl.com/4wfnng。此代碼根據用戶重新設置不同的狀態。我將嘗試重新安裝證書。謝謝。 – pvieira 2008-09-19 09:40:56

2

我相信x509證書綁定到特定的用戶。它可能是無效的,因爲在代碼中,您以不同的用戶身份訪問它,而不是它創建的用戶?

5

發行人證書是否存在於X509Store中?證書只有在您信任的人簽名後纔有效。

這是來自真實CA的證書,還是您自己簽署的證書?開發人員經常使用的證書籤名工具,如OpenSSL,默認情況下不會添加一些重要的擴展。