お客さんのサイトを常時SSL化をしたときのメモ。というか嵌まったことをメモする。
現在は、AWSのELB+EC2(Windows Server)で運用している。EC2はとりあえず一台で運用している。インスタンスが一つではロードバランスとか冗長化と関係ないが、でもEC2一台でもELBを入れておけば、サーバーのアップデートとか入れ替えが簡単だし(言い訳)。
以上を常時SSL化を実施する。まずは、AWS Certificate Managerで証明書を発行する。認証が必要なのでDNSで認証する。AWS Certificate ManagerかかRoute 53に認証するSNAMEを追加してくれるので認証が簡単。
HTTPでアクセスしたとき簡単にリダイレクトの設定をしてしまうとループするようなので、IISのReWriteモジュールにリダイレクトのルールを追加する。Web,configにAWSのサポートページにあったルールを追加するとエラーになる。これからがトラブルの始まり・・・。
IISの設定から手作業でリダイレクトルールを追加する。参考にしたのは、こちらのページ。こちらでエラーもなくリダイレクトルールを追加できた。
次にAWS ELBにHTTPSのリスナを追加する。そのときAWS Certificate Managerで作成した証明書を指定する。これで完了を思いきや、サイトにつながらなくなった。
EC2のセキュリティグループを確認したり、Windows Serverのファイヤウォールを確認したりといろいろやってみたところダメ。これで作業終了かと思ったら、単にELBのセキュリティグループにHTTPSの設定がなかっただけだった。HTTPSを追加したらアクセスできた。
しかし、www.付きのドメインだとEdgeやFirefoxでは証明書エラーとなる。www.なしのドメインだけだと正常。Chromeだとどちらでも保護されていると正常となる。
これはAWS Certificate Managerで証明書を作ったときの失敗だった。www.無しのドメイン名だけで作成していた。www.付きでも大丈夫のように別名を指定して証明書を作ってあげるようにする。おかげで再度証明書を作り直す。
AWS Certificate ManagerでDNS認証で、どういうわけかwww.付きのドメインの認証がやたら時間がかかった。作成に失敗したかと思って、もう一回証明書を作成し直してしまった。www.無しだとすぐに認証してくれたけど、無しだと1時間くらい認証に時間がかかった。これがAWSの仕様かどうかは不明。
ELBのリスナーにHTTPSを追加する。このとき前の証明書の選択項目が残っていてリスナーの追加に失敗する。ELBから一旦別のAWSのサービスに行ってからELBに戻ると正常に追加できた。
これで常時SSL化は完了。HTTPでアクセスしてもHTTPSにリダイレクトしてくれることも確認する。www.付きでも無しでも正常にアクセスしてくれることも確認する。
途中、心が折れそうになったけど、無事に常時SSL化は完了。