EC2、ELB、Route 53 + SSL

EC2、ELB、Route 53 + SSL

EC2あたりの設定もろもろ

複数のWebサーバとしてEC2インスタンスを作成し、ELBで負荷分散させる。アクセスにはSSLも使う場合の設定について。SSLなしならわかりやすくまとまってるサイトがあるので差分を埋めるつもりでメモ。

参考サイト

EC2インスタンス構築

これはアプリの世界。Web アプリケーションを構築する。ブラウザ→ELB→EC2 のうち、ELB→EC2部分が平文でいいならSSLのことは気にしない実装でOK。以下、気にしない前提です。

SSL証明書の発行

SSL証明書自体は AWS の設定とは関係ないので、知ってる人は飛ばしてだいじょぶです。AWS だからって特別なプロセスはとくにないです。

  1. openssl で秘密鍵作成

     openssl genrsa -out himistu.key 2048
    

    鍵長に注意。SSL証明書を申請する認証局のドキュメントに従う。

  2. openssl で秘密鍵より CSR 作成

     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 []:
    
  3. CSR認証局に登録

  4. サーバ証明書と中間証明書を取得(秘密鍵とあわせて3つ)

    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 になっているかチェックする。アプリ的なエラーはもう関係なし、ってなぐあいです。