Amazon ELBでSSL設定をしてみる
SSL証明書も取得したので、HTTPS通信できるようにしたい!!
でっ、AWSの場合どうするのか。
ELBのSSL設定という題にしたにもかかわらず、どんな仕組みかあまり理解していないので一緒にお勉強しましょう。
AWS Elastic Load BalancingによるSSL Terminationのサポートを発表
通常の場合、WEBサーバにSSL証明書をアップロードする必要がある。
複数台サーバ使う場合も、それぞれのインスタンスで暗号化、復号化処理をしているので、各々負荷がかかる。
つまり、EC2を複数スケールアウトする場合、EC2それぞれにSSL証明書をアップしないといけなかった。
しかし、ELBでSSL Termination(HTTPSの暗号化と復号化のプロセス)の設定をすると、各インスタンスにSSL証明書をアップする必要がない。
ユーザはAWSアカウントに証明書をアップロードするだけで、あとはロードバランサへの配布などの処理はAWSがやってくれちゃう!
すげー、便利じゃん!!
ちょっと、感動(涙)
では、やり方もメモしておこうっと。
以前、HTTP(ポート80)のELBを作成したんだけど、マネジメントコンソール上からだと、ポートの追加や証明書の変更等はできないみたい。
(AWSのことだから、いずれできるようになると思うけど)
コマンドラインツールならできるらしいけど、大変そうなので、新規に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)
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"を利用
でっ、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"を利用
- 関連記事