【发布时间】:2014-01-17 15:38:42
【问题描述】:
场景:
我有一个运行 php 的网络服务器,我希望能够安全地将请求发送到运行 nodejs 的单独服务器并得到响应。 节点服务器永远不需要自己向网络服务器发送任何内容,例如通知/更新。所以我认为我不需要 websockets 提供的 2 路通信。
PHP 向节点发送请求,节点处理请求,发回数据(很可能是 JSON),php 使用返回的数据继续执行其脚本。
问题
我拥有服务器运行节点,但网络服务器却在野外。我需要一种方法来确保进入节点服务器的任何请求实际上来自网络服务器而不是其他人/其他人,并且我需要对请求和响应数据进行加密。
我已经收集到我不想依赖像检查 IP 地址这样简单的东西,我知道网络服务器和节点服务器都必须有一些共享的秘密信息/算法来编码数据。我可以自己实现这个,但我知道这个问题已经通过一些加密协议/库解决了。 我熟悉加密和密钥的概念,但我从来没有实现过它们。
问题
- 解决此问题的最佳方法是什么?
- 我应该/可以使用哪种加密方式,php 和 nodeJs 都支持?
- 潜在的安全威胁是什么?
【问题讨论】:
-
除了检查网络服务器是否有预设的 IP/IP 范围外,您还可以在两个服务器中分配一个秘密哈希并使用 openssl_encrypt 加密数据。
-
只需使用共享密钥加密数据(AES 就可以了,并且适用于两者)。或者,您可以加强它并使用公钥/私钥进行加密。或者,如果您只是在 NodeJS 服务器上使用 SSL,并传递了一个令牌/密钥,那也应该没问题,因为这将是只有 2 个服务器知道的秘密。如果在 NodeJS 服务器上使用 SSL 进行流量,实现起来会更容易。
标签: javascript php node.js security authentication