SSH over HTTPやSSH via HTTP 、HTTPのカプセル化、HTTPトンネリングなどの表現で呼ばれる便利な仕組みがあります。会社から外に対してSSHをプロキシで弾いている場合に使えるテクニックのことです。
使うかどうかは各々の環境やセキュリティリスクを鑑みて使っていただければと思いますが、この記事では使い方ではなく理屈の説明をしていきたいと思います。
どう成り立っているのか?
この仕組みを知るためにはまずはHTTPのCONNECTメソッドを知る必要があります。CONNECTメソッドはプロキシ経由でHTTPS通信に用いられることが多いです。
HTTPSの通信はその名の通りSSL・TLSで暗号化されたHTTP接続のため、いかにプロキシといえど間の通信をみることは許されません。(プロキシがサーバ証明書や秘密鍵を持っている場合を除く)
そのためHTTPSの場合は以下のフローとなります。
- クライアント→プロキシへのHTTPリクエスト
- プロキシ→サーバーへの3ウェイハンドシェイク
- 2が成功したらプロキシ→クライアントへ200応答が返却
- クライアント→プロキシ→サーバーへ SSLの通信開始
4以降でクライアントーサーバ間でSSLのセッションをはったり、実際にデータのやり取りを行うがプロキシはIP・TCPレイヤまでしか関与せず、アプリケーション層レイヤーのプロトコルについてはノータッチになるのです。
ミソなのは、2にてプロキシ→サーバー間はTCPレイヤでしか機能をしないことや、4ではプロキシが宛先ポートを貼ったコネクションの物に書き換えてくれるというところでしょうか。
ここまでがHTTPのCONNECTメソッドの話です。
SSLの説明ですが、このサイトの画像による説明が非常にわかりやすいと思います。
実際の通信内容
通信をそれぞれ見てみましょう。このフローをみるとおおむね理解できると思います。