通过curl和mcrypt在两个服务器之间进行链接


Link between two servers via curl and mcrypt

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

我想确定两件事:

  1. 如果有人嗅了嗅我的包裹,它就看不到实际数据
  2. 如果有人试图调用服务器2上的php页面(使用正确的用户代理)en收到了一些对他们来说没有意义的东西(例如:客户的电子邮件或电话号码)

在研究了不同的方法后,我想在服务器2上加密JSON文本字符串;从服务器1获取curl;并使用共享密钥对其进行解密。

我想知道的事情:

  1. 我应该使用哪种密码
  2. 这太夸张了吗
  3. 或者有更好的方法来实现这一点吗

BTW:合并两个服务器不是一个选项!

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

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

对于允许从服务器2请求数据的白名单,如果可以的话,可以通过ip进行白名单。另一种方式(或附加方式)可以是具有共享秘密的简单签名系统。

例如,当服务器1发出请求时,设置一个自定义的http头(比如"我的签名"),并使用一个设置签名的"算法"(下面php中的简单示例):

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

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

My-Signature: $sig

您可以随心所欲地使签名系统复杂化。其思想是,server2知道相同的签名"配方",可以从请求头、查询字符串和post有效载荷中提取所需的所有字段,并使用共享密钥计算签名。

将计算出的签名与"我的签名"标头中传递的签名进行比较,如果匹配,则提供请求。如果没有,提供403响应页面。

  1. 不,这并不过分。在服务器之间传输期间对数据进行加密是一种良好的做法
  2. 除了您的自定义用户代理,您的服务器肯定也有静态IP地址吗?进行IP检查。如果IP不是你所期望的,只需显示一个403禁止的默认屏幕,让窥探用户认为他们被Apache锁定了,而不是你的脚本

至于哪个密码,我真的帮不上忙。有一个谷歌。