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