2012-03-12 5 views
3

2つのサーバーが2つの場所にあります。 サーバ1はサーバ2のクライアント情報(アドレス、電子メール、電話番号など)を、サーバ2がチェックするカスタムユーザエージェントを使用してphp CURLセッションを介して減算します。サーバー2はJSON文字列を提供します。2つのサーバー間をカールとmcryptでリンクする

私は必ず二つのものにしたい:いくつかのいずれかが私のパッケージを傍受した場合、それは実際のデータは表示されません

  1. を。
  2. サーバ2のPHPページ(適切な ユーザエージェントを使用して)を呼び出そうとした人が何かを提供した場合は、 (たとえば、クライアントの電子メールまたは電話番号)に意味をなさないものがあります。

さまざまな方法を見て、私はサーバー2のJSONテキスト文字列を暗号化することを考えていました。サーバー1からカールを取得します。それを共有鍵で解読する。私が知りたいのですが

もの:

  1. 私は暗号を使用する必要がありますか?
  2. これは過剰ですか?
  3. これを実現するにはより良い方法がありますか?

ところで2つのサーバーをマージすることはオプションではありません。

答えて

1

独自の暗号化ルーチンを実装する代わりに、暗号化をうまく処理するために、httpsでサーバー2からjsonデータを提供することをおすすめします。

証明書を購入する必要はなく、server2に自己署名し、server1のカールで「安全でない」https接続を許可することができます(安全でないということは、証明書が信頼されていないが、データは暗号化されていることを意味します)。

サーバー2からデータを要求できるユーザーをホワイトリストに追加するには、できるだけipでホワイトリストを作成します。もう1つの方法(またはそれに加えて)は、共有の秘密を持つ簡単な署名システムです。

$sig = sha1($user_agent 
      . $date_header_value 
      . $http_request_path 
      . $http_query_string 
      . $http_raw_post_payload 
      . $shared_secret); 
:サーバ1は、要求を行う(「マイ・署名を」と言う)と設定し、あなたの署名「アルゴリズム」(以下、PHPで簡単な例)を使用するときにカスタムHTTPヘッダーを設定し、説明のために

、あなたが好きなように複雑よう

My-Signature: $sig 

は、あなたがあなたの署名システムを作ることができます。

その後、リクエストヘッダを設定することができます。サーバー2は同じ署名「レシピ」を知っており、要求ヘッダー、クエリ文字列、およびポストペイロードから必要なすべてのフィールドを抽出し、共有秘密情報を使用してその側の署名を計算することができます。

計算された署名とMy-Signatureヘッダーで渡された署名を比較し、一致した場合に要求を処理します。そうでない場合は、403応答ページを提供してください。

0
  1. いいえ、それは過度ではありません。サーバー間の伝送中にデータを暗号化することは良い方法です。
  2. カスタムユーザーエージェントに加えて、サーバーにも静的IPアドレスが割り当てられていることを確認してください。 IPチェックを行います。 IPがあなたが期待していたものでない場合、詮索しているユーザーに、あなたのスクリプトではなく、Apacheによってロックアウトされていると思うように、403禁止されたデフォルトの画面を表示するだけです。

私は本当に助けることができません。 googleをしてください。