SSL利用時のHTTP_X_JPHONE_UIDの落とし穴

id:milktea_cg7さんのところにあるように、SoftbankのHTTP_X_JPHONE_UIDはSSLで暗号化されたページに、メールに記載されたURL等から直接アクセスした際には取得できない。


まず、HTTP_X_JPHONE_UIDはSoftbankのGWを通過する際に付加されている様子。で、暗号化されていない(HTTPの)通信では直アクセスだろうがなんだろうが中身が見えるので普通に付加できる。
しかし、SSLで暗号化された通信の場合はヘッダももちろん暗号化されているため、GW側で改竄できず、HTTP_X_JPHONE_UIDを追加できない。
Docomoが最近公開したユーザIDはSSL通信時は取得不可能だが、これがその理由である。・・・たぶん。)


これを解決してSSL通信時にもヘッダを付加できるようにするため、SoftbankのGWは、HTTPからHTTPSへと遷移するリンクを書き換える。具体的には、

Ex:
https://www.foo.com/bar.html というURIはGWにて
https://secure.softbank.ne.jp/www.foo.com/bar.html と変換されます。

という具合。これにより、携帯端末-GW間とGW-ホスト間でSSLのセッションを確立し、GWはそれぞれのセッションの中継を行う。これにより、GWでは暗号化されていない生のデータを扱うことになり、ヘッダにHTTP_X_JPHONE_UIDを追加することも可能となる。


だが、Softbankの技術資料によると

メール本文等に記載されたhttps://を含むURIへアクセスした場合、GWはSSL/TLSセッションの中継を行わず、End to Endでセッションを確立します。

とのことで、この場合、GWを流れるデータは暗号化されており、HTTP_X_JPHONE_UIDはもちろん付加できず、また、そのページに記載されているリンクを書き換えることもできないため、リンク先の暗号化されたページでも同じことになる。


結局、メールなんかに記載したURLで、HTTP_X_JPHONE_UIDを取得する必要ある時は、id:milktea_cg7さんのところにあるように、非SSLのページを挟みなさいってこと。例えば仮登録メールとか。


あ、あとid:maru_ccさんが書いてますが、SSL通信時は「secure.softbank.ne.jp」というドメインになるため、非SSL時とCookieを共有できない。なので、SSLでログインして、非SSLのページに移動という使い方をしようとするとセッションを維持できなくなる。まぁ、そもそも携帯のCookie対応はまだまだアテにはできそうもないんで、セッションIDを引きまわすことになるんだろうけども。