2014-02-14 94 views
0

我正在創建一個使用EWS(Exchange Web服務)移動郵件的應用程序。我能夠繞過證書驗證來運行我的應用程序。我使用此代碼繞過證書驗證:驗證客戶端證書

ServicePointManager.ServerCertificateValidationCallback = 
    delegate(object s, X509Certificate certificate, 
      X509Chain chain, SslPolicyErrors sslPolicyErrors) 
    { 
     return true; 
    }; 

爲了驗證證書,我也跟着this post這是在尋找證書和檢驗證書非常有幫助。

雖然使用後ValidateCert方法拋出異常

chain.ChainPolicy.RevocationMode = X509RevocationMode.Online | X509RevocationMode.Offline; 

唯一的例外是:

System.ArgumentException: Illegal enum value: value. 
at 
System.Security.Cryptography.X509Certificates.X509ChainPolicy. 
      set_RevocationMode(X509RevocationMode value) 

我使用Visual Studio 2013年 我願意接受任何其他的方法來做到同樣的任務。

+1

看起來這個例子是錯誤的或過時的。 X509RevocationMode枚舉不能用作Flags,只需選擇三個值中的一個即可。 –

+0

你可以請我一些方法來做這個東西。 –

+0

'X509RevocationMode.Online | X509RevocationMode.Offline' - 選擇一個或另一個。如果您選擇'X509RevocationMode.Online',那麼您可能會在下載大型CRL時嘗試應用程序(或試圖下載缺失的CRL)。 – jww

回答

0

必須選擇OnlineOffline: - Online:總是試圖聯繫該證書中指定的CDP或OCSP URL來獲取CRL列表檢查撤銷 - Offline:嘗試使用的現有的緩存副本CRL

如果CDP或OCSP服務器沒有響應,如果存在連接問題等,第一個選項可能會很慢。如果這個問題是永久性的,它甚至會失敗。

我建議使用第二個選項,對於大多數情況。不使用CRL的緩存副本的唯一原因是最近有證書撤銷,並且它們剛剛發佈到CRL。此外,CRL還有過期日期,如果過期,它們將強制獲得新的副本。

在使用脫機選項啓動進程之前,您還可以清除CRL高速緩存。谷歌它:有不同的選擇。您需要使用certutil.exe