2010/05/13

sni

ことの始まりは
http://twitter.com/k4403/status/13880245576
このつぶやき

Google Reader で証明書に関する警告が出るということで
画像を見てみると FQDN が www.google.co.jp になっていました
ほぉ、www.google.co.jp でもアクセスできるのか、なんて思いつつ
Firefox でアクセスしたら www.google.com にリダイレクトされてしまった
あらら

とりあえず引いてみると
$ host www.google.co.jp
www.google.co.jp is an alias for www.google.com.
www.google.com is an alias for www.l.google.com.
www.l.google.com has address 66.249.89.99
www.l.google.com has address 66.249.89.104
まぁこの辺は色々な仕組みで IP address 渡されてるんだろうけど
でもまぁ、www.google.com の CNAME ってことになってるようで

で、他のブラウザでも、と思って w3m で繋いでみると
Bad cert ident www.google.com from www.google.co.jp: accept? (y/n)
むむむ?
何故 Firefox と結果が違うのだ?
ちなみに https://www.google.com/reader はちゃんと見れるの

で、どうやら 1 IP address で複数の証明書を利用しようとしてるみたいで
それには
  • マルチドメインな証明書 (CN とか SubjectAlternativeName に沢山書く)
  • ワイルドカードな証明書 (* 使う、ホスト名部分だけウマー)
  • Server Name Indication (SNI)
で、google はこの SNI っぽい

SNI?
そもそも何でそんな小細工しないといけなかったかというと
SSL/TLS の handshake の際に IP address だけ使ってたんですって
でも、Virtual Host 的なことは色々なサービスで使いたいのでこれは不便
マルチドメインとかワイルドカードもあったけど根本的に解決しようということなのか
登場したのが SNI だと思うの多分
Server Name Indication - Wikipedia, the free encyclopedia

でまぁ、どうしてるかというと、client hello に繋ぐ先の FQDN 入れるの
そうよね、伝えちゃえばいいのよね
で、Firefox で www.google.co.jp に繋いだところを wireshark で見てみたら
しっかり www.google.co.jp って名前を伝えているようでした
Google は SNI を使っている!!

SNI には 1 つだけ悲しいところがありまして
Windows XP がサポートしていません。2003 もかな。
Windows は CryptoAPI とかいう API で暗号回りを処理してるんだけど
多分それが古いのかな?
で、それを使ってる IE とか chrome が SNI 使えないみたいです。
(chrome はそのうち TLS まわりを自分でもってくるかもしれないけど)

例えば Google App Engine の Roadmap に
App Engine For Business Roadmap - Google App Engine - Google Code
独自ドメインで SSL 使えるようにって書いてあったりしますけど
ワイルドカードはダメだからマルチドメインか SNI かと思い
(IP address をしこたま用意してあるってのもあると思うんですが)
SNI だったら XP 切るのかなぁ〜、と思いました

でも Google だったら証明書も用意してくれるかなって思ったりもしたけど
審査があるんだよなぁ、やっぱ、証明書は自前で用意かなぁ
秘密鍵と CSR を作成してくれて、証明書と中間が用意できるようになるのかなぁ
や、アプリ部分と同様に upload するのかなぁ

ちょっと楽しみ