2011-07-28 74 views
0

美好的一天!PKI:檢查證書撤銷狀態的程序及其設置

在我的asp.net web應用程序,我需要檢查的文件傳入數字簽名。我這樣做,通過調用:

SignedCms.CheckSignature(假)或SignerInfo.CheckSignature(假)(C#)。

而且我要確保,即簽名者的此類電話時證書撤銷覈對無誤,確保系統設置是否正確,並清除此過程中爲自己。

傳入簽名者的證書可能包含大量的CA.所以,簽名者的證書可能包括也可能不包含對CA的OCSP服務或CA的CRL服務的引用。

我希望系統以這樣的方式檢查吊銷:

IF證書已參照CA的OCSP Web服務則系統發出請求到CA, ELSE IF證書有CA的在線CRL服務的引用系統下載CRL並使用它 ELSE 系統使用本地CRL。

你能,請回答我的問題:

  1. 如何(如果)我能找到它們描述所需行爲的系統設置? (這種行爲是多變的或固定的嗎?)
  2. 如果證書具有參考CA的CRL的Web服務,我必須下載並定期安裝由腳本的CA的CRL,或者我可以依靠系統將自動下載並當它使用它們需要CRL檢查?

謝謝。

回答

1

該過程在RFC 5280中描述,非常複雜。簡單地說,你做到以下幾點:

  1. 對於有問題的證書,檢查它的簽名,有效期和密鑰使用
  2. 覈對CRL證書。
  3. 檢查針對OCSP的證書
  4. 對於在CRL和/或OCSP檢查期間遇到的每個證書,請執行步驟1-3(這反過來可涉及多個CRL和OCSP檢查)。

我不說也罷策略檢查,這是非常複雜的,在這裏。

我花了大約一個月實現證書驗證我們的SecureBlackbox庫(但我們有我們自己的那些CRL的管理一切,從CRL和OCSP客戶端)。如果你想使用操作系統的方式來執行證書檢查,你應該尋找現有的功能來爲你完成這項工作。

+0

+1,Eugene Eugene:我很好奇地問你,爲什麼你建議我們應該使用CRL和OCSP進行吊銷檢查?一個是不夠的? – Raj

+0

@Raj OCSP可能會取代CRL,因爲它是實時的,但在安全性方面你不能做太多。通常不需要處理兩者,如果您想要快捷方式,則OCSP優先。 –

0

你可以找到獲取CRL的內部,更具體的CRL緩存一些有用的信息crl-caching-in-windows-and-little-bit

有兩種方法,我在這裏想,在那裏,窗戶的CryptoAPI會照顧通過處理撤銷本身自動包括緩存。但問題在於cryptoAPI只有在緩存中的當前CRL到期時纔會查找CA服務器。所以保持CRL的新鮮度很困難。但是如果您的CA的CRL發佈頻率是每天都在使用的,那麼您可能會忽略這種使用CertVerifyRevocation的方法,即對於某些應用使用適當配置的Windows函數調用。

第二種方法是從CA服務器下載並安裝CRL,並使用CertFindCertificateInCRL進行驗證。您的CRL下載應用程序可以配置爲以預定義的時間間隔更新CRL。如果CA只發布基本CRL,這將起作用,因爲每次下載CRL時都會獲得整個撤銷證書列表。我不知道答案,如果CA以較低的頻率發佈Delta CRL和Base CRL會發生什麼情況。