自己署名証明書でAmazon ELBのHTTPS接続を使用する。

WEBサービスの通信を安全にするために、HTTPSを使って通信経路を暗号化する場合があります。Amazon ELBには、SSL Terminationという機能があり、これを使うと簡単にHTTPSが使えるようになります。
Elastic Load Balancing
SSL Terminationを使うと、WEBサーバではなくロードバランサがHTTPS接続を受け、裏側にいるWEBサーバは単にHTTPリクエストを処理すれば済むようになります。
随分前のブログで少し怪しいですが、「既存のAmazon ELBにSSL証明書を導入してHTTPSを使えるようにする。」では、SSL証明書を購入してELBに導入しました。(ちなみに、現在はManagement Consoleからでも既存のELBに導入することできます。)

証明書を買うお金がない

本番環境はともかくとして、開発環境、ステージング環境などのためにひとつずつ証明書を買うのは、金銭的に辛いものがあります。
そこで開発環境では、自己署名証明書で済ませてしまおう思います。
証明書の作り方は、「Apache/SSL自己証明書の作成とmod sslの設定」を参考にしました。
自己署名証明書は、オレオレ証明書とも呼ばれるそうですが、ブラウザでアクセスすると警告が出てしまうので、実際の運営では使えません。

秘密鍵とCSRの作成

まずは、秘密鍵を生成します。

$ openssl genrsa -aes128 2048 > server.org
Generating RSA private key, 2048 bit long modulus
..........................................................................................+++
........+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:

Amazon ELBのSSL Terminationは、秘密鍵に鍵がついていると使えないので、鍵をはずします。

$ openssl rsa -in server.org > server.key
Enter pass phrase for server.org:
writing RSA key

秘密鍵を元に、CSRを作成します。CSRは、Certificate Signing Requestの略で、認証局への証明書の要求が記述されたファイルです。

$ openssl req -new -key server.key > server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo-to
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Inc.
Organizational Unit Name (eg, section) []:
Common Name (eg, YOUR name) []:development.example.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

自分で署名する

通常のフローでは、このCSRを認証局に署名してもらって、SSL証明書を獲得します。
今回は、お金を使いたくないので、このフローの代わりに、自分で署名をします。

$ openssl x509 -req -days 365 -in server.csr -signkey server.key > server.crt
Signature ok
subject=/C=JP/ST=Tokyo-to/O=Example Inc./CN=development.example.com
Getting Private key

ELBに設定する。

あとは、秘密鍵と証明書をAmazon ELBに設定します。今は、Management Consoleから設定できるので楽です。

$ cat ./server.key
# ...(略)...
$ cat ./server.crt
# ...(略)...


これで、警告は出るものの、HTTPSで繋げるようになります!

コメント

タイトルとURLをコピーしました