安全套接字连接(无 SSL)的最佳实践是什么?
我将通过 TCP 套接字连接移动敏感数据(登录名/密码/帐户),并想知道是否有一种好的/快速的加密/解密方法并避免恶意注入。
如果您对 SSL 过敏,请使用 SSH。但原理是相同的。密钥通过非对称算法(RSA、Diffie-Hellman...)进行交换,然后用于对称加密和 MAC。结构很微妙,所以它是强烈推荐您使用现有的协议,例如 SSL 或 SSH,其中已经处理了棘手的细节。
在这两种协议中,主要阶段都是通过相互身份验证发生的。 “服务器”部分(在连接模型中,“客户端”是发起连接的人,服务器是另一台机器)需要以对客户端“足够令人信服”的方式呈现其非对称密钥(客户端希望确保它正在与正确的服务器通信,而不是与冒充服务器的其他人通信)。在 SSL 中,该密钥是 X.509 证书的一部分。当 Web 浏览器使用 SSL 时,如果浏览器可以根据一组已知的“信任锚”(也称为“根证书”)验证该证书,则该证书被视为正确。这些锚点由一些与浏览器制造商达成协议的组织(例如 Verisign)管理;最重要的是,如果您想要一个可以根据这些根证书进行验证的证书,那么您必须从锚点管理器之一获取它,而且他们不会免费提供。
但请注意,根据一组已知的信任锚进行验证是浏览器的事情。由于这是您自己的项目,因此您可以创建自己的信任锚和自己的证书。OpenSSL http://www.openssl.org/可以帮助你。更简单的是,为服务器使用客户端也知道的“虚拟”证书,客户端只需验证服务器是否发送“预期”证书。
更简单的模型实际上就是 SSH 所做的。在 SSH 中,每个客户端都应该维护自己的“已知服务器密钥”数据库(在$HOME/.ssh/known_hosts
关于 Unix 实现)。当联系新服务器时,客户端将显示大量警告,如果联系已知服务器但不使用先前记录的密钥,则客户端将显示更大的警告。对于许多规模有限的项目来说,这是一个合适的模型。具有信任锚的 X.509 证书的要点是允许客户端安全地识别many服务器,甚至是部署客户端软件时还不存在的服务器。如果您同时控制客户端和服务器,则不需要。
SSH 默认实现的似乎更符合您的要求,但 SSL 实现更常见(特别是,我相信 .NET 中有一个可以随时使用)。您要做的就是捕获“服务器证书验证”部分,并将其替换为您自己的简单匹配函数“这就是我期望的确切的字节到字节证书吗?”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)