両方のプロトコルを一緒に使用することをお勧めしますか?どのような状況で?
ここで考慮すべき安全なトランスポートのさまざまな層があります。
SSLとIPSec VPNはどちらも優れたオプションであり、どちらもかなりのセキュリティ系統を持っていますが、異なるアプリケーションに適している場合があります。
IPsec VPNはレイヤー3(ネットワーク)で動作し、一般的な展開ではローカルネットワークへのフルアクセスを提供します(ただし、ファイアウォール経由でアクセスをロックダウンでき、一部のVPNサーバーはACLをサポートしています)。したがって、このソリューションは、リモートクライアントをローカルにネットワークに接続されているかのように動作させたい場合に適しています。特に、サイト間VPNに適しています。また、IPSec VPNは、ベンダーが提供する特定のソフトウェアを必要とする傾向があり、エンドユーザーデバイスでの維持が難しく、VPNの使用を管理対象デバイスに制限します。
SSL VPNは、リモートアクセスに適した選択肢としてよく引用されます。これらはレイヤー5および6で動作し、一般的な展開では、ユーザーの役割に基づいて特定のサービスへのアクセスを許可します。その中で最も便利なのは、ブラウザーベースのアプリケーションです。通常、アクセス許可をよりきめ細かく制御してSSL VPNを構成する方が簡単です。これにより、場合によってはリモートアクセスにより安全な環境を提供できます。さらに、SSL/TLSは本質的に最新のデバイスでサポートされており、通常、専門のクライアント側ソフトウェアを必要とせずに、またはそれ以外の場合は軽量のブラウザーベースのクライアントで展開できます。これらの軽量のクライアントは、ローカルのチェックを実行して、アクセスが許可される前に接続マシンが特定の要件を満たしていることを確認することもできます。これは、IPSecでは実現がはるかに難しい機能です。
どちらの場合も、一方を他方と同じように構成できます。SSLVPNを使用して、完全なネットワークアクセスでトンネルを作成でき、IPSec VPNを特定のサービスにロックダウンできます。ただし、上記のシナリオにより適しています。
ただし、これらの理由から、多くの組織では両方の組み合わせを使用します。多くの場合、サイト間接続にはIPSec VPN、リモートアクセスにはSSLが使用されます。
SSLとIPSecの関係については、多くのリファレンスがあります(これらのいくつかはベンダーから直接提供されています)。
IPSec VPNやSSL VPNトンネルなど、上記のケースの一部では、使用している実際のサービスでエンドツーエンドの暗号化を取得できない場合があります。 SSL/TLSの追加レイヤーを使用すると便利です。
あなたがリモートで、IPSec VPNを介して内部でホストされているWebアプリケーションに接続しようとしているとします。ブラウザ経由でHTTPプロトコルを使用する場合、トラフィックはVPNトンネル自体を実行している間暗号化されますが、リモートVPNエンドポイントに到達すると暗号化が解除され、クリアテキストで内部ネットワークを通過します。これは一部のユースケースでは許容できるかもしれませんが、徹底的な防御のために、理想的には、ユーザーと実際のサービス自体の間のどこにもデータが傍受されないことを知りたいです。 HTTPSを介してこのアプリケーションに接続することで、実質的に2つのセキュリティレイヤーが得られます。1つはユーザーとVPNエンドポイントの間、もう1つは(ユーザーとWebサーバー自体の間)を通過します。
もちろん、これはHTTPSに限定されません-SSH、FTPS、STARTTLSを使用したSMTPなどの他の安全なプロトコルを同様に使用する必要があります。
こちらがIPSECおよびSSLに関するシスコの 良い記事 です。これには、長所と短所、それぞれの概要、および両方を同時に実装することが含まれます。
企業のVPNトンネル(IPSECで動作する)がある可能性がありますが、企業ネットワークのVPN経由で到達している内部Webサーバーの上のレイヤーはHTTPS(SSL経由)である可能性があります
ずっと前に私はこれについて話しました
両方のプロトコルを使用する理由があります。 IPsecトンネルを使用する場合でも、アプリケーションレベルの暗号化が必要です。これは、トンネルの終わりとセッションの終わりの間にギャップがある場合に有利です。
次の図は、IPsecに加えてHTTPS(この例ではSQL)のようなアプリケーションレベルの暗号化が必要な理由を示しています。
User => Website => IPSec Tunnel => Back End Network => SQL Backend
| => Data can be read by other hosts!