WEB

AWSのELBでSSLの証明書を設定する方法(2015年5月版)

AWSのELBでSSLの証明書を設定する方法(2015年5月版)

こんにちは、まろCです。突然のお別れを経験しました。これだから出会うことを思い出にしたくないんです。いつも最後が悲しいのはもう嫌です。

さて、本日はタイトルのとおり、AWSのELBでSSLの証明書を設定する事例がありましたのでそのログを記事にしたいと思います。
僕はフロントエンドエンジニアなのですが、その案件ではインフラ、バックエンド、フロントと全部担当しました。AWS自体はさわっていたのですが、久しぶりでした。

コンソールが変わっていたり日本語を選択できたりしていたので、いろいろメモを残しておきたいと思い、今回記事にしました。AWSをさわる方のTipsになれば幸いです。

早速流れを追ってみましょう。

秘密鍵とCSRの生成

ELB用にパスフレーズなしのCSRを生成します。実際ELB配下に設置するEC2上で、秘密鍵から作っていきましょう。サーバーはAmazon Linuxを選択しました。

以下を順に実行していきます。
鍵の名前(XXXXXX)はプロジェクト名などにすると調子がいいでしょう。

  • 秘密鍵の作成
$ openssl genrsa -des3 -out XXXXXX.key.pem 2048
  • パスフレーズを削除
$ openssl rsa -in XXXXXX.key.pem -out XXXXXX.key_np.pem
  • CSRを生成
$ openssl req -new -key XXXXXX.key_np.pem -out XXXXXX.csr.pem

証明書の購入

ここは各業者により方法が異なりますので省略します。
どの業者でもさきほど生成したCSRが必要ですので、以下のコマンドで表示してコピーしておきましょう。

$ cat XXXXXX.csr.pem

ELBへの設定

CSRと証明書がそろったら、AWS management consoleからELBを立ち上げていきましょう。

ELBの作成

スクリーンショット 2015-06-01 12.40.52

EC2のコンソールからELBを作成します。EC2のサイドバーに「Load Barancers」とありますのでそこをクリックします。

 
スクリーンショット 2015-06-01 12.43.10

左上の「Create Load Balancer」をクリックします。

 
スクリーンショット 2015-06-01 15.16.04

「Load Balancer name」に任意の名前を入力します。
「Load Balancer Protocol」にHTTPS の443を追加するために「Add」をクリックします。プルダウンから「HTTPS(Secure HTTP)」を選択します。

選択したら、「Next: Assign Security Groups」をクリックして次に進みます。

セキュリティグループの設定ですが、今回は「elb-default」を選択します。
選択したら、「Next: Configure Security Settings」をクリックして次に進みます。

 
スクリーンショット 2015-06-01 12.48.30

ここから取得した証明書を設定していきます。

「Certificate Type」は「Upload a new SSL Certificate」を選択します。
「Certificate Name: 」には任意の文字を入力します。ドメイン名にしておくと良いでしょう。
「Private Key: 」はパスフレーズを削除した秘密鍵です。今回のパターンでは「XXXXXX.key_np.pem」をcatコマンドなどで表示させたものを貼り付けます。
「Public Key Certificate: 」には購入した証明書を貼り付けます。
「Certificate Chain: 」には購入した中間CA証明書を貼り付けます。
その下の「Select a Cipher」はそのままで次に進みます。

入力が完了したら、「Next: Configure Health Check」をクリックして次に進みます。

 
スクリーンショット 2015-06-01 15.31.02

「Ping Protocol」はELBからEC2のどのポートにチェックをしにいくかの設定ですので、今回はhttpの80番ポートを設定しておきましょう。

「Ping Path」はチェックするURLです。
今回は「Ping Path」を「/」にしたのですが、indexページにhttp->httpsのリダイレクト設定を指定したために、すぐチェックがコケてハマってしまいました。
そのため、check用のURL(/check)をつくることで回避しました。

あとは、インスタンスを追加して作成すれば完了です。

まとめ

多少つまずいていろいろ調べたのですが、意外とすっきりまとまりました。

ちなみにWebサーバーはnginx、バックエンドはnode.jsで組みました。静的なファイルはS3に配置しています。予算の関係でcloud frontは使いませんでした。

やっぱりAWSはいいですね。使いやすいです。
ですが、初期のころ英語のみのコンソールでさわっていた者としては、日本語のコンソールに違和感を覚えたり。。。

それでは。

 

【AWSで開発中なら】

この記事を書いた人

まろ
まろ フロントエンドエンジニア 2014年入社
フロントエンドエンジニアのまろCです。
コンセプト設計中心でものづくりしています。