我用一個單一的方法中的以下代碼行明確檢查並從以下主機信任的SSL證書:MyTrustedCompany.com:如何將「ServerCertificateValidationCallback」屬性恢復爲默認行爲?
ServicePointManager.ServerCertificateValidationCallback = Function(obj As [Object], certificate As X509Certificate, chain As X509Chain, errors As SslPolicyErrors) (certificate.Subject.Contains("CN=MyTrustedCompany.com"))
的代碼沒問題 - >完美的作品100%。
問題是,它太深遠了。我認爲它的範圍就只能是我decalred它的方法中,但顯然這是「ServicePointManager」對象上的共享屬性,然後要堅持爲整個應用程序,這是我不想要的。
問題是後來我打電話給我的web服務等,並得到「無法建立信任關係...」異常。這是因爲在上面的代碼行中,我檢查了SSL證書specefic的主機名。我趕緊從測試回調返回「真」,因此所有的證書將被信任,而不是檢查一個specefic名稱(即MyTrustedCompany)和subsiquent請求工作。這就是我知道這個回調分配到達父親的方法。當然,我可以擴展回調包括所有其他certitificate的名字,但我會而做的是設置了「ServerCertificateValidationCallback」回其默認行爲。像以下僞代碼:
ServicePointManager.ServerCertificateValidationCallback = Nothing 'Default checking behavior
如何刪除自定義驗證並將其設置恢復爲其默認行爲?謝謝!
您可以將其設置爲等同於執行默認行爲的函數:未使用自定義驗證時,會將證書名稱與用於創建請求的主機名進行比較。例如,如果Create(String)傳遞了「https://www.contoso.com/default.hmtl」參數,則默認行爲是客戶端根據www.contoso.com檢查證書。 http://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx – Prescott 2010-11-11 22:25:50