EC2、ELB、Route 53 + SSL
EC2、ELB、Route 53 + SSL
EC2あたりの設定もろもろ
複数のWebサーバとしてEC2インスタンスを作成し、ELBで負荷分散させる。アクセスにはSSLも使う場合の設定について。SSLなしならわかりやすくまとまってるサイトがあるので差分を埋めるつもりでメモ。
参考サイト
- Amazon Route 53とELBでAlias Resource Record Setを設定してZone Apexを実現 | Developers.IO
- 【試してみた】Amazon Route 53にドメインを移動してみた。 | Pocketstudio.jp log3
- take some notes 【システム開発メモ Flex AWS DB WEB Android etc】 Amazon ELBでSSL設定をしてみる
EC2インスタンス構築
これはアプリの世界。Web アプリケーションを構築する。ブラウザ→ELB→EC2 のうち、ELB→EC2部分が平文でいいならSSLのことは気にしない実装でOK。以下、気にしない前提です。
SSL証明書の発行
SSL証明書自体は AWS の設定とは関係ないので、知ってる人は飛ばしてだいじょぶです。AWS だからって特別なプロセスはとくにないです。
openssl で秘密鍵作成
openssl genrsa -out himistu.key 2048
-
openssl req -new -key himistu.key -out csr.pem
オプション項目などの入力も認証局によって異なるので、申請する認証局のドキュメントに従う。コモンネームについては 『FAQ - コモンネームに「www」をつける,つけないで何が変わりますか?』 を一読。
Q.コモンネームに「www」をつける,つけないで何が変わりますか?
A.SSLサーバ証明書の拡張領域「Subject Alternative Names(SANs)」の機能で、CSRに記載したコモンネーム(FQDN)が「www.domain_name」でも、www無しの「domain_name」でも利用出来ます。
CSRのコモンネーム(FQDN)でアクセス:https://www.domain_name
SANsに対応したブラウザではアクセス:https://domain_name
SANs対応ブラウザではどちらでも利用可能です。
※、但し、携帯電話のブラウザには、SANsに未対応がある為、この機能は使えません。CSRで指定したコモンネーム(FQDN)のみになります。最近のスマートフォンのブラウザでは一部対応しています。
2009年以前
SSLサーバ証明書は,ドメイン単位ではなくホスト名単位にて発行されます。そのため,「www」有りと無しのサイトでは,別のサイトとみなされます。
例えば,コモンネームをdomain_nameでお申し込み頂いた場合は,www.domain_nameにアクセスすると,セキュリティ警告が表示されます。
最終更新: 2012-06-12 10:26
作成者: MT Support
改定: 1.7
※よく読めばちゃんと書いてますがわたし勘違いしていた。コモンネーム はネイキッドではなく、www 付きで申請することで、最近のブラウザであれば上記のようにどちらのドメインでも SSL が使えるようになる。
わたしのばあい、GeoTrust の 証明書でして、オプション項目はメールアドレス、チャレンジレスポンス、オプショナルの会社名は未入力です。
GeoTrustのリンク GeoTrust - Knowledge Center - SSL Certificates Support
(e.g.)
Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:XXXXX Locality Name (eg, city) []:XXXXX-Shi Organization Name (eg, company) [Internet Widgits Pty Ltd]:XXXXX Inc. Organizational Unit Name (eg, section) []:Company Common Name (e.g. server FQDN or YOUR name) []:XXXXX.com Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:
-
GeoTrust ではメールに記述されていたサーバ証明書だけコピペしました。
参考URL
ELBのSSL設定とインスタンス設定
SSL証明書を登録する場合ちょっと手順が必要。
Create a New Load Balancer から Load Balancer Protocol で HTTPS を選択する。Instance Protocol は ELB → EC2 部分のことで、AWS内の通信を暗号化するかどうか。ここではやんないですが、やろうと思うとどうなるんでしょかね。公式ドキュメント書いてるですかね?
ひとまず、そこまで終わると Upload a new SSL Certificate がでてくるので次の情報を入力する。
name | value |
---|---|
Certificate Name | てきとうに |
Private Key | 秘密鍵。CSRをつくったときのやつ |
Public Key Certificate | サーバ証明書 |
Certificate Chain | 中間証明書(CA証明書) |
わたしは、中間証明書は ELB には登録してません。
※追記 ELB でSSL設定するとき Android は CA証明書をちゃんとインストールしないといけない。 そうじゃないとちゃんとした通信だと証明できないため、アイコンが汚れる。 Certificate Chain を入れる必要がある。
たとえばこんな。
中間CA証明書ダウンロード|リポジトリ / 利用規約|サポート|SSLサーバ証明書 ジオトラスト
【ジオトラスト クイック SSL プレミアム専用】中間CA証明書(三階層目)
あとの EC2 のインスタンスを ELB にひもづけるところは SSL ありなしに関係なく、単にELBにぶら下げるインスタンスを選択するだけなので割愛します。なお、ELB の疎通チェックは特殊な要件がない限り、HTTP で指定パスがレスポンス可能であるか、でいいと思います。
Route 53 でELBのドメイン名をAレコードで更新
レジストラから取得したドメインにおいて、参照ネームサーバを Route 53 の Delegation Set (もしくは NS レコードの VALUE)で表示されるものに変更しておくことが前提。ELB の設定ができたら Aレコード(ラジオボタンで ALIAS を選択)で ELB のドメイン名を設定。
よく忘れるのだれけども、ELB や S3 は Route 53 で設定できるが EC2 インスタンスは直接指定できないことに注意!
さいごに
ここまでできたら、dig domain a とかしてみて、ANSWER SECTION の IPアドレスとか確認してみたり、そのまま HTTPS を叩いてみてアクセスできたらOK. 503のばあいは、ELB から EC2 インスタンスが見つからない可能性あるので、ELB の Instances で Status が In Service になっているかチェックする。アプリ的なエラーはもう関係なし、ってなぐあいです。