2012-03-12 57 views
3

我在兩個位置有兩臺服務器。 服務器1通過服務器2檢查的定製用戶代理通過php CURL會話減去服務器2的客戶信息(如地址,電子郵件和電話號碼)。服務器2提供JSON字符串。通過curl和mcrypt在兩臺服務器之間建立連接

我要確保兩兩件事:

  1. 如果有人嗅着我的包也不會看到實際的數據;
  2. 如果有人嘗試打電話給服務器2上的php頁面(使用合適的 用戶代理),那麼它們對他們來說是沒有意義的 (例如:客戶端電子郵件或電話號碼)。

看過不同的方法後,我想加密服務器2上的JSON文本字符串;從服務器1捲曲得到它;並用共享密鑰對其進行解密。

的事情,我想知道:

  1. 哪個密碼我應該使用?
  2. 這是矯枉過正?
  3. 或者有更好的方法來實現這一目標嗎?

順便說一句:合併兩臺服務器不是一個選項!

回答

1

而不是實施自己的加密程序,我建議您通過https服務器從服務器2提供json數據,這將很好地處理加密。

請注意,您不需要購買證書,您可以自我簽署server2並在server1中允許curl允許「不安全」https連接(不安全意味着證書不受信任,但數據仍然被加密)。

要白名單允許誰從服務器2請求數據,如果可以,請使用ip白名單。另一種方式(或另外)可以是具有共享祕密的簡單簽名系統。

爲了說明,建立一個自定義HTTP標頭時,服務器1發出請求(說「我的簽名」),並使用一個設置你的簽名「算法」(在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 payload中提取所需的所有字段,並使用共享密鑰計算簽名。

將計算的簽名與My-Signature頭中傳遞的簽名進行比較,如果匹配,則將其提供給請求。如果不是,則提供403響應頁面。

0
  1. 不,這不是矯枉過正。在服務器之間傳輸數據時加密數據是很好的做法。
  2. 與您的自定義用戶代理一起,您的服務器當然也有靜態IP地址?做一個IP檢查。如果IP不是你所期望的,只是顯示一個403禁止的默認屏幕來讓一個窺探用戶認爲他們被Apache封鎖了,而不是你的腳本。

至於哪個密碼,我真的不能幫助。有一個谷歌。

相關問題