http通信におけるセキュリティ関係でCONNECTメソッドという言葉を聞くことが結構あります。
プロキシでのhttps通信を実現するにも重要なので、今回はCONNECTメソッドに関して解説します!
プロキシが見えなければならないものは?
CONNECTメソッドとは何か?を知るために、先ずはプロキシのお話から始めます。
プロキシはHTTP通信を代理してくれるという大変便利な役割があります。大きな仕組みとしては、クライアントのリクエストhttpのペイロード(データの中身)を見て、リクエストするページのパス名("/"スラッシュ以下、つまりFQDN以降)をサーバに渡して、プロキシに返ってきたhttpレスポンスをクライアントに返す、というものです。
例えば、「http://itmanabi.com/connect-method/」というURLへアクセスした場合、
FQDN以降の「/connect-method/」の部分はプロキシがhttpデータの中身を見て情報を取り出しているのですね。
つまりペイロード(データの中身)をプロキシが見える必要があるのです!
そうなるとHTTPS(http over TLS)だとペイロードが暗号化されてしまっているので、その中にあるリクエストページのパス名をプロキシが見ても分からないじゃないか!!となる訳です(プロキシは勿論、HTTPS通信の秘密鍵を持っていないので、複合できません...)。
そこで登場する便利なものが、CONNECTメソッドです!
CONNECTメソッドとは?
CONNECTメソッドを使うとHTTP以外のプロトコル(例えばHTTPS)をトンネル化するように指示を出すことができます。
暗号化通信のHTTPSの場合はプロキシに対してTLS(SSL)通信をトンネル化するように指示を出すことになりますが、先ずはホスト名だけのURL(いわゆるFQDN)でプロキシがサーバとHTTPコネクションを張ります。その上にTLS(SSL)を流し、その上に更にhttpを流す形を取ってhttps通信を実現してます。
つまりhttps通信の場合、プロキシはトンネルを張って、来たデータを左から右へ横に流すだけです。
HTTPとHTTPSで動きが結構違うのですね。
httpとhttpsそれぞれの流れを簡単に図にまとめてみました。
まとめ
今回はCONNECTメソッドの仕組みを解説しました。
プロキシを利用してhttps通信をする際にCONNECTメソッド使う訳ですが、実はこれを使って内部情報を外部の悪意あるサーバへ暗号化して通信することもできるので、利用する時は気を付ける必要がありますね。
ただ、最近ではSSL Decryption(復号)機能は殆どのUTM/Proxy製品が対応しているそうですので、CONNECTメソッドを使ってプロキシ経由のHTTPS通信を行う動きはあまり無いのかもしれませんね。
以下サイトが分かり易いです。
以上です!
参考URL)