2
我正在使用智能卡對用戶進行身份驗證。我有一個認證服務(SecurityTokenService),它處理服務器上的認證邏輯。我們是否需要始終在機器上安裝根證書?
我正在使用X509Certificate2.Verify()來驗證證書。由於此API可通過聯機並聯系證書頒發機構(CA)來檢查證書是否有效/撤銷,我需要在服務器上使用根證書嗎?
我們可以避免在本地計算機上擁有根證書嗎?或者根證書總是強制性的?
我正在使用智能卡對用戶進行身份驗證。我有一個認證服務(SecurityTokenService),它處理服務器上的認證邏輯。我們是否需要始終在機器上安裝根證書?
我正在使用X509Certificate2.Verify()來驗證證書。由於此API可通過聯機並聯系證書頒發機構(CA)來檢查證書是否有效/撤銷,我需要在服務器上使用根證書嗎?
我們可以避免在本地計算機上擁有根證書嗎?或者根證書總是強制性的?
我嘗試了一些東西,這裏有意見:
首先X509Certificate2.Verify()
,如果在鏈中的所有證書被吊銷不檢查。從this後我開始知道Verify方法在內部使用Crypt32 CertVerifyCertificateChainPolicy函數。它的文檔說它不執行證書撤銷檢查。簡而言之,Verify方法只是檢查被調用的證書是否被撤銷。
關於根證書:
X509Certificate2.Verify()
和根證書不存在,則該方法將返回決絕false
。所以用這種方法根證書是絕對必需的。希望這可以幫助別人誰想要知道更多一點關於證書驗證在C#。
奇怪的答案CSharpLearner:大多數時候你沒有明確需要驗證* root *證書,你需要的是一個*顯式信任的鏈*。通常情況下,您只能信任系統上的根證書,但您可以相信任何中間證書或最終用戶證書。這並不意味着這個答案對於這個特定的框架*是錯誤的,但它肯定不適用於其他框架...... – 2012-04-14 11:00:10
@owlstead:感謝您的評論;這很有幫助。我發佈的是我在幾次試驗後的觀察。如果您的計算機上存在有效的root證書,那麼您將得到絕對正確的驗證,而不會出現像「PartialChain」這樣的消息/狀態。話雖如此,是否需要驗證整個鏈(包括根證書)是需求和選擇的問題。出於好奇:如果root證書本身被吊銷,該怎麼辦?或者這是不可能的事情?如果不是,我們是否也不應該驗證根證書? – Learner 2012-04-16 04:35:50
通常情況下,您只能使用序列號吊銷證書;自簽名(根)證書通常是「帶外」處理 - 這包括吊銷證書。在一個良好的CA結構中,根證書的私鑰只是現在使用,然後創建新的CA,併爲現在和當時創建一個CRL。某處。所以它受到攻擊的可能性應該很小。 – 2012-04-16 10:07:56