没有 SSL 的服务器和客户端安全识别

Server and Client Secure Identification without SSL

我目前正在开发一个使用 TCP/IP 在客户端和服务器之间进行通信的 C# 应用程序。连接后,我将交换基于会话的 RSA public 密钥,然后传递基于会话的 AES 对称密钥。这一切都很好,意味着我有一个安全的沟通渠道。

现在的问题是我需要确保服务端和客户端都是我想与之通信的。在任何人建议之前 SSL/TLS:我没有连接到 Internet 以允许使用根 CA。

在客户端和服务器之间建立安全通道后,我提供一个简单的质询-响应方法是否有效?例如,如果客户端发送一个标识符(GUID?),服务器会将此值与已知客户端进行比较并接受或拒绝它,然后在相反的方向重复相同的操作。由于数据已加密且加密是基于会话的,因此这是一种有效的验证方法吗?

我理解这些标识符的存储是弱点。

Before anyone suggests SSL/TLS: I'm not connected to the Internet to allow the use of a root CA.

在你重新发明轮子之前:你不需要根 CA SSL/TLS 但可以简单地使用自签名证书 key pinning。 Public 通常只使用根 CA,因为它可以更好地扩展以仅提供少数几个通用 CA,而不是将所有自签名证书(或其指纹)交换给通信的所有对等方。

除此之外,您的提议似乎假设已经建立了安全连接来检查凭据,然后您将使用这些凭据来验证连接是否确实安全。或者简而言之:要提供安全连接,您首先需要安全连接。