2012-01-14 7 views
2

PHPスクリプトをNode.jsサーバーに接続して通信しています。 Node.jsはPHPスクリプトからのリクエストにのみ応答する必要があるので、ノードサーバーに何らかの認証方法があることを確認する必要があります。格安クライアントIDと適切なSSLクライアント認証

実際にPHPスクリプトを接続していることを確認するには、PHPスクリプトが作成しているリクエストとともにあらかじめ共有された秘密情報を送信するなどの安価な認証を使用することを考えていました。ノードサーバーは単純にこれを自分の秘密と比較し、一致すれば他の人ではなくスクリプトに接続していると見なすことができます(SSLには再生攻撃を防ぐための組み込み方法があると仮定します)。

この全プロセスはHTTPS経由で行われます。このプロセスは、スクリプトのボーナスが追加され、ノードサーバーのIDを確認できます。

これは十分安全ですか、適切なSSLベースのクライアント認証を行う必要がありますか?結局のところ、それはHTTPSを超えているので、事前に共有された秘密が簡単に外から盗聴されるべきではありませんか?

答えて

3

HTTPSは再生できません(the ServerHello messageには接続の共有鍵を生成するための乱数が含まれているため)。また、安全なチャネルを介して話しているため、事前共有秘密を盗聴することもできません。素早く、あまりにも汚い解決策として、あなたの計画は私にはうまく聞こえます。

+0

私は、実際の秘密を送るのではなく、リクエストの署名方法を使用するかもしれませんが、それでそれほど大きな違いはありません。そうでなければ、合意した。 – deceze

1

HTTPS接続(適切な暗号スイートで構成され、クライアントがサーバー証明書を正しく検証する場合)は、通信を保護し、HTTP要求の再生を防止します(実際のHTTP要求は他のクライアントは異なるSSLセッションIDを持つため、正確に同じコンテンツを再生することはできません)。

サーバとPHPスクリプトの間に事前共有シークレットを設定しても問題ありません。

クライアント証明書認証を使用することはできますが、この場合は必要な利点がなくても、より複雑になります。独自の証明書を生成し、サーバーにそれを信頼させる必要があります。もっと重要なことは、再ネゴシエーションのためにNode.jsサーバを設定する必要があるかもしれません(可能であるかどうかわからない場合)。そうでなければ、HTTPSサーバに接続するすべてのクライアントはクライアント証明書を要求されますそれを必要としないほとんどのユーザーのために。

関連する問題