日々学んだことを残しておこう。きっと未来の自分が探しにくる。 (ただ忘れっぽいだけです…)

Amazon ELBでSSL設定をしてみる


SSL証明書も取得したので、HTTPS通信できるようにしたい!!
でっ、AWSの場合どうするのか。
ELBのSSL設定という題にしたにもかかわらず、どんな仕組みかあまり理解していないので一緒にお勉強しましょう。

ELBのSSL Terminationのサポートって何がすごいの?


AWS Elastic Load BalancingによるSSL Terminationのサポートを発表

通常の場合、WEBサーバにSSL証明書をアップロードする必要がある。
複数台サーバ使う場合も、それぞれのインスタンスで暗号化、復号化処理をしているので、各々負荷がかかる。
つまり、EC2を複数スケールアウトする場合、EC2それぞれにSSL証明書をアップしないといけなかった。
しかし、ELBでSSL Termination(HTTPSの暗号化と復号化のプロセス)の設定をすると、各インスタンスにSSL証明書をアップする必要がない。
ユーザはAWSアカウントに証明書をアップロードするだけで、あとはロードバランサへの配布などの処理はAWSがやってくれちゃう!

すげー、便利じゃん!!
ちょっと、感動(涙)


では、やり方もメモしておこうっと。
以前、HTTP(ポート80)のELBを作成したんだけど、マネジメントコンソール上からだと、ポートの追加や証明書の変更等はできないみたい。
(AWSのことだから、いずれできるようになると思うけど)
コマンドラインツールならできるらしいけど、大変そうなので、新規にELB作成してみます。

SSL TerminationをELBで行う手順


AWSコンソール

EC2タブクリック

LoadBalancersクリック

Create Load Balancerクリック

ELBの名前作成して、プロトコルにHTTPS(ポート443)追加。
この時、Load Balancer ProtocolとInstance Protocolがあるんだけど、
Load Balancer ProtocolはELBまでの通信プロトコルで、Instance ProtocolはELBからEC2インスタンスまでの通信プロトコル。
通常、悪い人からの通信を守るにはLoad Balancer ProtocolをHTTPSにすれば問題なさそう。
Amazon内部通信もセキュアにって思う人はInstance ProtocolもHTTPSにすればなお安心。
このあたりは処理速度も考慮してトライアンドエラーで選べば良いか。
ひとまず、Load Balancer ProtocolをHTTPSにしてsavaクリックしてcontinueクリック

Upload a new SSL Certificate と入力欄現る。
ここはHTTPのみの時には無かった。

Certificate Name→適当な名前を付ける。
Private Key→ドメイン.keyファイルの中身をまるごとコピー。(サーバ用秘密鍵ファイルの中身)
ヘッダー・フッターは以下。
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
Public Key Certificate→.crtファイルの中身をまるごとコピー。(証明書ファイルの中身)
ヘッダー・フッターは以下。
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
Certificate Chain→.chainファイルの中身をまるごとコピー。(中間CA証明書ファイルの中身)
ヘッダー・フッターは以下。
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

私の場合、実はここでちょっとしたエラーが発生(後ほど解説)
エラーなければそのまま進む。

continueクリック

SSL ciphersの選択
ちょっとよく分からないのでひとまず、デフォルトにしておこうか。

ヘルスチェックのオプション設定

ELBの下にぶら下がるEC2インスタンスを選択

Createで完成


ちょっとハマったところ


エラー出なかった人はこの部分は軽く流して下さい。
秘密鍵を入力した時こんなエラーが発生した。(部分)
Invalid Private Key.
ん??なんで。。。
他のサイトとかいろいろ調べて、なんか違うところ発見。
紹介サイトの秘密鍵の中身のヘッダーを見ると、
-----BEGIN RSA PRIVATE KEY-----
になっているのに、私の秘密鍵は
-----BEGIN PRIVATE KEY-----
になっている。
この違いは関係あるのか、無いのか。。
CSR作成代行とかも代理店にお願いしていてほとんど詳しい仕組みを理解していなかった。。。

ここから、私のSSLの勉強始まる。
関連サイト読みあさった結果、こんなヒントが。

各形式の見分け方?

PKCS#8形式?
秘密鍵っていろいろな形式があるのか。

結局SSL販売代理店に問い合わせたら、最初に作成していた秘密鍵は「PKCS#8」規格に準拠したフォーマットだった。
再度作る時は、-----BEGIN RSA PRIVATE KEY-----になるようにしてくれて解決。
時々、「PKCS#8」規格フォーマットでダメなサーバがあるとのことでした。
ちなみに変換のしかたは「OpenSSL」使えば、変換できるそうです。(私はやってもらった)
openssl rsa -in 変換前秘密鍵のファイル名 -out 変換後秘密鍵のファイル名

ELBの詳細があまり不明なので、断言できないけど、私の使用したELBでは「PKCS#8」規格フォーマットはダメでしたってことです。

最初は、あまりにブラックボックスだったので、質問するにもどのように説明していいか分からなかった。
必死に調べたので、逆にちょっと勉強になって良い経験だったな。
(解決したからこんな風に言えるけど、調査の最中は愚痴いってました。。。)

ちなみにSSLを理解するのに役だったサイトの紹介
SSL/TLS の導入 (1)


Alias DNS Nameの変更


route53が今週からマネジメントコンソールで操作できるようになったので早速使ってAlias DNS Nameを変更してみる。
AWSマネジメントコンソール

route53クリック

Domain Nameにmydomain.com.があるのでダブルクリック。(ダブルクリックがちょっと意外)

Type Aをクリック。

Alias DNS Nameに古いELB(SSL対応する前)がセットされているので、SSL対応のELBのELB DNS Nameをコピー。
(ELBのDNS NameのAレコードをコピーして末尾にピリオド付ける)注意点として、最後にピリオドありますよ。
xxxxxxxx.ap-northeast-1.elb.amazonaws.com.

Save Record Setクリック

DNSが浸透するまでちょっと待って
https://サイト名
ってやると、ちゃんとブラウザがhttpsの様式に。

認証局にアルファSSLの文字が

なんとかSSL設定できた!!


(参考サイト)
ELBでのSSL Terminationの利用とアクセス制御
ELBについてとことん理解する
Route53の新機能によって解決したELBの大きな問題
ELBの"SSL Termination"を利用
関連記事

2011-11-20 : AWS : コメント : 0 : トラックバック : 0
Pagetop
コメントの投稿
非公開コメント

Pagetop
« next  ホーム  prev »

カテゴリ

openclose

ブログ内検索

ブログパーツ