2012-04-20 195 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

相关问题