自己署名ルート証明書（オレオレ証明書）を使ってssl化、httpからhttps、Apache2.4

Webサイトのssl化（https）がどんなものかを試したかったので、オレオレ証明書でやってみました。
環境はec2、amazon linux2、Apache/2.4.41

#### 参考
[httpsの設定とオレオレ証明書(自己署名証明書)の作成](https://qiita.com/miqpim/items/911aa34e128950ec2d09)
ほぼこちらのサイト通りにやっていきました。

#### 実際にやったこと

mod_sslをインストールします。自分の環境ではopensslは最初から入っていました。

```
$ sudo yum -y install mod_ssl
```

mod_sslをインストールした時点で、/etc/httpd/conf.d/ssl.confファイルが作成され、apacheを再起動したら(reloadではダメでrestartしないとできなかった)、「https\://IPアドレス」でhttpsアクセスできるようになる。
ただもちろんですが、ブラウザでアクセスすると保護されていない通信という警告が出ます。

次に秘密鍵の作成。パスワードは任意で。
（以後、sudo teeを使って"|"(パイプ)に渡していますが、rootになってから進めていってもいいと思います）

```
$ cd /etc/httpd/conf
$ openssl genrsa -aes128 1024 | sudo tee server.key
Generating RSA private key, 1024 bit long modulus
............++++++
......................................++++++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
-----BEGIN RSA PRIVATE KEY-----
```
次にCSRの作成。最初に求められるパスワードは最初に入力したパスワード。

```
$ openssl req -new -key server.key | sudo tee server.csr
Enter pass phrase for server.key:
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]:Bunkyoku
Organization Name (eg, company) [Default Company Ltd]:エンター
Organizational Unit Name (eg, section) []:エンター
Common Name (eg, your name or your server's hostname) []: [IPアドレスかドメインを入力]
Email Address []:エンター

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

上で作成した秘密鍵とCSRから証明書の作成。パスワードは最初に入力したパスワード。

```
$ openssl x509 -in server.csr -days 36500 -req -signkey server.key | sudo tee server.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Nerima/O=Default Company Ltd/CN= [入力したIPアドレスかドメイン]
Getting Private key
Enter pass phrase for server.key:
```

ssl.confで証明書の設定。2行編集します。作成した秘密鍵と証明書のパスを指定する。

```
$ sudo vi /etc/httpd/conf.d/ssl.conf 
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key
```

これで設定は完了しましたが、apacheを再起動するとパスワードを求められるので、パスワードを毎回入力することをやりたくないなら、下のコマンドを実行してパスワード入力を解除します。

```
$ sudo mv server.key server.key.bak
$ openssl rsa -in server.key.bak | sudo tee server.key
Enter pass phrase for server.key.bak:パスワードを入力
writing RSA key
```

これでapacheを再起動すれば再度httpsアクセスできるはずです。
ブラウザで証明書を確認してみると、こんな感じです。
<img width="427" alt="自己署名ルート証明書のテスト.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/622000/f16cae5e-8902-8059-d036-962696baa602.png">


あと、CSRを作成する際、Common NameでIPアドレスを入力しましたが、IPアドレスに対応するドメインを入力してもhttpsアクセスできました。
オレオレ証明書の場合、Common Nameには全く関係のない適当なIPアドレスやドメインを入力してもhttpsアクセスはできるね。そして、証明書にその入力した適当なIPアドレスやドメインが署名されてる。


あと、CSRを作成する際、適当にOrganization Name、Organizational Unit Name、Email Addressを入力したら、証明書に入力したものが表示されますね（Organizational Unit Name、Email Addressは何も入力しないでエンターで飛ばすと、証明書には部署とメールアドレス欄はありませんでした）。
<img width="456" alt="オレオレ証明書２.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/622000/088fb8df-f3ba-b0b6-0df0-404be5eb7505.png">

#### Let's Encrypt、Webサイトを正規のSSL証明書でSSL化

これまでの話では自己署名のオレオレ証明書でWebサイトのSSL化する方法について説明してきたけど、実際にWebサイトをネットに公開して本番運用するとなると、オレオレ証明書ではなく正規のSSL証明書の申請・導入が良いです。信頼性のために。

正規のSSL証明書はいろいろあり、有料の物が多いけど、Let's Encryptは無料のSSL証明書として有名です。
ネットで公開されている個人Webサイトなどは、Let's EncryptのSSL証明書を導入してSSL化しているものを多く見かけます。

実際にネットでWebサイトを公開したい人は、Let's EncryptのSSL証明書を試してみるのも良いと思います。
・[Let’s EncryptにSSL証明書の取得の申請し、ウェブサイトをSSL化する【無料で初めてのhttps】](https://it-jog.com/khow/serv/sslbyletsencrypt)
・[Let’s EncryptのSSL証明書を更新する(手動とcronによる自動更新)](https://it-jog.com/khow/serv/renewletsencrypt)


##### その他の参考
[セキュアなWebサーバー(Apache-SSL)を構築する](http://cos.linux-dvr.biz/archives/tag/mod_ssl)

[CentOS7 + Apache + mod_ssl 証明書設定](https://www.ssl-store.jp/)
→オレオレ証明書ではなく、FujiSSLから証明書を購入している

[[インストール] Apache 2.x + mod_ssl + OpenSSL（新規・更新）](https://jp.globalsign.com/support/server/03.html)
[[CSR生成] Apache 2.x + mod_ssl + OpenSSL（新規・更新）](https://jp.globalsign.com/support/csr/04.html)
->グローバルサインのサポートページ。解説は動画もある。