既存のAmazon ELBにSSL証明書を導入してHTTPSを使えるようにする。

今Amazonクラウドでサービスを運営していて、現在はHTTPだけのところを、セキュリティのためにHTTPSを導入したいと思いました。

ちょっと試行錯誤しながらですがちゃんと導入できたようなので、メモしておきます。

ロードバランサに証明書を入れる

Webサーバが複数あるので、全てのインスタンスに証明書を導入する必要があるかと思いきや、ロードバランサにだけ入れるということができるそうです。

Amazon ELBでSSL設定をしてみる

要するに、HTTPSでのアクセスをロードバランサで受けて、各Webサーバインスタンスに80ポートに貫通させるということ。
しかも、これならWebサーバ自体HTTPのままなのでmod_sslとか入れなくて良いので、いろいろと楽です!

鍵の生成

opensslコマンドで鍵を生成します。

$ openssl genrsa 2048 > private-key.pem
Generating RSA private key, 2048 bit long modulus
..............................................................................+++
.....+++
e is 65537 (0x10001)
$ openssl req -new -key private-key.pem -out csr.pem
You are about to be asked to enter information that will be incorporated
into your certificate request.
...()...
$ cat csr.pem 
-----BEGIN CERTIFICATE REQUEST-----
...()...

こうしてできたCSRを、認証局に送ってサーバ証明書を発行してもらいます。SSL証明書は、数千円のものから数十万円のものまでありますが、用途に合わせて選びます。

CSRとは、Corporate Social Responsibilityではなくて、Certificate Signing Requestです。

新規のELBにHTTPSを導入

新しくロードバランサを立ち上げる場合は、Amazon Management Consoleからでも、簡単にHTTPSの設定ができます。

しかしながら、既に作成したELBでは、この方法が使えません。そして、おそらくAmazon Management Consoleからは、そのあたりのことは操作することができません。

Command Line ToolでELBにHTTPSを追加

ブラウザ上からはできないのですが、コマンドラインからならできるようです。

ELBでHTTPS(SSL証明書)の設定方法

まずは、証明書をアップロードします。
(IAM Command Line Toolkitのダウンロード→http://aws.amazon.com/developertools/4143)

$ iam-servercertupload -b hostcert.pem -k private-key.pem -s newCert -v --aws-credential-file account-key 
arn:aws:iam::************:server-certificate/newCert
XXXXXXXXXXXXXXXXXXXXX

続いて、ELBに設定するのですが、なにやら怒られました。
(Elastic Load Balancing API Toolsのダウンロード→http://aws.amazon.com/developertools/2536)

$ elb-set-lb-listener-ssl-cert myelb-lb --lb-port 443 --cert-id arn:aws:iam::************:server-certificate/newCert --region ap-northeast-1 --aws-credential-file account-key
elb-set-lb-listener-ssl-cert:  Malformed input-There is no configured listener for load balancer
 'myelb-lb' on port [443]
Usage:
elb-set-lb-listener-ssl-cert
        LoadBalancerName  --lb-port  value  --cert-id  value  [General Options]
For more information and a full list of options, run "elb-set-lb-listener-ssl-cert --help"

どうも最初にHTTPSの443ポートを開けていないといけないようです。そこで、443ポートをあけてやるようにします。

$ elb-create-lb-listeners myelb-lb --listener "protocol=https,lb-port=443,instance-port=80,cert-id=arn:aws:iam::************:server-certificate/newCert" --region ap-northeast-1 --aws-credential-file account-key
OK-Creating LoadBalancer Listener

こちらのコマンドで一発オーケー。Amazon Management Consoleで見ても、443ポートから80ポートにポートフォワーディングされています。

ブラウザで開いてみる

実際に、 https://example.com でアクセスをしてみると、ちゃんとHTTPSで接続ができ、中身はHTTPでアクセスした時と同じものが表示されました。

About katty0324

One comment

Leave a Reply

Scroll To Top