前回は、リレーサーバへのアクセスは https なので、 stone 以外のソフトウェアも使えるというお話をしました。 一例として OpenSSL 付属の s_client を使ってみたわけですが、 https を扱うクライアントソフトウェアといえば普通は WWW ブラウザですね。 というわけで今回は WWW ブラウザでアクセスする方法を紹介します。
ブラウザで https://relay.klab.org/ をアクセスすると、 次のようなリクエストヘッダが SSL で暗号化されて、 リレーサーバ relay.klab.org へ送信されます。
GET / HTTP/1.1 Host: relay.klab.org User-Agent: Mozilla/5.0 ... (空行)
リレーサーバは SSL クライアント認証を要求するので、 ブラウザは証明書ストアにある SSL クライアント証明書を使用して 認証を行ないます。 利用できる SSL クライアント証明書が複数ある場合は、 ブラウザが証明書の選択画面をユーザに提示し、ユーザが選ぶことになります。
リクエストヘッダを受け取ったリレーサーバは、 同じ証明書を持つ relayagent からの接続が存在すれば、 その relayagent との通信を確立させるのでした (VPN-Warp 入門編 (3)を参照してください)。
つまりリクエストヘッダに続いて送られるデータがポートフォワード先に送信され、 ポートフォワード先から返されたデータが、ブラウザに届きます。
が、ちょっと待ってください。 前回までに説明してきたポートフォワードの場合、 リクエストヘッダ (のようなもの) は stone が挿入した、 いわばダミーのリクエストヘッダでした。 ダミーですから、リクエストヘッダ (のようなもの) は ポートフォワード先に送信する必要がなかったのですが、 ブラウザを使う場合は、リクエストヘッダはホンモノです。 リクエストヘッダも込みでポートフォワード先の WWW サーバに送る必要があります。
VPN-Warp 入門編 (3)で 説明した relayagent の設定では、 「-n」オプション (relayagent をポートフォワーダとして使う、という意味) を 指定したことを覚えていますでしょうか? 実は、この「-n」オプションというのが、 relayagent にリクエストヘッダ (のようなもの) を取り除くことを指示する オプションなのです。 だから「-n」オプションを指定しなければ、 リクエストヘッダも含めてポートフォワード先 (つまり WWW サーバ) に送られます。
例えば relayagent の設定ファイルは次のような感じになります:
-k private.pem -c cert.pem relay.klab.org:443 intra:80
intra:80 がポートフォワード先の WWW サーバですね。 このような設定で relayagent を実行しておくことにより、 ブラウザが https://relay.klab.org/ へアクセスすると、 リクエストヘッダ込みで intra:80 へアクセスが行なわれます。
これで問題なくブラウザで intra:80 へアクセスできる...
場合もあるとは思いますが、
二点ほど注意すべき点があります。
- 「https」と「http」の違い
- ホスト名の違い
少々ややこしい問題ですので、次回まわしにしましょう。