【问题标题】:Cheap client identification vs proper SSL client authentication廉价的客户端识别与正确的 SSL 客户端身份验证
【发布时间】:2012-01-14 01:52:23
【问题描述】:

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

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

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

这是否足够安全,还是我应该进行一些适当的基于 SSL 的客户端身份验证?毕竟,它是通过 HTTPS 的,所以预共享的秘密不应该被轻易嗅出吧?

【问题讨论】:

    标签: php node.js ssl https


    【解决方案1】:

    HTTPS 不可重放(因为the ServerHello message 包含一个随机数,用于生成连接的共享密钥),并且由于您正在通过安全通道进行通信,因此您的预共享密钥也无法被嗅探。作为一个快速且不那么肮脏的解决方案,您的方案对我来说听起来不错。

    【讨论】:

    • 我可能会使用请求签名方法而不是发送实际的秘密,但这不应该有太大的区别。否则,同意。
    【解决方案2】:

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

    在您的服务器和您的 PHP 脚本之间预先共享密钥听起来不错。

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

    【讨论】:

      猜你喜欢
      • 2014-09-15
      • 2014-11-13
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 2010-12-05
      • 2019-01-08
      • 1970-01-01
      相关资源
      最近更新 更多