我正在C#中開發一個應用程序,它將通過HTTP和SSL與服務器進行通信。有什麼方法可以讓程序信任服務器提供的證書?此證書將與軟件一起分發,以便它可以識別服務器而不涉及外部CA.手動信任C#中的SSL證書#
說明:我希望我的客戶端應用程序信任已在客戶端進行硬編碼的單個證書,以便它只會信任我自己的服務器。
我正在C#中開發一個應用程序,它將通過HTTP和SSL與服務器進行通信。有什麼方法可以讓程序信任服務器提供的證書?此證書將與軟件一起分發,以便它可以識別服務器而不涉及外部CA.手動信任C#中的SSL證書#
說明:我希望我的客戶端應用程序信任已在客戶端進行硬編碼的單個證書,以便它只會信任我自己的服務器。
您可以使用BouncyCastle。
FromX509Certificate(X509Certificate)
功能DotNetUtilities
類。這樣你檢查證書的簽名呼叫Verify
。哪一種方法最安全?並且還可以在不更新客戶端的情況下更新服務器證書。 (只要CA是有效的偏離方向)的
所以我仍然需要一個適當的CA證書? – 2012-07-19 16:10:59
沒有任何證書在客戶端用於驗證服務器證書的證書進行驗證。所以一個自制的CA就足夠了。 – albertjan 2012-07-19 16:30:43
在我看來,我不認爲你可以做到這一點,相信你有足夠的安全通道。如果我錯了,有人會糾正我,但SSL中的CA信任鏈不僅僅用於驗證指紋是否是特定值(或證書的其他部分)。它證明客戶端正在與正確的服務器通信(由於共享CA密鑰)。 This illustration是一個很好的參考。跳過第3步,將不允許服務器向客戶端證明其身份(拋出證書驗證)。
so that it will only ever trust my own server
SSL保證這通過使用共享的CA證書(如Verisign等)。也許我不明白你爲什麼要選擇不是因爲它的意圖使用SSL。
編輯: 作爲the_ajp指出在他的回答中,有庫(比如充氣城堡),將做證書鏈的全面覈查。這些可以手動調用。
您是否想要信任每個證書(繞過證書的證書,也就是使用您自己的CA的未完全簽名的證書)或某些特定證書? – 2012-07-19 12:03:18
這個問題 - http://stackoverflow.com/questions/7485313/check-self-signed-certificate-ssl-c - 應該可以幫助你開始? – 2012-07-19 12:03:27
@ J.Steen這就是我想過的,並添加了我的評論 - 也許他想要驗證特定的.. – 2012-07-19 12:04:10