今回は先週の 16 日に運用している Azure Web サイトで障害が発生した話について書くことにします。何が起こったかを Twitter に書きながら対応したので、時系列に沿って紹介していきます。
Web サイトで IP SSL 有効にしてるのに、設定した証明書じゃなくて http://t.co/b3KLZr99FP のが使われて警告が急に出るように
— しばやん (@shibayan) 2014, 7月 16
珍しく早起きしたら、SSL 証明書周りで問題が発生していることに気が付きました。
少し調べてみると、何故か IP SSL を設定している Web サイトなのに、標準の *.azurewebsites.net ホストの証明書が使われるという現象が発生していました。
ブラウザからアクセスすると、上のスクリーンショットのような警告画面になるので困りました。
とりあえず IP SSL の設定をし直したり、SNI SSL に切り替えてみたりしましたが、特に状況は改善することなく Twitter につらつらと書いていたら、帝国兵さんからとある情報を教えてもらいました。
@shibayan 今日あちこちのリージョンで色々問題が起きたようです。詳しい状態を教えてもらえますか?ご迷惑おかけして済みません
— 帝国兵 (@superriver) 2014, 7月 16
そのまま調査をお願いしたところ、SNI SSL に切り替えたタイミングで A レコードで設定するべき IP アドレスが変わっていることを教えてもらい、すぐに DNS レコードを設定しなおしました。
メモ : IP SSL から SNI SSL に変えたら A レコードの変更必須
— しばやん (@shibayan) 2014, 7月 16
とりあえず今回は IP SSL を捨てて SNI SSL に切り替えることで、ひとまず改善することが出来ました。そして、Azure Web サイトで IP SSL を使う際の注意点も同時に知ることが出来ました。
IP SSL と A レコード
今回の障害原因はまだ確定はしていませんが、障害が発生したタイミングで管理ポータルを確認したところ、仮想 IP アドレスが A レコードで設定しているものと異なっていたような気がしました。この仮想 IP アドレスが変わったため、デフォルトの証明書が使われてしまい警告が出たっぽいです。
IP SSL は IP アドレスに対して証明書を紐づけるので、A レコードで指している IP アドレスと、Azure Web サイトが内部的に管理している仮想 IP アドレスと Web サイトの関連付けが狂ったのかと見ています。*1
面白いことに、Azure Web サイトの A レコードで指定する IP アドレスは IP SSL とそれ以外で変わりますが、ホスト名が正しく指定されていれば別の IP アドレスだったとしてもアクセスは可能になります。
例えば、自分が運用している wsoembed.com というサイトでは A レコード用の IP アドレスが .30 となっています。これを hosts ファイルを書き換えて、別の IP アドレスを指すようにして試したところ、何の問題もなくページが表示されます。
IP アドレスは別のものに変わっていることが確認できますが、問題なく動作しています。なので、Azure Web サイトが持っているエンドポイントは、かなり数が多いのではないかと思いました。
まとめ
まとまりのない文章になったので、無理やりまとめておきます。
- Azure Web サイトでは基本的には SNI SSL を使う
- IP SSL はどうしても SNI SSL が使えない場合のみに使う
XP も死んだ今、SNI SSL で大抵の場合は問題ないと思います。5 サイトまで無料で標準なら使えます。
*1:正直なところ仮想 IP アドレスが変わるのは最低な挙動だと思ってる