1

我在線模式驗證證書撤銷,但CRL分發點中提到的URL沒有得到命中,如果CRL已被緩存在內存中。我正在使用fiddler來驗證URL是否被訪問。我正在執行這些步驟。問題X509RevocationMode.Online在撤銷證書驗證

  1. 運行提琴手。
  2. 開始證書驗證X509RevocationMode.Online
  3. 驗證小提琴手,CRL分發點中提到的網址沒有被捕獲。
  4. 從內存中清除在X509RevocationMode.Online
  5. 的CRL由命令certutil -urlcache CRL delete
  6. 開始證書驗證現在提琴手陷入CRL分發點中提到的URL。

從上面的步驟可以明顯看出,只有當CRL沒有被緩存時,CRL的URL纔會被命中。現在我的問題是:

  1. 在線模式下訪問CRL分發點中的URL提及的情況是什麼?
  2. 如果CRL已被緩存,X509Certificate如何驗證CRL是否已更新或沒有點擊URL?
  3. 我是否錯過了CRL的概念?

這裏是我的代碼

private void BuildCertificateChain(X509Certificate2 certificate) 
    { 
     string error = null; 
     X509Chain certificateChain = new X509Chain(); 
     certificateChain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; 
     certificateChain.ChainPolicy.VerificationTime = DateTime.Now; 

     certificateChain.ChainPolicy.RevocationMode = X509RevocationMode.Online; 
     certificateChain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 0, 15); 

     try 
     { 
      if (certificateChain.Build(certificate)) 
      { 
       foreach (X509ChainElement element in certificateChain.ChainElements) 
       { 
        Trace.WriteLine(string.Format("Issuer = {0}\nSubject = {1}", element.Certificate.Issuer, element.Certificate.Subject)); 
        element.Certificate.Verify(); 
       } 
      } 
      else 
      { 

       error = string.Format("File {0} digital signature seems to be not valid due to a certificate in certificate chain being revoked. Revocation reasons are:\n", filename); 
       foreach (X509ChainStatus status in certificateChain.ChainStatus) 
       { 
        error += status.StatusInformation; 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      error = string.Format("Exception building certificate chain for executing application {0}. The error is {1}", _executingAppFileName, ex.Message); 
     } 

     if (!string.IsNullOrEmpty(error)) 
     { 
      //SetError(error); 
     } 
    } 
} 
+0

請記住,upvote有用的答案,並「檢查」最好的回答你的問題。 – 2013-05-10 09:55:29

+0

別擔心,欣賞是我的習慣......但讓我明確所有疑問。 :) – PawanS 2013-05-10 10:25:58

回答

2

使用緩存的版本,而不是重新檢索CRL通常是功能,而不是一個錯誤。

應該發生什麼:

  1. 的CRL發佈網站應該使用正確的高速緩存指令到HTTPS客戶是誰檢索CRL進行驗證。
  2. 應該根據服務器的指示執行機器上的緩存。 (順便說一下,磁盤通常用於高速緩存的互聯網文件,而不是內存。)

但是,以上都不是。如果你想成爲偏執狂,你可以刷新操作系統中的互聯網文檔緩存。

回覆您的問題:

  1. 什麼是當CRL分發點URL提到在在線模式被訪問的情景? [當CRL不在高速緩存中時]
  2. 如果CRL已經被緩存,X509Certificate如何驗證CRL是否已更新或未找到URL? [https的緩存控件用於假定緩存版本的CRL與遠程服務器上的版本相同。]
  3. 我是否缺少CRL的概念? [也許。 CRL過程並不意味着是一個奇聞趣事的實時同步多機系統。這個想法是,大多數情況下,證書自然失效。撤銷/ CRL過程不應該是一個正常的過程,應該更像是一個例外過程。您的問題意味着CRL正在逐秒更新 - 如此之快以至於正常的網頁緩存技術是不可接受的。你爲什麼相信這個?你想要保護自己什麼?人類是否決定在正常到期時間或機器之前撤銷證書?]

換句話說,如果CRL一直在更新,那麼它應該與緩存頭集一起發送因此。在這種情況下,您應該測試您的操作系統是否正確緩存結果。如果您擔心操作系統出錯,那麼您應該明確刪除緩存。

補充:

A blog entry關於檢查惡意軟件的數字證書。

+0

感謝您的回覆。我閱讀了更多關於CRL的文章,而且我的疑惑很明顯。您的答案令人滿意,但我想在此提一件事,我正在對可執行文件進行數字簽名驗證。 – PawanS 2013-05-09 07:37:03

+0

你能回答一件事嗎?如果CRL被緩存並且CA在CRL下次更新日期之前吊銷了證書,會發生什麼情況。 例如假設CR1生效日期是5月1日,下一次更新日期是5月15日。我的系統已經緩存了此CRL,並且在5月9日證書被吊銷,CA已更新其鏈接中的最新CRL。 – PawanS 2013-05-09 08:40:15

+0

Re:檢查可執行文件的CRL。真正的問題是你要信任或不信任exe的供應商。不要依賴證書和CRL,他們可以由一個確定的敵人操縱。 我建議典型的緩存長度爲1天,而不是15天。因此,如果在發佈新CDL之前檢索CDL,則將在第二天檢索更新的CDL。回覆:CDL的日期是1日,並且證書在2日被撤銷。直到15日,沒有人會知道該證書被撤銷。 另外,賠率是證書**應該**已被撤銷甚至更早... – 2013-05-10 09:51:23