2012-04-11 79 views
2

我正在使用智能卡對用戶進行身份驗證。我有一個認證服務(SecurityTokenService),它處理服務器上的認證邏輯。我們是否需要始終在機器上安裝根證書?

我正在使用X509Certificate2.Verify()來驗證證書。由於此API可通過聯機並聯系證書頒發機構(CA)來檢查證書是否有效/撤銷,我需要在服務器上使用根證書嗎?

我們可以避免在本地計算機上擁有根證書嗎?或者根證書總是強制性的?

回答

5

我嘗試了一些東西,這裏有意見:

  1. 首先X509Certificate2.Verify(),如果在鏈中的所有證書被吊銷不檢查。從this後我開始知道Verify方法在內部使用Crypt32 CertVerifyCertificateChainPolicy函數。它的文檔說它不執行證書撤銷檢查。簡而言之,Verify方法只是檢查被調用的證書是否被撤銷。

  2. 關於根證書:

希望這可以幫助別人誰想要知道更多一點關於證書驗證在C#。

+0

奇怪的答案CSharpLearner:大多數時候你沒有明確需要驗證* root *證書,你需要的是一個*顯式信任的鏈*。通常情況下,您只能信任系統上的根證書,但您可以相信任何中間證書或最終用戶證書。這並不意味着這個答案對於這個特定的框架*是錯誤的,但它肯定不適用於其他框架...... – 2012-04-14 11:00:10

+0

@owlstead:感謝您的評論;這很有幫助。我發佈的是我在幾次試驗後的觀察。如果您的計算機上存在有效的root證書,那麼您將得到絕對正確的驗證,而不會出現像「PartialChain」這樣的消息/狀態。話雖如此,是否需要驗證整個鏈(包括根證書)是需求和選擇的問題。出於好奇:如果root證書本身被吊銷,該怎麼辦?或者這是不可能的事情?如果不是,我們是否也不應該驗證根證書? – Learner 2012-04-16 04:35:50

+0

通常情況下,您只能使用序列號吊銷證書;自簽名(根)證書通常是「帶外」處理 - 這包括吊銷證書。在一個良好的CA結構中,根證書的私鑰只是現在使用,然後創建新的CA,併爲現在和當時創建一個CRL。某處。所以它受到攻擊的可能性應該很小。 – 2012-04-16 10:07:56

相關問題