CentOSあるいはEC2のapacheでSSL 自己証明書を発行する(https)

#あらすじ
先輩に教えてもらったサーバ構築の備忘録、SSLを発行し443ポートで見れるようにする。

##OpenSSL
暗号鍵の作成に使うライブラリです。

##mod_ssl
Apache httpd で HTTPS での接続を実現するために使うモジュールです。


##インストール

インストールしていきましょう、以降のターミナルの記述はrootユーザーでなければ頭にsudo を付けましょう

```
$ yum -y install mod_ssl
＃インストールが完了すると /etc/httpd/conf.d/ssl.conf に mod_ssl の設定ファイルが作成されます。

＃(CentOSのみ)
＄ yum -y install openssl

```
##秘密鍵・SSL証明書の作成
ec2の場合の作成場所は ~ です。本当は格納先で作りたかったのですが、sudoにしてもダメだったのであとでmvで引っ越します。

まずは、server.key という名前の秘密鍵が記載されたファイルを作ります。

```
[ec2-user@ip ~]$ openssl genrsa 2024 > server.key
Generating RSA private key, 2024 bit long modulus
............................+++
...............................................................................+++
```

次に証明書署名要求を作成します。
> 証明書署名要求は、認証局にサーバの公開鍵に電子署名してもらうよう要求するメッセージです。

```
[ec2-user@ip ~]$ 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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Oota-ku
Organization Name (eg, company) [Default Company Ltd]:test
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []test.net 
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

```
これでserver.csr というファイルが作成されました。

##サーバ証明書の作成
最後に本稿の成果物であるサーバ証明書を作成します。
>普通であれば上で作成した証明書署名要求 (server.csr) を VeriSign などの機関に送付して認証局の秘密鍵で署名してもらいますが、今回は自分で署名することでサーバ証明書を作成しますので、上で作成した自分の秘密鍵 (server.key) で署名します。

```
[ec2-user@ip ~]$ openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Oota-ku/O=test/CN=test.net
Getting Private key
```
これで三つのファイルができました。

```
[ec2-user@ip ~]$ ls
server.crt  server.csr  server.key
```

次にOpenSSLでつくられるファイルの格納先を作り,移動させましょう。

```
[ec2-user@ip ~]$ mkdir /etc/httpd/conf/ssl
[ec2-user@ip ~]$ mv server.crt /etc/httpd/conf/ssl
[ec2-user@ip ~]$ mv server.csr /etc/httpd/conf/ssl
[ec2-user@ip ~]$ mv server.key /etc/httpd/conf/ssl
[ec2-user@ip ~]$ ls /etc/httpd/conf/ssl
server.crt  server.csr  server.key
```

次にmod_ssl の設定ファイルを編集しましょう。

```
[ec2-user@ip ~]$ cd /etc/httpd/conf.d/
＃設定ファイルのバックアップ(.orgを付けてファイル複製)
[ec2-user@ip conf.d]$ cp ssl.conf ssl.conf.org

[ec2-user@ip conf.d]$ vim ssl.conf

#100行目にあるSSLCertificateFileを修正
SSLCertificateFile /etc/httpd/conf/ssl/server.crt
#10７行目にあるSSLCertificateKeyFileを修正
SSLCertificateKeyFile /etc/httpd/conf/ssl/server.key

#保存したら再起動
[ec2-user@ip conf.d]$ sudo systemctl restart httpd
```

再起動がうまくいけばhttps(443番ポート)で入れるようになったはずです。URLをhttps://に変えて入ってみましょう！もしうまくいかなければポートが解放されてるか確認してください。
<img width="226" alt="ff9e446a8ebd737906b0f779f630fa83.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281672/1ed8eaf9-7dc2-5dc4-4de5-e604dc14b06e.png">
こう変わっていれば成功です！個人で作った証明書なのでこんな表示になるわけですね。
詳細ボタンを押してアクセスするを選択して、httpの時と変わらないものが表示されればOKです！

これでhttpsが使えるようになりました！次はリバースプロキシというものを導入してみようかと思います。ではまた。

##参考文献
[OpenSSL で SSL 自己証明書を発行する手順](https://weblabo.oscasierra.net/openssl-gencert-1/)