2012-01-14 106 views
2

我有一个PHP脚本连接到Node.js服务器并与之通信。 Node.js只能响应来自PHP脚本的请求,所以我需要确保Node服务器具有某种身份验证方法。廉价的客户端识别与正确的SSL客户端身份验证

现在为了确定它实际上是PHP脚本连接,我正在考虑使用一些便宜的身份验证,例如发送一个预共享密钥以及PHP脚本正在创建的请求。 Node服务器简单地将它与它自己的秘密进行比较,如果它们匹配,则可以认为它是连接的脚本而不是其他人(假设SSL具有防止重放攻击的内置方法)。

整个过程将通过HTTPS完成,HTTPS具有脚本能够确认节点服务器身份的额外好处。

这是否足够安全,或者我应该做一些正确的基于SSL的客户端身份验证?毕竟,它是通过HTTPS的,所以预共享的秘密不应该很容易被嗅出来吗?

回答

3

HTTPS不可重放(因为the ServerHello message包含一个用于产生连接共享密钥的随机数),并且由于您正在通过安全通道通话,所以您的预共享密钥也无法被嗅探。作为一种快速且不太脏的解决方案,您的方案对我来说听起来很好。

+0

我可能会使用请求签名方法,而不是发送实际的秘密,但这不应该有很大的区别。否则,同意。 – deceze 2012-01-14 02:02:00

1

HTTPS连接(如果配置了合适的密码套件,并且客户端正确验证服务器证书)将保护通信,并阻止HTTP请求的重放(因为实际的HTTP请求不会是可见的,因为另一个客户端将不能重放完全相同的内容,因为它具有不同的SSL会话ID)。

在你的服务器和你的PHP脚本之间有一个预共享的秘密听起来很好。

您可以使用客户端证书身份验证,但会使其更加复杂,在这种情况下没有必要的优势。你将不得不生成你自己的证书,并让服务器信任它。更重要的是,您可能必须配置您的Node.js服务器以进行重新协商(不确定是否可能),否则,连接到该HTTPS服务器的所有客户端都会被提示输入客户端证书,这可能很不方便对于大多数不需要它的用户来说。

相关问题