エンジニアブログ

四苦八苦しながらELBにSSL証明書をアップロードした話

2016.07.01

batchiです。

弊社の商号が変わるにあたり、
ホームページのURLも変更になります。

その対応において何度か壁にぶちあたったので、
備忘録も兼ねて記しておきます。

変更前の構成

ざっくり言うとこのような構成です。

変更前の構成

第一の壁:同一ポートでリスナーを作成できない

当初想定していた変更後の構成は下記のようなイメージ。

変更後の構成1

1つのELBで、同一のポートを用いたリスナーの作成は出来ないと怒られました。

ポートの重複

というわけで、下記のような構成に変更します。

変更後の構成2

第二の壁:デュアルアクセス付きのSSL証明書を取得しそこねる

SSL証明書によっては、
www.simpline.co.jpで取得したSSL証明書が、
simpline.co.jpにも有効になります。

それをデュアルアクセスと言うらしいのですが、
逆は適用されないようです。

僕はというと、
しっかり「www」なしのsimpline.co.jpで取得していたため、
改めて証明書を取得し直すことにしました。

第三の壁:ELBに証明書がアップロードできない(秘密鍵にパスフレーズ)

SSL証明書の発行を依頼する際には、
CSR(Certificate Signing Request)と呼ばれる署名リクエストを作成する必要があります。

CSRを作成するにあたっては、秘密鍵を作成する必要があります。
ここで、ELBにアップロードする証明書に関して、
秘密鍵にパスフレーズを設定してはいけないそうなのですが、
そんなことを知らない僕はばっちりパスフレーズを設定していました。
怒られました。

SSL 証明書をアップロードできませんでした: Unable to parse key; the body is encrypted.

再び証明書を取得し直すことにしました。

http://docs.aws.amazon.com/ja_jp/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html#create-certificate

おとなしくドキュメントに載っているコマンドで作成したほうが確実です。

#秘密鍵の作成
openssl genrsa -out my-private-key.pem 2048

#CSRの作成
openssl req -sha256 -new -key my-private-key.pem -out csr.pem

第四の壁:ELBに証明書がアップロード出来ない(CLIじゃないと)

さすがにそろそろ大丈夫だろうとアップロードを試してみると、
まだ怒られました。

ELB ポートのリスナーを作成できませんでした server certificate not found the key

このエラーで検索をかけると類似の事象は多く起こっているようで、
「マネジメントコンソールではダメでCLIで叩けばうまくいく」というケースが多いようでした。

中には、「ELBとバックエンドのEC2間の疎通が80と443両方開いていればうまくいく」
という情報もありましたが、今回は、その通り設定しても、
さらにはすべてのトラフィックを許可しても、相変わらずエラーが出続けます。

以前入れた時はうまくいったのに…と思いつつも、
らちが明かないのでCLIでアップロードすることにします。

http://docs.aws.amazon.com/ja_jp/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html#upload-cert

aws iam upload-server-certificate --server-certificate-name ①my-server-cert 
--certificate-body ②file://my-certificate.pem --private-key ③file://my-private-key.pem 
--certificate-chain ④file://my-certificate-chain.pem

①マネジメントコンソール上でも表示される、証明書に付けてあげる名称です。
②CAから発行された証明書です。
③CSR作成時に作成した秘密鍵です。
④CAから発行されたチェーン証明書です。中間証明書とも言います。

今回僕が証明書の発行を依頼したCAは、
②と④の部分をメールに平文で送ってきたのですが、
それをサクラエディタでpem形式で保存することでうまくいきました。

アップロードがようやくうまくいったので、
「AWS Identity and Access Management (IAM) から、既存の証明書を選択する」を選択し、
「修了書」のプルダウンから①で指定した名称の証明書を選択すれば、
ようやくHTTPSリスナーの設定が完了です。

証明書の選択

途中から、あれ?ACM(AWS Certificate Manager)ってこういう時に使うんじゃないか?
という考えが頭をよぎり始めましたが、
なまじ苦労したので、気づかないふりをしておきました。

こちらからは以上です。

関連キーワード

この記事をシェアする

Facebook Twitter LINE はてなブックマーク

この記事を読んだ方に
おすすめの記事