iモードにおけるgmailのセッション管理の検証(その1)


(2013.06.17追記) このエントリの考察は間違ってるので参考にしないでください。

先週の土曜日に書いたエントリ(未検証なので信憑性はないが、iモードにおけるgmailのセッション管理を解析してみた)の続き。ちょっと実験してみました。分かったところをご報告。

1. リバースプロキシ(*1)環境ではSSL_SESSION_IDが環境変数で取得できない

試してみて分かったことですが、リバースプロキシごしではSSL_SESSION_IDが取得できませんでした。理由はmod_sslがリバースプロキシ上で動いているため、背後のWebサーバにまでSSL_SESSION_IDが渡ってこないからです。

参考に、次のような情報があります。
[Apache-Users] リバースプロキシ環境で環境変数を渡すには 2002/2/12(*2)

(*1) プロの棋士が打った手を「あ、あ、すいません。今のなしでお願いします」というリバースプロ棋士とは違うので注意。
(*2) 宮川さんが登場してる。かっこいーなー。

2. googleはどうやってんの?

できない、という話ではなく手段はいくつかある様子です。googleは上の参考情報で言われているように、URLをRewriteしてSSL_SESSION_IDをつけてWebサーバに引き渡しているのではないでしょうか。


ちなみに、いちばん簡単なのはRewriteの際にURL内にユーザ名を埋め込むことではないでしょうか。
例えば、TEST_USERというユーザなら

http://WebServer.mydomain.com/$1?TEST_USER

というリクエストがWebServerに飛ぶように。

[Apache-Users 990] Re: リバースプロキシ環境で環境変数を渡すには」より引用

もしくは、Webサーバに環境変数SSL_SESSSION_IDを引き渡すモジュールを自作してるのかもしれません。余談的ですがオラクルの製品には、リバースプロキシ環境でもSSL_SESSION_IDを取得できるようにするモジュールが含まれているようです。


mod_certheaders

Oracle HTTP Serverの前でSSL接続が終了するリバース・プロキシ(OracleAS Web Cacheなど)が、
SSLクライアント証明書情報などのSSL接続に関する情報を、Oracle HTTP Serverおよび
Oracle HTTP Serverの背後で動作しているアプリケーションに送信できるようにします。
この情報は、HTTPヘッダーを使用してリバース・プロキシから Oracle HTTP Serverに送信されます。
情報はヘッダーから標準CGI環境変数に送信されます。SSL接続がOracle HTTP Serverによって
終了する場合はmod_osslまたはmod_sslがこの環境変数を移入します。これはOracleモジュールです。

モジュールの理解」より引用

[Apache-Users] リバースプロキシ環境で環境変数を渡すには 2002/2/12では、'mod_proxy_add_forward.c'という既存のモジュールを参考にして、リバースプロキシから環境変数を引き渡せるモジュールを組んでみては?的な話もされています。参考になる実装があるのであれば、自作もそんなに難しくはなさそうですよね。

3. 気になること

参考にした情報がけっこう古く(2002年)Apache1.3系をベースに話しているので、もしかするとApache2系だと簡単に取得する手段があったりしないか気になります。もしくは、用途を満たす安定したモジュールを誰かが既に開発済みとか。小一時間ググってた感じでは特に見つからなかったのですが、スマートな方法が既にある気がします。

どなたか、リバースプロキシから環境変数をバックエンドのWebサーバに引き渡す方法をご存知の方いらっしゃいましたら教えてください。