ELBにサーバ自己証明書をインストールしWEBサーバにHTTPS通信をしてみた


ELBで書きたいネタ的にはラストでしょうか。
気が向いたら内部向けロードバランサの仕様について書くかもしれませんが・・・
まあ、とりあえずHHPSまで抑えておけばねｗ

---

###0.ゴール
HTTPS通信でSSL通信を行う。
これです。

まあ、意外とめんどくさいんですけどね、これ。
特にオレオレ証明書の用意とか・・・
そもそも暗号化技術についても少し知っておくべきだと思うので僕は[この記事を参考にしました](http://d.hatena.ne.jp/ozuma/20130510/1368114329)

####[Elastic Load Balancing の SSL 証明書](https://docs.aws.amazon.com/ja_jp/ElasticLoadBalancing/latest/DeveloperGuide/ssl-server-cert.html)一番下の参考を先に見るべきですが、ここを読めばやり方が書いてあります。

###1.証明書の準備
自分で検証するだけなのに認証局から買って・・・とか嫌ですね。いくら変態言われててもそこまでしたくないです。なので、自己証明書を使ってやってみましょう。

####1.1 サーバの準備
AmazonLinuxを使用します。もし立て方がわからなかったら[ここ](http://qiita.com/Yuki_BB3/items/367f050d5c5963c48e14)を参考にして作って戻ってきてください。

####1.2 自己証明書の作成
では、自己証明書を作っていきます。
__AmazonLinuxにSSHでログインができていることを前提とします。__

```bash:秘密鍵を作る
openssl genrsa 2048 > private-key.pem
```
カレントディレクトリに`private-key.pem`ファイルができていることを確認してください。

```bash:CertificateSigningRequest作成
openssl req -new -key private-key.pem > private-key.csr
```

__コマンドを実行すると対話形式で色々聞かれますEnter連打してください。__

カレントディレクトリに`private-key.csr`ファイルができていることを確認してください。

```bash:ｘ509自己証明
openssl x509 -req -signkey private-key.pem < private-key.csr > private-key.crt 
```
カレントディレクトリに`private-key.crt `ファイルができていることを確認してください。

***今回はSSL通信をELBで処理するのでEC2上のApacheに設定したりということはありません。
逆に、サーバ上でSSL通信を処理したい場合はサーバ上のApacheに証明書を登録してあげてください。***

---

###2.証明書のインストール
では先ほど作成した証明書をELBにインストールしていきたいと思います。
これを読んでる方はELBの作成にこまる方ではないと思いますが、ELBの作り方が微妙な場合は[これ](http://qiita.com/Yuki_BB3/items/7481292bd31f8516ae0f)を参考に確認して戻ってきてください。

![スクリーンショット_2015-10-12_15_59_19.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/682573c0-7e3e-1739-b2a6-9b719d8cf4c3.jpeg "スクリーンショット_2015-10-12_15_59_19.jpg")

HTTPS通信をHTTP（EC2）へ転送する設定を追加するところが異なります。

![スクリーンショット_2015-10-12_16_02_37.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/d2c6b36e-32b7-24a2-70cd-e0f623a7c91c.jpeg "スクリーンショット_2015-10-12_16_02_37.jpg")

同様にSGにもHTTPS通信を許可するようにしてください。
__この設定だとHTTPも許可しちゃってるのでほんとんHTTPSって思うかもしれません。そういう場合はHTTPを外してみてください。__

![スクリーンショット_2015-10-12_16_25_35.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/de1e6686-0ebd-b3dd-50b1-aac6f3eb0bb4.jpeg "スクリーンショット_2015-10-12_16_25_35.jpg")

証明書をアップロードします。
- __証明書名__：この証明書の名前を入力します。server.crtとしましたが、先ほど自分で作った自己証明書のファイル名で問題無いです。
- __プライベートキー__：RSA秘密鍵をcatしてファイルの内容を表示します。その後、`-----BEGIN RSA PRIVATE KEY-----`から`-----END RSA PRIVATE KEY-----`までそのままコピペしてください。
- __パブリックキー証明書__：今回は空欄で良いです。本物買った際にはなんかあるんだと思います。ちなみに、自己証明書を貼っても成功しました。

![スクリーンショット_2015-10-12_16_33_57.jpg](https://qiita-image-store.s3.amazonaws.com/0/52141/defeb794-4ee1-dda9-c2b6-281c3551ceff.jpeg "スクリーンショット_2015-10-12_16_33_57.jpg")

`https://<ELBのDNS名>`でアクセスすると上記の警告が出て、アクセスに成功します。

---

###3.おわり
思ったより書いてて時間かかりました。
以前から1回やろうと思っててやってなかったので良い機会でした〜

---
###参考

[opensslでRSA暗号と遊ぶ](http://d.hatena.ne.jp/ozuma/20130510/1368114329)
[オレオレ証明書をopensslで作る（詳細版）](http://d.hatena.ne.jp/ozuma/20130511/1368284304)
[【初心者向け】ELBにSSL証明書をインストールする](http://dev.classmethod.jp/cloud/aws/aws-beginner-elb-ssl/)
[自己署名証明書でAmazon ELBのHTTPS接続を使用する。](http://blog.katty.in/3107)
[AWS で自己署名証明書を使ってみる](http://akiyoko.hatenablog.jp/entry/2015/05/24/234148)

---

###番外.RSA鍵（opensslコマンド）
[opensslでRSA暗号と遊ぶ](http://d.hatena.ne.jp/ozuma/20130510/1368114329)でやってみたコマンドのメモです。
完全に僕の備忘録。


```bash:秘密鍵を作る
openssl genrsa 2048 > private-key.pem
```

```bash:作った秘密鍵から公開鍵を作る
openssl rsa -pubout < private-key.pem > public-key.pem
```

__RSA鍵__
- 秘密鍵：2つのくっそでかい素数でその2つの積を出してる
- 公開鍵：積だけしってる。→その積だ出せる2つの素数（秘密鍵）知ってるってことはお前大丈夫だな
→実際はちょっと違うけどニュアンス的にこんなイメージを持っておくことにした。

期間を自身で設定する自己証明にする＜-days＞オプション

```bash:自己証明書作成
openssl x509 -req -days "期間日にち単位” -signkey "秘密鍵" < "秘密鍵から作った認証局署名付きファイル" > server.crt 
```