2015-01-16 141 views
0

我目前正在開發一個使用TCP/IP在客戶端和服務器之間進行通信的C#應用​​程序。連接後,我交換基於會話的RSA公鑰,然後傳遞基於會話的AES對稱密鑰。這一切都正常工作,並意味着我有一個安全的溝通渠道。沒有SSL的服務器和客戶端安全標識

現在的麻煩是我需要確保服務器和客戶端都是我希望與之通信的服務器和客戶端。在任何人建議SSL/TLS之前:我沒有連接到互聯網以允許使用根CA.

在客戶端和服務器之間建立一個安全通道後,我提供了一個簡單的質詢 - 響應方法嗎?例如,如果客戶端發送標識符(GUID?),則服務器將該值與已知客戶端進行比較並接受或拒絕該標識符,並且在相反的方向上重複相同的操作。由於數據是加密的,加密是基於會話的,這是一種有效的驗證方法?

我知道這些標識符的存儲是一個弱點。

回答

0

在任何人建議SSL/TLS之前:我沒有連接到互聯網以允許使用根CA.

你重新發明前車輪:你不需要使用SSL/TLS根CA,但可以簡單地使用自簽名的證書與key pinning。通常只使用公共根CA,因爲它只能提供很少的通用CA,而不是將所有自簽名證書(或其指紋)交換到通信的所有對等方,因此擴展性更好。

除此之外,您看起來像您的提案假設安全連接已經檢查憑據,然後您將使用它來驗證連接是否真的安全。或者簡而言之:爲了提供安全連接,您首先需要安全連接。

+0

我已經避免了整個SSL,因爲我認爲自簽名證書會很麻煩。關鍵固定完全解決了這個問題。 – Postie

相關問題