AWSにてIEのみ意図しないSSL証明書が読み込まれる問題

サーバー

AWSにて運用しているとあるコンテンツ。
一つのインスタンスの中に、複数の証明書をおいて運用していたんですが、

「IEでみると、エラーになって見れないんだけど!」

とご報告を頂き調査。

ちなみにWin8の環境の私のPCでは何も問題なし。

報告をもらった人のPCで見ると確かに見れない!

調べてみたらどうやら異なるドメインの証明書を読み込んでいる。

環境に依存するようなので、調べてみたら

あー

SNI非対応だから?

という事でさらに調べる。

とはいえグローバルIPは複数割り当てており、ドメインごとにIPは分けている。

それでも起きるこの現象。

バーチャルホストの設定から見直してみることにしました。

それにより一応解決できたので結果をご報告。

まず、AWSですが、一つのインスタンスに一応複数のグローバルIPを
エラスティックIPとして割り当てられる(よう)なんですけど
仮想IPのようなものらしく、実際のインスタンス内に来るときは
一つのNICからローカルIPアドレスで入ってきます。

グローバルIPではなく、VirtualHostの設定にて下記のように記載していました。

<VirtualHost *:443>
DocumentRoot ほにゃらら
ServerName ほにゃらら
ErrorDocument ほにゃらら
ErrorLog ” ほにゃらら”
CustomLog ” ほにゃらら
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/ほにゃらら/server.crt
SSLCertificateKeyFile /etc/ほにゃらら/server.key
SSLOptions +StdEnvVars
</VirtualHost>

みたいな感じ。

<VirtualHost *:443>
ここをグローバルIPにしても、インスタンス上ではローカルIPで入ってくるので
マッチせずにDefaultの設定を読み込んでしまいます。
つまりここに
<VirtualHost 222.222.22.22:443>
みたいにグローバルIPを書いたところでサイトにアクセスできないんですね。

セットアップを人任せにして仕様を確認しておかなかった私が悪いんですが…。
この設定だと、SNI対応していないブラウザの場合、
SSLで接続したときにホスト名も暗号化されているため、
SSLの設定を読み込んだ後にホスト名を特定するようになるわけです。
ネームベースのバーチャルホストの場合はホスト名が暗号化されているせいで
バーチャルホストの設定を読むことができないため、最初にマッチした*:443の
SSL証明書を読み込んでしまい、実際にアクセスしているURLとは
異なるサイトのSSL証明書を取得してエラーとなっていた。

という事のようです…(これで合ってるのかな)。

解決策としてはエラスティックIPのリストから
それぞれのグローバルIPがどのローカルIPに代わって
インスタンス内に入ってくるかを調べて
バーチャルホストの設定に書き込んでやれば良い模様。

一応これでエラーはでなくなりました。

っていうかこれAWS関係ないじゃん!Apacheの設定の問題じゃん!

まぁこれもあと半年。XPサポート終了までのお話ですね。
そのうち「IE6とっとと消えろよ!」が
「まだXP使ってんのかよ対象外だよ!」みたいな感じに変わってくるんでしょうかね。

画像:
Security Circus / Alexandre Dulaunoy

コメント

タイトルとURLをコピーしました