2015-01-16 94 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

相关问题