SSL終端

目次

SSL終端とは

SSL終端(SSL Termination)とは、クライアントとサーバー間の暗号化通信において、中間のサーバーやネットワーク機器が暗号化されたSSL/TLS通信を受信し、その通信を復号する処理を指します。

SSL終端
暗号化されたHTTPS通信をHTTP通信に変換するポイントとも言えます。

具体的には、クライアント(例:ウェブブラウザ)からの暗号化リクエストは終端点まで暗号化状態で届き、そこで復号されます。

復号後は、元の平文データとして処理されるか、または別の暗号化設定で再度暗号化される場合もあります。

なので、SSL終端後は通信の傍受が可能というセキュリティリスクが発生します。

平文通信によるリスク
SSL終端の位置を誤ると情報漏洩の危険が増えるため、プライベートネットワーク内などの外部の悪意ある第三者からの傍受がない場所での終端が望ましいです。

また、機密レベルの高い情報については、社内だとしてもSSL通信を継続させエンドツーエンドのSSL暗号化を行う設計とするのが望ましいです。

SSL終端はネットワークにおける暗号化処理の境界線として機能します。

この技術は主にパフォーマンス向上とセキュリティ管理という二つの目的で使用されます。

バックエンドサーバーから暗号化処理の負担を取り除き、専用のネットワーク機器やプロキシサーバーに集約することで、システム全体の処理効率が向上します。

暗号化の負担
また、集中的な証明書管理や、セキュリティポリシーの一元適用も容易になります。

リバースプロキシ、ロードバランサー、CDN、WAFなどのネットワーク機器やサービスで一般的に使用される機能であり、大規模なウェブインフラストラクチャでは標準的な構成要素となっています。

SSL終端によって、バックエンドシステムはHTTPS通信の複雑さを気にすることなく、本来の機能に集中できるようになります。

SSLインスペクションとは

SSLインスペクション(SSL Inspection)とは、暗号化されたSSL/TLS通信の内容を検査する目的で、暗号化されたデータを意図的に復号し、その内容を分析した後、必要に応じて再暗号化するプロセスを指します。

本来は送信元と受信先の間でのみ復号可能なはずの暗号化通信を、セキュリティ上の理由から中間で復号して可視化する技術です。

この技術は主に企業ネットワークやセキュリティ機器で使用され、マルウェア検出、データ漏洩防止、コンプライアンス遵守、不適切なコンテンツへのアクセス制限などの目的で実装されます。

従来の非暗号化通信と同様のセキュリティ対策を暗号化通信に対しても適用できるようにするための手法といえます。

SSLインスペクションを実現するには、通常「中間者」として機能するプロキシサーバーが必要です。

このプロキシは宛先サーバーになりすまし、クライアントとの間に独自のSSL/TLS接続を確立します。

同時に、宛先サーバーとの間に別のSSL/TLS接続を確立し、これら二つの接続の間で通信内容を仲介します。

SSL中間者
これにより暗号化通信の内部を検査できるようになります。

この手法は技術的には「正当な中間者攻撃」(authorized man-in-the-middle)と同様のメカニズムを使用しますが、セキュリティ目的で組織の管理下で行われる場合にSSLインスペクションと呼ばれます。

実装にあたっては、プライバシーへの配慮やユーザーへの透明性の確保が重要となり、多くの組織ではSSLインスペクションの対象範囲や除外サイト(金融機関や医療サイトなど)を明確に定めたポリシーを策定しています。

フォワードプロキシのSSL終端

フォワードプロキシにおけるSSL終端は、クライアントからのHTTPS接続をプロキシサーバーで受け止め、暗号化された通信を復号する処理を指します。

フォワードプロキシの場合、クライアント(主に社内ネットワークのユーザー)がインターネット上の様々なウェブサイトにアクセスする際の仲介役として機能します。

クライアントは明示的にプロキシサーバーに接続し(または透過的に誘導され)、プロキシがクライアントの代わりに外部サーバーへの接続を行います。

通常のHTTPS通信においては、フォワードプロキシでは「CONNECT」メソッドを使用したトンネリングが行われ、暗号化されたままの通信がプロキシを通過します。

つまり、この場合はSSL終端は発生せず、フォワードプロキシはトンネルとしての機能のみを果たします。

SSL通信は利用者と通信先で確立されて、フォワードプロキシは飽くまでもトンネル、もしくは、ただの踏み台のような形で使用されます。

CONNECTメソッド
この場合は、フォワードプロキシは利用者と通信先で行われる通信の内容を把握しませんので、本来もつセキュリティ機能のほとんどが機能しません。

なので、フォワードプロキシにて中身を検査させたい場合には、プロキシサーバにて一度SSL終端を行う必要があります。

しかし、フォワードプロキシでSSL終端を行う場合(主にセキュリティ監視目的)、プロキシは二つのSSL接続を管理することになります。

一つはクライアントとプロキシ間の接続で、もう一つはプロキシと宛先サーバー間の接続です。

この構成では、プロキシがクライアントに対して宛先サーバーになりすます形となり、通信内容の復号、検査、そして再暗号化が可能になります。

この仕組みを実現するために、フォワードプロキシは組織の認証局(CA)で発行された証明書を使用し、アクセス先サイトごとに動的に証明書を生成します。

クライアント側には組織のCA証明書があらかじめ信頼できる証明書として登録されている必要があり、これがないと証明書警告が表示されます。

この方式は透過型プロキシでも使用された方法ですね。

透過型プロキシについては、「透過型プロキシ」を参照して下さい。

フォワードプロキシでのSSL終端は、主にセキュリティ監視、コンテンツフィルタリング、マルウェア検査、データ漏洩防止などの目的で使用されており、しばしば「SSLインスペクション」と同義で扱われます。

企業ネットワークでは、ユーザーのインターネットアクセスを管理・保護するために広く採用されているアプローチです。

リバースプロキシのSSL終端

リバースプロキシにおけるSSL終端は、インターネット上のクライアント(一般ユーザー)から保護対象のウェブサーバーへの暗号化通信を、プロキシサーバーで受け止めて復号するプロセスです。

これはウェブアプリケーションの配信インフラストラクチャにおいて極めて一般的な構成要素となっています。

リバースプロキシは、ウェブサーバーの前面に位置し、外部からのアクセスをすべて受け付ける「玄関口」として機能します。

SSL終端を実装する場合、クライアントからの暗号化された通信(HTTPS)はリバースプロキシに届き、そこで復号されます。

復号後の通信は、内部ネットワーク上でバックエンドサーバーに転送されます。

暗号化の負担
この内部転送は、平文(HTTP)で行われる場合もあれば、別のSSL/TLS接続で再暗号化される場合もあります。

リバースプロキシでのSSL終端の主な利点は、バックエンドサーバーから暗号化処理の負荷を取り除くことです。

暗号化と復号化の計算負荷の高い処理をプロキシに集中させることで、アプリケーションサーバーはビジネスロジックの処理に専念できます。

また、証明書の管理も一元化され、複数のバックエンドサーバーがあっても、SSL証明書の更新や管理は単一のプロキシで済むようになります。

さらに、リバースプロキシでSSL終端を行うことで、HTTP層でのコンテンツの検査、操作、最適化が可能になります。

キャッシング、圧縮、コンテンツ変換、ヘッダーの追加や削除など、さまざまな処理をプロキシレベルで行うことができます。

また、Webアプリケーションファイアウォール(WAF)機能を統合して、クロスサイトスクリプティングやSQLインジェクションなどの攻撃からバックエンドを保護することも可能です。

まとめ

今回はSSL終端について解説しました。

外部のWebコンテンツとの通信において、どこで暗号化を解除するか、どこからの通信を平文とするかを決める重大な要素です。

実は、SSL終端はプロキシに関わらず、ロードバランサーなどを実装する際にも発生する設計要素です。

考え方としては同じで、セキュリティを守るべき場所と、安全な経路からは暗号化を解除して処理の効率化や通信内容の精査を行わせるための一時的な復号などを考えます。

特に企業においては、通信内容のフィルタリングのためにファイアーウォールが用意されている場合が多いです。

ファイアーウォールといえど、SSLで暗号化されていては検査ができないので、どこかで復号する必要があります。

概念をしっかりと理解して、設計していきましょう。