今日のハマりどころ

まだまだ、SNIに対応してないクライアントは沢山ある

サーバのSSL証明書を更新したらある程度古いAndroid端末からSSL通信できないという事象が発生。
ジオトラストの証明書にしたんで、きっと中間証明書かクロスルート証明書絡みなんだろうな〜と思いながら調査をしていたが、

$ openssl s_client -showcerts -connect www.mydomain.jp:443

の値も更新前の証明書の値が返ってきたりで...

ん?virtual host??
www

対象のAndroid端末はすべてDefaultHttpClientからリクエス
以下の記事にあるように「HttpURLConnectionではSNI接続を試みる」とあるようにDefaultHttpClientではSNIに対応してないように読み取れる
http://android-developers.blogspot.jp/2011/09/androids-http-clients.html

で、対象のサーバの設定を確認してみたところ、が思いっきり、更新前の証明書を参照しているではありませんかwww
SNIに対応してないクライアントへはdefault virtual hostの期限切れ証明書を返していただけというオチ。

で特に複数証明書を運用するサーバでもなかったので、default virtual hostを停止したんだけど...






真剣にSNI運用しているサーバって非対応クライアントからのアクセスどうしるんだろう...