Open4

VPNとTLSとWebsocketの整理

isrnisrn

VPN とTLS/SSLの関係

VPNを構築するために必要な暗号化の手段の1つがTLS/SSL。

VPN

VPNとは”Virtual Private Network”の略称で、共用の回線を諸々の技術によって仮想的に独立した専用回線であるかのように扱うもの。

VPN接続は、誰もが使う道路を自家用車で移動することに例えられます。道路それ自体は共用のものですが、車内という一定空間においてそのプライバシーやセキュリティはある程度確保されています。つまり、物理的な専用回線を引くよりもコストを抑えつつ、共用回線を普通に使うよりも安全性を担保できるのです。そのため、たとえば無料で接続可能な公衆Wi-Fiを利用する場合や、複数の拠点間でLANを接続する場合に、通信環境の安全性を強化する目的でしばしば活用されます。

VPN接続とは? 仕組みや導入のやり方、メリット・デメリットをわかりやすく解説

VPNの通信は暗号化されている。

このようにVPNのセキュリティは一定以上の高さを持ちますが、それでも認証が突破されたり、データが盗み見られたりするリスクは排除できません。そこで情報漏洩対策のために送受信するデータに施されるのが「暗号化」の機能です。暗号化することで、たとえ認証が突破されデータが漏洩したとしても、解読できないようにしてセキュリティを高めることができます。

VPNにおける暗号化には主に2つの種類があります。まず、SSL-VPNはセッション層において施されるもので、ブラウザーなどのSSLを使うため簡単に暗号化できるのが特徴です。外部からの不特定のリモートアクセスに強く、導入コストも抑えられます。もう1つのIP Sec-VPNは、IP層において施される暗号化で、専用ソフトなどで全通信を暗号化するため安全性が高いという特徴があります。通信も比較的高速で、複数拠点間でのやり取りによく使われます。

暗号化の種類

SSL-VPNとIPSec-VPNがある。

項目 SSL-VPN IPSec-VPN
プロトコル SSL/TLS IPSec
通信レベル アプリケーション層 ネットワーク層
接続方法 Webブラウザ(ポータル式)または専用クライアント(トンネル式) 専用クライアントが必要
用途 リモートアクセス 拠点間接続
利点 設定が簡単で利用しやすい 高いセキュリティと高速通信
欠点 パフォーマンスがやや劣る場合がある 設定が複雑でNAT環境での制限あり

IPsec-VPNとは?SSL-VPNとの違いもわかりやすく徹底解説
SSL-VPNとは?種類や接続方式、IPsec-VPNとの違いも解説

isrnisrn

SSL-VPN

SSL-VPNの種類

SSL-VPNは2種類に分かれる。

項目 ポータル式(クライアントレス) トンネル式(クライアントベース)
接続方法 Webブラウザを使用 専用のクライアントソフトウェアが必要
通信の範囲 ブラウザベースの通信(例: Webアプリ)に限定 全ての通信(例: RDP、SMBを含む)をVPN化
ポート番号 443番ポートのみ 443番ポートを使用(トンネル内は他ポートも利用可能)
動作の仕組み ポータルサイト経由でリソースにアクセス SSL/TLSトンネルを確立し通信を暗号化
用途 軽量なリモートアクセス 全体的なネットワークトラフィックの暗号化
利点 クライアントのインストール不要で簡単 幅広いプロトコル・通信をサポート
欠点 アプリケーションが限定される クライアント導入や設定が必要
適用例 簡易なWebアプリケーションアクセス リモートデスクトップやファイル共有の保護

SSL-VPNの接続方式

方式 リバースプロキシ方式 ポートフォワーディング方式 L2フォワーディング方式
接続方法 Webブラウザを使用 専用クライアントソフトが必要 専用クライアントソフトが必要
対応プロトコル HTTP/HTTPSに限定 特定ポートのプロトコル(例: RDP, SMB) 全てのプロトコル
動作の仕組み ゲートウェイが代理で内部リソースにアクセス 特定のポートをSSLトンネルにマッピング 全トラフィックをVPN化し内部ネットワークに接続
ポータル式 可能 不可能 不可能
トンネル式 不可能 可能 可能
利点 クライアント不要で設定が簡単 必要なアプリケーションのみVPN化可能(固定ポートのみ) 全トラフィックに対応しフルアクセス可能(動的ポートも可)
欠点 HTTP/HTTPS以外の通信は非対応 ポート設定が必要で柔軟性に欠ける セキュリティリスクが高く帯域を多く消費
用途 Webアプリやイントラネットアクセス RDPやメールクライアントの利用 リモートワークや拠点間接続
isrnisrn

WebSocket

概要

WebSocket は、双方向通信を実現するためのプロトコル。
HTTPリクエストに特殊なヘッダーを含めてリクエスを送信すると通信プロトコルをWebSocketに切り替えることができる。
使用するポートはHTTPやHTTPSと同一になる。

WebSocketは、リアルタイムのウェブアプリケーションに特化した通信プロトコルです。従来のHTTP通信と異なり、WebSocketはクライアントとサーバー間で一度接続が確立されると、その接続を維持し続けることができます。これにより、データを即座に双方向に交換することが可能になり、チャットアプリケーション、オンラインゲーム、ライブストリーミングサービスなど、リアルタイム性が求められる多くのウェブアプリケーションで利用されています。

WebSocket通信の開始は、クライアントがWebSocket接続を要求するHTTPリクエストをサーバーに送信することから始まります。このリクエストには、Upgrade: websocket という特別なヘッダーが含まれており、これにより通信のプロトコルをWebSocketに切り替えることをサーバーに指示します。サーバーがこのリクエストを承認すると、接続はHTTPからWebSocketプロトコルにアップグレードされ、データの送受信が可能となります。

特徴

  • 双方向通信:サーバーからクライアントへのデータ送信(プッシュ)も可能。
  • 低オーバーヘッド:HTTPに比べて通信オーバーヘッドが小さく、リアルタイム性が高い。
  • 永続的な接続:クライアントとサーバーの接続は一度確立すると、手動で切断されるまで維持。

WebSocketサーバの役割

  • 接続の確立
  • メッセージの処理

WebSocketサーバーは、クライアントからのWebSocket接続を受け入れ、開かれた接続を通じてメッセージを双方向に送受信する役割を持ちます。このサーバーは、以下の機能を提供する必要があります。

接続の確立: クライアントからの初期のHTTPリクエストをWebSocketプロトコルへアップグレードするプロセスを管理します。

メッセージの処理: 接続が開かれている間、サーバーは送受信されるメッセージを処理し、必要に応じて適切なレスポンスをクライアントに返します。

接続の維持とクローズ: サーバーは接続を維持し、エラー発生時やプロセス終了時には適切に接続をクローズします。

WebSocketサーバを経由したデータ授受

  • サーバはデータを保持せず、転送のみ行う
  • クライアントABの両方がWebSocketサーバとの接続が必要
  1. クライアントAがサーバに接続

    • クライアントAはWebSocketサーバに接続を確立。
    • サーバはクライアントAをセッションリストに登録し、接続状態を管理。
  2. クライアントBがサーバに接続

    • クライアントBもWebSocketサーバに接続を確立。
    • サーバはクライアントBをセッションリストに登録。
  3. クライアントAからサーバにデータ送信

    • クライアントAが送信するデータをチャンク(小さなデータ片)に分割。
    • サーバに対して、各チャンクを順次送信。
  4. サーバがクライアントBを識別

    • サーバは、クライアントAのデータを受信した際に、データの宛先(クライアントB)を識別。
    • 宛先識別には、クライアントBのセッションIDや宛先ID情報を使用。
  5. サーバがデータをクライアントBに転送

    • サーバは、クライアントAから受け取ったチャンクをそのままクライアントBにリアルタイムで転送。
    • データを保持せず、中継のみを行う。
  6. クライアントBがデータを受信・再構築

    • クライアントBはサーバから受け取ったチャンクを順次受信。
    • 全てのチャンクを再構築して元のデータ(例: ファイル)を復元。