安全套接字连接的最佳做法是什么(没有SSL)。
我将通过TCP Socket连接移动敏感数据(登录/密码/帐户),并想知道是否有一种好/快的加密/解密方式并避免恶意注入。
答案 0 :(得分:7)
如果您对SSL过敏,请使用SSH。但原则是相同的。密钥通过非对称算法(RSA,Diffie-Hellman ...)交换,然后用于对称加密和MAC。这种结构很微妙,所以强烈推荐使用现有的协议,例如SSL或SSH,其中处理了棘手的细节。
在两种协议中,相互认证都会发生主要阶段。 “服务器”部分(在连接模型中,“客户端”是发起连接的任何人,而服务器是另一台机器)需要以对客户端“足够令人信服”的方式呈现其非对称密钥(客户希望确保它正在与正确的服务器通信,而不是冒充服务器的其他人。在SSL中,该密钥是X.509证书的一部分。当Web浏览器使用SSL时,如果浏览器可以根据已知的一组“信任锚”(也称为“根证书”)对其进行验证,则该证书被认为是正确的。这些锚点由一些与浏览器制造商达成协议的组织(例如Verisign)管理;最重要的是,如果你想要一个可以根据这些根证书进行验证的证书,那么你必须从其中一个主管理器获得它,他们不会免费这样做。
但请注意,针对一组已知信任锚进行验证是一种浏览器。由于这是针对您自己的项目,因此您可以创建自己的信任锚和自己的证书。 OpenSSL可以帮助您。更简单的是,为客户端使用服务器使用“虚拟”证书,客户端只需验证服务器是否发送“预期”证书。
更简单的模型实际上是SSH的作用。在SSH中,每个客户端都应该维护自己的“已知服务器密钥”数据库(在Unix实现中的$HOME/.ssh/known_hosts
中)。联系新服务器时,客户端将显示充足的警告,如果联系了已知服务器但未使用以前记录的密钥,则会显示更大的警告。对于许多有限规模的项目,这是一个合适的模型。具有信任锚的X.509证书的重点是允许客户端安全地识别许多服务器,甚至是在部署客户端软件时尚不存在的服务器。如果你控制客户端和服务器而不是你不需要它。
默认情况下SSH实现的内容似乎更符合您的要求,但SSL实现更常见(特别是,我相信.NET中有一个可以使用)。您需要做的是捕获“服务器证书验证”部分,并用您自己的简单匹配函数替换它“是我所期望的确切的字节到字节证书吗?”。
答案 1 :(得分:0)
如果您不想使用SSL / TLS,则必须单独加密敏感数据。例如,HTTP,POP3,SMTP和IMAP等协议使用SASL机制通过不安全的连接发送编码/加密数据。