2017-06-01 96 views
1

我已經查看了關於SSlStream類和關於證書的大約10-15個不同的頁面,並且我還沒有找到完全向我解釋的一切。所以我有一堆問題。我有幾個關於SslStream類和關於證書的問題

我目前正在研究一些SslStream代碼,並對證書有疑問。從我的研究看來,如果我們使用TSL12,則服務器需要證書。而且客戶端需要證書似乎是可選的。

1)現在,如果我們設計一個客戶端需要證書的系統,我們是否使用客戶端和服務器的相同證書?或者他們都使用不同的?

2)同時查看Microsoft SslStream幫助頁面: https://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs.110).aspx 代碼如何知道它們是否是預期的證書?

3)在簽名項目的Property頁面上,您可以創建一個測試證書。當你點擊該按鈕時,它會要求輸入密碼。如果使用密碼,那將如何影響SslStream代碼?上面的Microsoft幫助頁面上的代碼根本不涉及?

4)一旦我有服務器和客戶端的證書,我可以將它們放在一個目錄中,或者我需要將它們放在存儲中嗎?

謝謝。

回答

1

你可以發現,大部分問題的答案here

  1. 這些都是不同的證書。客戶端證書用於檢查客戶端身份。服務器證書用於加密密鑰材料並進行身份驗證。

  2. 意味着什麼?你的意思是客戶端證書是否正確?您可以編寫自己的登錄名來檢查客戶端和證書。默認過期日期被檢查,在哪裏被撤銷等。閱讀there澄清。

  3. 它將創建證書並使用私鑰,您需要提供密碼才能將其從存儲中獲取
  4. 基本用法是將其存儲到商店中。但是你也可以從.pfx文件中獲取它。您可以閱讀there有關從文件
+0

因此,如果服務器有一個有效的證書,並假設有人刪除它,並提出一個新的有效證書,一切仍然會工作?從你所說的話,客戶關心的唯一事情就是認證還沒有過期。 – ashlar64

+0

是的。但是,如果服務器證書根CA沒有在您的信任機構中,那麼在您對客戶機進行驗證期間它將會失敗。並且客戶端還檢查服務器證書屬性是否符合要求(例如,域名是否正確) –

+0

只是好奇,您如何確保證書在受信任的機構中? (我們在這裏不涉及網絡瀏覽器。) – ashlar64

1

1歌廳鍵)現在,如果我們設計客戶端需要做的,我們使用相同的證書對客戶端和服務器的證書的系統?或者他們都使用不同的?

最佳實踐是「每個目的一個證書」。將服務器身份驗證證書視爲掛在建築物上的「華納兄弟工作室」標誌,並將客戶身份驗證證書作爲員工標識徽章。他們都通知對方發生了什麼事情,但感覺有點不合適,然後走到街道環球,並顯示你的巨大的華納兄弟標誌作爲標識。

2)同時查看Microsoft SslStream幫助頁面:https://msdn.microsoft.com/en-us/library/system.net.security.sslstream(v=vs.110).aspx代碼如何知道這些是否爲預期的證書?

您提供的服務器認證證書是正確的,因爲您提供了它。

如果您只提供一個客戶端授權證書,這是正確的,因爲您提供了它。

如果您提供多個客戶端認證證書,那麼它將使用由服務器TLS握手提供的可接受的CA列表來減少列表,然後它將採用第一個可接受的列表。

3)在簽名項目的Property頁面上,您可以創建一個測試證書。當你點擊該按鈕時,它會要求輸入密碼。如果使用密碼,那將如何影響SslStream代碼?上面的Microsoft幫助頁面上的代碼根本不涉及?

證書沒有密碼,但PFX/PKCS#12文件可以。您需要該密碼才能將該文件加載到X509Certificate2實例中(例如new X509Certificate2("servercert.pfx", "1Potato2Potato3Potato4"))。由於SslStream不會爲您加載,所以不會說密碼。

4)一旦我有服務器和客戶端的證書,我可以將它們放在一個目錄中,或者我需要將它們放在存儲中嗎?

從PFX加載(您需要私鑰,所以它不能只是一個.cer)時它們應該工作正常。如果證書可以一次性加載到證書商店,則可以避免加載或硬編碼PFX密碼的問題......但這僅取決於您的部署需求。