在Best practice for secure socket connection中,OP希望在没有SSL的情况下保护两个套接字之间的连接。
Thomas Pornin建议SSH就是答案。
这个答案是基于现有套接字的SSH 端口转发 ,还是只是切换到SSH?
如果没有,问题是如何在没有SSL的情况下使现有套接字更安全,那么最好的方法是什么?
如果端口10上的客户端连接到端口20上的服务器,服务器如何限制访问,以便只有端口10上的客户端可以连接?它真的是10号端口的客户端(不是冒名顶替者)? (可用性仅适用于经过身份验证的客户端)。
答案 0 :(得分:1)
答案是任何形式的SSH协议,它基于渠道。您可以使用这些通道传输相当任意的信息,包括端口转发的数据或终端会话,或任何可以转换为字节流的信息。也就是说,TLS通常更容易在代码中实现,因为这些库无处不在,并且设计为以这种方式使用。 SSH在类Unix系统的脚本中更容易实现,因为它具有强大的命令行API。
在大多数情况下,TLS是更好的选择。除非你有一个非常专业的问题,否则TLS几乎总是更好的选择。所以这里的问题是,你有什么问题,TLS不起作用?如果它"我讨厌TLS"那么肯定,SSH。但在大多数情况下,TLS更好。
TLS使用客户端证书进行身份验证。 SSH使用您的私钥进行身份验证。在任何一种情况下,证书/密钥都存储在客户端读取并用于向服务器进行身份验证的文件中。
从您的问题中不清楚您的意思是什么?"客户"或者"冒名顶替"这里。任何有权访问证书/密钥的东西都将被授权(可能需要用户提供的密码),因此必须保护这些密码。如果你说"客户"你的意思是"我的申请,"这不是一个可以解决的问题。您可以验证人员。您可以在某种程度上验证机器(特别是如果您有HSM或类似的安全硬件可用)。您可以虚弱地验证客户端声称是否在端口10上,但这通常是无用且非常脆弱的,所以我不会追求它。您无法以任何有意义的方式通过网络验证软件。
简短的回答是使用TLS,除非你有一个非常专业的问题和一个好的安全专家来帮助你设计另一个解决方案(你的安全专家几乎肯定会说"使用TLS")。