Sockets 无SSL保护现有套接字连接的最佳实践

Sockets 无SSL保护现有套接字连接的最佳实践,sockets,security,ssl,ssh,Sockets,Security,Ssl,Ssh,在中,OP希望在不使用SSL的情况下保护两个套接字之间的连接 建议SSH就是答案 这个答案是基于现有套接字的SSH端口转发,还是仅仅切换到SSH 如果不是,问题是如何在没有SSL的情况下使现有套接字更加安全,那么最好的方法是什么 如果端口10上的客户端连接到端口20上的服务器,服务器如何限制访问,以便只有端口10上的客户端才能连接?它真的是端口10上的客户端(不是冒名顶替者)?(可用性仅适用于经验证的客户端) 答案是任何形式的SSH协议,它基于通道。您可以使用这些通道传输相当任意的信息,包括端口

在中,OP希望在不使用SSL的情况下保护两个套接字之间的连接

建议SSH就是答案

  • 这个答案是基于现有套接字的SSH端口转发,还是仅仅切换到SSH

  • 如果不是,问题是如何在没有SSL的情况下使现有套接字更加安全,那么最好的方法是什么

  • 如果端口10上的客户端连接到端口20上的服务器,服务器如何限制访问,以便只有端口10上的客户端才能连接?它真的是端口10上的客户端(不是冒名顶替者)?(可用性仅适用于经验证的客户端)


  • 答案是任何形式的SSH协议,它基于通道。您可以使用这些通道传输相当任意的信息,包括端口转发的数据或终端会话,或任何可以转换为字节流的内容。这就是说,TLS通常更容易在代码中实现,因为这些库无处不在,并且设计为以这种方式使用。SSH更容易在类Unix系统上的脚本中实现,因为它具有强大的命令行API

    在大多数情况下,TLS是更好的选择。除非你有一个非常特殊的问题,TLS几乎总是更好的选择。所以这里的问题是,你有什么问题是TLS不能解决的?如果是“我讨厌TLS”,那么当然,SSH。但TLS在大多数情况下更好

    TLS使用客户端证书进行身份验证。SSH使用您的私钥进行身份验证。在这两种情况下,证书/密钥都存储在一个文件中,客户端读取该文件并使用该文件向服务器进行身份验证

    从你的问题中不清楚你这里所说的“客户”或“冒名顶替者”是什么意思。任何可以访问证书/密钥的内容都将被授权(可能需要用户提供的密码),因此必须对其进行保护。如果你说“客户”是指“我的应用程序”,那不是一个可解决的问题。你可以验证人的身份。您可以在某种程度上对机器进行身份验证(特别是如果您有HSM或类似的安全硬件可用)。您可以弱身份验证客户端是否声称位于端口10上,但这通常是无用的,而且非常脆弱,所以我不会继续这样做。您不能以任何有意义的方式通过网络对软件进行身份验证


    不过,简短的回答是使用TLS,除非您有一个非常专业的问题,并且有一位优秀的安全专家帮助您设计另一个解决方案(您的安全专家几乎肯定会说“使用TLS”)。

    好的,谢谢,这是有意义的。通过“客户机”与“冒名顶替者”——在本例中,我只想通过SSH在客户机/服务器之间传输所有数据……因此套接字甚至不“知道”它们之间的SSH……但是,我确实想确保当此隧道处于活动状态时,没有其他人可以在该端口访问服务器应用程序(在任何人可以访问该端口之前)。这可能是SSH端口转发的一个很好的用途。它非常擅长对软件透明。但是,这仍然只是一个问题——一旦隧道处于活动状态,我如何确保没有其他人可以访问该端口的服务器应用程序?(与以前一样,该港口向任何人开放)。。。。SSH现在会阻止该端口进行所有其他访问吗?这里可能会混淆unix端口的工作方式。您试图保护什么?这必须在服务器进程本身或代理进程中完成。一旦代理被接受,它就不会再监听任何连接。接受多个连接是进程有目的地要做的事情。代理将接受一个连接并将其转发到服务器进程。(或者服务器可以重写为只接受一个连接。)