我目前正在开发一个C#应用程序,它使用TCP / IP在客户端和服务器之间进行通信。在连接基于交换会话的RSA公钥之后,然后传递基于会话的AES对称密钥。这一切都很好,意味着我有一个安全的通信渠道。
现在的麻烦是我需要确保服务器和客户端都是我想要与之通信的人。在任何人建议SSL / TLS之前:我没有连接到Internet以允许使用根CA.
在客户端和服务器之间建立安全通道后,我提供了一个简单的质询 - 响应方法,这是否有效?例如,如果客户端发送标识符(GUID?),则服务器将此值与已知客户端进行比较并接受或拒绝它,并在相反方向上重复该值。由于数据是加密的,加密是基于会话的,这是一种有效的验证方法吗?
我知道存储这些标识符是一个弱点。
答案 0 :(得分:0)
在任何人建议使用SSL / TLS之前:我没有连接到Internet以允许使用根CA.
在重新发明轮子之前:您不需要使用SSL / TLS的根CA,而只需使用key pinning的自签名证书。通常只使用公共根CA,因为它可以更好地扩展,只提供几个公共CA,而不是将所有自签名证书(或其指纹)交换到通信的所有对等方。
除此之外,看起来您的提案假设已经建立了一个安全连接来检查凭据,然后您将使用该凭据来验证连接是否真正安全。或者简而言之:要提供安全连接,首先需要安全连接。