AWS Certificate Managerでオレオレ証明書をインポートする

# プライベートルート証明書・中間証明書・サーバ証明書の作り方
## 環境
- OS: Amazon Linux
- 証明書のインポート先: AWS Certificate Manager

## 準備

Amazon Linux上で以下を発行する。

```bash:準備
$ sudo su
# cd /usr/local/etc
# mkdir ca
# chmod 600 ca
# cd /usr/local/etc/ca
```
## プライベートルート証明書の作成

まずは最上位のルート証明書から作っていきます。

```bash:プライベートルート証明書の秘密鍵(ca.key)の作成
# cd /usr/local/etc/ca
# openssl genrsa -out ca.key -des3 2048

Enter pass phrase for ca.key:(ca.keyのパスフレーズ)

Verifying - Enter pass phrase for ca.key:(ca.keyのパスフレーズ)[確認]
```

有効期間を10年間（3650日）に設定。

```bash:ルート証明書(ca.pem)の作成
# openssl req  -new -x509 -key ca.key -sha256  -days 3650 -extensions v3_ca  -out ca.pem  -subj "/C=JP/ST=Tokyo/O=example corp./CN=example root 2019"
Enter pass phrase for ca.key:(ca.keyのパスフレーズ)
#
```
## 中間証明書の作成

```bash:中間証明書の秘密鍵(inca.key)の作成
# openssl genrsa -out inca.key -des3 2048

Enter pass phrase for inca.key:(inca.keyのパスフレーズ)
Verifying - Enter pass phrase for inca.key:(inca.keyのパスフレーズ[確認])
```

```bash:中間証明書のCSR（inca.csr）の作成
# openssl req -new -key inca.key -sha256 -outform PEM -keyform PEM -out inca.csr  -subj "/C=JP/ST=Tokyo/O=example corp./CN=example Inter CA 2019"
Enter pass phrase for inca.key:(inca.keyのパスフレーズ)
```

```bash:中間証明書のための設定ファイルの作成
# vi openssl_sign_inca.cnf
[ v3_ca ]
basicConstraints = CA:true, pathlen:0
keyUsage = cRLSign, keyCertSign
nsCertType = sslCA, emailCA
```

下の方でも書きますが、AWS Certificate Managerは↓を使います。
有効期間を10年間（3650日）に設定。

```bash:中間証明書(inca.pem)の作成
# openssl x509 -extfile openssl_sign_inca.cnf -req -in inca.csr -sha256 -CA ca.pem -CAkey ca.key -set_serial 01  -extensions v3_ca  -days 3650 -out inca.pem
```

## サーバ証明書の作成

下の方でも書きますが、AWS Certificate Managerは↓を使います。

```bash:サーバ証明書の秘密鍵(server.key)の作成
$ openssl genrsa 2048 > server.key
```

```bash:サーバ証明書のCSR（server.csr）の作成
# openssl req -new -key server.key -outform PEM -keyform PEM  -sha256 -out server.csr  -subj "/C=JP/ST=Tokyo/O=example corp./CN=vpn.example.com"
```

下の方でも書きますが、AWS Certificate Managerは↓を使います。
有効期間を10年間（3650日）に設定。

```bash:サーバ証明書（vpn.pem）の作成
# openssl x509 -req -in server.csr -sha256 -CA inca.pem -CAkey inca.key -set_serial 01 -days 3650 -out vpn.pem
Enter pass phrase for inca.key:(inca.keyのパスフレーズ)
```

# AWS Certificate Managerにインポート

![20190806_AWS_CertificateManager_01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353055/ac851c72-dd7c-dc11-ff41-5ef190fa67d7.png)

「Import a certificate」を押下。

![20190806_AWS_CertificateManager_02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/353055/638fca3a-7fdd-4b95-820c-111e55a7e08a.png)

「Certificate body」にサーバ証明書（vpn.pem）の中身を張り付け。

```bash:サーバ証明書（vpn.pem）の中身
# cat vpn.pem
-----BEGIN CERTIFICATE-----
(省略)
-----END CERTIFICATE-----
```

「Certificate private key」にサーバ証明書の秘密鍵(server.key)の中身を張り付け。

```bash:サーバ証明書の秘密鍵(server.key)の中身
# cat server.key
-----BEGIN RSA PRIVATE KEY-----
(省略)
-----END RSA PRIVATE KEY-----
```

「Certificate chain」に中間証明書(inca.pem)の中身を張り付け。

```bash:中間証明書(inca.pem)の中身
# cat inca.pem
-----BEGIN CERTIFICATE-----
(省略)
-----END CERTIFICATE-----
```

「Review and import」→「import」を押下して、証明書作成！
これをロードバランサにアタッチするのも可能です！

# 参考URL
- [プライベートルート証明書・中間証明書・サーバ証明書の作り方](https://http2.try-and-test.net/openssl_simple_ca.html)
- [オレオレ証明書をopensslで作る（詳細版）](https://ozuma.hatenablog.jp/entry/20130511/1368284304)

上記の参考URLは素晴らしく詳しく書いて下さっているので、コマンドだけでなく、ちゃんと内容を理解したい方は参考URLを見てください。

## コメント
ドメインさえ持っていれば、AWS Certificate Managerで無料でSSL証明書を発行できるのだが、
個人でお試しでSSL証明書を発行する時にわざわざドメイン発行したくないよねってことで、オレオレ証明書の作り方を記しました。
無料でドメイン発行できたりするサービスもあるんだけど、今回はそこまでしなくていいやーとゆるい感じのメモ書きです。
あと、「Certificate private key」にパスワード付きの秘密鍵を作って貼ろうとしたら、「The certificate private key provided is not in a valid PEM format. Learn more.」と怒られる。。。
多分、秘密鍵の中にProc-TypeやDEK-Infoが入っているのがいけないんだろうなと推測のみ。。。