2012-04-20 191 views
0

我有一個tcp服務器並使用cms/pkcs#7來保護在客戶端和服務器之間傳遞的消息。作爲初始會話的一部分,將客戶端公鑰傳遞給服務器是否是正常的做法?作爲公鑰,當會話啓動時,初始clp命令將傳遞密鑰,以及服務器需要了解客戶端的其他重要細節。它是公衆,所以它不需要加密,它是公開的。將公鑰從客戶端傳遞到服務器的最佳方法

客戶端/服務器通信使用ssl/tls進行保護。

謝謝。 鮑勃。

回答

1

難道您不信任SSL/TLS或您爲什麼要在安全通道中再次加密?這隻有在服務器將消息傳遞到其他節點時纔有意義,並且將在別的地方解密,從而創建端到端的安全性。

在任何情況下,您都不應該讓客戶端將公鑰傳遞給服務器。相反,它應該將證書傳遞給服務器,服務器應該基於使用與證書中包含的公鑰相匹配的私鑰進行簽名來驗證客戶端。此外,服務器將需要檢查證書本身(是否來自可信CA,執行鏈中的簽名驗證等)。

如果可以,您應該使用SSL/TLS相互認證(客戶端證書認證)在SSL/TLS層完成所有這些工作。如果你不能,那麼確保你設計一個安全的應用層協議來驗證客戶端和它的公鑰。否則,可能會冒充其他客戶端。

+0

聽起來終於像現實世界的建議。我信任ssl/tls。你如何將證書傳遞給服務器? – 2012-04-20 14:37:59

+0

這取決於您用於終止SSL的API。不知道您的.NET選項是什麼,但我認爲這篇Microsoft知識庫文章可以幫助您開始使用:http://support.microsoft.com/kb/895971 – 2012-04-20 14:43:49

相關問題