2010-11-30 9 views
2

私は、攻撃する最善の方法を見つけられないという面白いネットワークセキュリティの課題があります。信頼できないホストを使用してファイアウォールを越えてセキュリティで保護された接続を仲介する方法は?

ファイアウォールの背後にある2台のコンピュータ(AとB)が、インターネット上の一般的な "ブローカ"の信頼されていないサーバー(RackSpaceなど)を使用して互いに安全に接続できるようにする方法を提供する必要があります。 (サーバはオープンサーバ上にあるため、ファイアウォールの背後にいる顧客は信頼できないため、サーバは信頼できないと見なされます)ネットワークが直接接続できるようにファイアウォールの設定を調整することはできません。時間。

これは、リモートデスクトップヘルプツール(crossloop、copilotなど)で処理されるようなNATからNATへの接続に非常によく似ています。

私が本当に気に入っているのは、2つのホスト間でSSL接続を開き、公開サーバブローカーに接続する方法です。ホストAがホストBに接続しようとするときは、接続を確立する前にブローカがホストBと確認できるトークンを提供する必要があります。

これに別のしわを加えるには、接続メカニズムが2種類の通信をサポートする必要があります。まず、REST WebサービスへのHTTPリクエスト/レスポンスと、リアルタイムメッセージの受け渡しを可能にする第2の永続ソケット接続(複数可)。

私は証明書、OAuthなどを使ってOpenSSLのように知っている手法を見てきましたが、必要なものは何も表示されません。

これまでに他の誰かがこのようなことをしましたか?すべてのポインタ?

+0

信頼できないホストがあなたの目的地であるかどうかわからない場所でトラフィックを転送しているので、相手方の確認に特に注意する必要があります。 – Piskvor

答えて

1

一般に、SSLは(あなたの仕事を解決するための)パケットベースのプロトコルです。ホストがパケットを前後に転送させることができれば、SSLで保護された通信チャネルを簡単に持つことができます。必要なものの1つは、SSL/TLS componentsのようなもので、ソケットだけでなくあらゆる輸送が可能です。私。コンポーネントはあなたのコードに "このパケットを相手側に送る"か、 "受け取るために何か持っていますか?"コードは中間サーバーと通信します。

+0

私はパケットレベルに落とさないことを望んでいました。私はオープンソースのHTTP/HTTPSプロキシパッケージを探して、あるホストから別のホストへの接続を、認証ステップを途中でプロキシできるようにしたいと考えていました。 – Allen

+0

@Allen私はあなたの仕事を理解しているので、通常のプロキシは必要ありませんが、2つの着信接続を受け入れ、それらの間にブリッジを作るパケットブローカーもあります。ここでの問題は、(クライアント上で)ソケット接続を発信するとき、ほとんどのSSL/TLS実装はこれがSSLのクライアント側であるとみなし、2つのクライアントを持つことになります。サーバーを発信接続にするには、カスタマイズされたSSL実装が必要です(私たちのように)。要約すると、オープンソースのプロキシだけで終わるのではないかと思う。 –

+0

Mayevski:OpenSSLの下では、ネットワーク層の発信接続にSSLサーバを置くのは簡単です。単に 'connect()'の後に 'SSL_accept()'を呼び出すだけです。 – caf

2

プレーンなSSLで問題を解決できます。

クライアントホスト間の信頼されていないサーバー転送接続を不透明なTCP接続として使用するだけです。クライアントは、転送されたTCPトンネルを介してエンドツーエンドのSSL接続を確立します.OffsSLでは、クライアントがSSL_accept()、その他のコールはSSL_connect()となります。

おそらくクライアント証明書を含む証明書を使用して、SSL接続のもう一方の端が期待どおりの人であることを確認します。

(概念的には、HTTPS接続がWebプロキシを介して動作する方法と似ています - ブラウザは「私をこの接続先に接続」と言うだけで、目的のエンドポイントとSSL接続を確立します)正しい証明書の秘密鍵がないため、目的のエンドポイントを偽装することはできません)。

関連する問題