通过curl和mcrypt在两台服务器之间建立链接

时间:2012-03-12 11:21:13

标签: php curl mcrypt

我在两个地方有两台服务器。 服务器1通过php CURL会话从服务器2检查的自定义用户代理中减去服务器2的客户端信息(如地址,电子邮件和电话号码)。服务器2提供JSON字符串。

我想确定两件事:

  1. 如果有人嗅到我的包裹,它就不会看到实际的数据;
  2. 如果有人试图在服务器2上调用php页面(使用正确的 用户代理)en服务对他们没有意义 (例如:客户的电子邮件或电话号码)。
  3. 在查看不同的方法后,我想加密服务器2上的JSON文本字符串;从服务器1获取curl;并使用共享密钥对其进行解密。

    我想知道的事情:

    1. 我应该使用哪种密码?
    2. 这有点矫枉过正吗?
    3. 或者有更好的方法来实现这个目标吗?
    4. BTW:合并两台服务器不是一种选择!

2 个答案:

答案 0 :(得分:1)

我建议不要实施自己的加密例程,而是建议通过https从服务器2提供json数据,这样可以很好地处理加密。

请注意,您不需要购买证书,您可以对server2进行自签名并在server1中使用curl允许“不安全”的https连接(不安全意味着证书不受信任,但数据仍然是加密的)。 / p>

要允许从服务器2请求数据的白名单,如果可以,请通过ip将白名单列入白名单。另一种方式(或另外)可以是具有共享秘密的简单签名系统。

例如,在服务器1发出请求时设置自定义http标头(例如“My-Signature”)并使用设置签名“算法”(下面的php中的简单示例):

$sig = sha1($user_agent
            . $date_header_value
            . $http_request_path
            . $http_query_string
            . $http_raw_post_payload
            . $shared_secret);

然后您可以设置请求标头:

My-Signature: $sig

您可以根据需要使您的签名系统变得复杂。想法是server2知道相同的签名“recipe”,可以从请求头,查询字符串和post有效内容中提取所需的所有字段,并使用共享密钥来计算签名。

将计算出的签名与My-Signature标头中传递的签名进行比较,并在匹配时提供请求。如果没有,请提供403响应页面。

答案 1 :(得分:0)

  1. 不,这不是矫枉过正。在服务器之间传输期间加密数据是很好的做法。
  2. 与您的自定义用户代理一起,您的服务器当然也有静态IP地址吗?进行IP检查。如果IP不是您所期望的,只显示403禁止默认屏幕,以使窥探用户认为他们被Apache锁定,而不是您的脚本。
  3. 至于哪个Cipher,我真的无法帮助。有一个谷歌。