我正在使用PHP脚本连接到Node.js服务器并与之通信。 Node.js应该只响应PHP脚本的请求,所以我需要确保Node服务器有某种身份验证方法。
现在要确定它实际上是PHP脚本连接,我想只是使用一些廉价的身份验证,比如发送预共享密钥以及PHP脚本正在进行的请求。节点服务器只是将它与它自己的秘密进行比较,如果它们匹配,可以假设它是连接脚本而不是其他人(假设SSL有内置的方法来防止重放攻击)。
这整个过程将通过HTTPS完成,这可以让脚本能够确认节点服务器的身份。
这是否足够安全,还是应该进行适当的基于SSL的客户端身份验证?毕竟,它是通过HTTPS进行的,所以预分享的秘密不应该轻易被嗅出来吗?
答案 0 :(得分:3)
HTTPS不可重播(因为the ServerHello message包含用于生成连接共享密钥的随机数),并且由于您通过安全通道进行通话,因此无法嗅探预共享密钥。作为一个快速且不那么肮脏的解决方案,您的方案听起来不错。
答案 1 :(得分:1)
HTTPS连接(如果配置了合适的密码套件,并且客户端正确验证服务器证书)将保护通信,并防止重放HTTP请求(因为实际的HTTP请求不会是可见,因为另一个客户端将无法重放完全相同的内容,因为它将具有不同的SSL会话ID。)
在服务器和PHP脚本之间预先共享秘密听起来不错。
您可以使用客户端证书身份验证,但这会使其更复杂,在这种情况下没有必要的好处。您必须生成自己的证书并使服务器信任它。更重要的是,您可能必须配置Node.js服务器以进行重新协商(不确定是否可行),否则,将提示连接到该HTTPS服务器的所有客户端都提供客户端证书,这可能不方便对于大多数不需要它的用户。