2011-10-26 99 views
5

在我的應用程序中,我有需要向具有自簽名證書的服務器發出請求的情況。我希望能夠僅針對該特定請求禁用證書驗證。禁用單個請求的證書驗證

我知道我可以通過設置ServicePointManager.ServerCertificateValidationCallback指向一個回調方法並簡單地返回true來禁用證書驗證。然而,這然後禁用整個應用程序的證書驗證,我可以通過在app.config中設置來完成。

但是,我不想禁用整個應用程序,而是禁用單個請求。那可能嗎?

我一起工作的類SmtpClient

回答

0

禁用證書驗證通常是一個壞主意。爲什麼不簡單地將自定義證書添加爲系統或應用程序中的可信證書。

AFAIR這可以通過例如通過實施您自己的X509CertificateValidator。 只需將自定義證書嵌入到應用程序中,並在X509CertificateValidator中進行比較(如果兩者相等)。

另請參閱:How safe is my custom SSL verification logic to handle excepted RemoteCertificateNameMismatch?

+0

Robert對答覆提出質疑。在我們的應用程序的某些部分,如果證書無效,我們不希望允許。然而,在我們發送電子郵件的這種特殊情況下,我們希望使用SSL,但我們發現許多客戶端都有自簽名的SSL證書,導致無法發送電子郵件。不幸的是,這對於SMTP服務器來說通常是這種情況,並且對於每個失敗的smtp服務器導入證書將是一場噩夢,所以我們希望允許SMTP接受證書失敗和我們應用程序的其他部分仍然執行的能力。 –

+0

然後可能你應該使用在Android「K9」Mail-Client中也使用的驗證方案,它具有完全相同的問題。第一次遇到不受信任的證書時,它會顯示一些證書詳細信息,詢問用戶他/她是否信任此證書。如果用戶回答是AFAIR,它會將證書散列保存在設置文件中,將該證書標記爲有效。內部證書驗證程序然後接受所有常規證書和保存散列的證書。適用於所有人,並且仍然相對安全。 – Robert

+0

不幸的是,這是一項服務,因此沒有用戶界面,因此沒有任何用戶可以點擊接受證書的對話框。 –