[*SSL*] Apache2.4にてSSL化を行う

# はじめに
SSL設定に挑戦。
以前もやったが上手くいかなかったのでリトライ。
今回は上手くいった。

```
OS: CentOS7　（さくらVPS）
Apache: 2.4系
SSL証明書: さくらインターネットの一番安いやつ
```

# 方法
## 秘密鍵の生成

```bash
$ openssl genrsa -des3 -out private.key 2048
# Generating RSA private key, 2048 bit long modulus
# ...........................+++
# ..............................................................................................# ................................+++
# e is 65537 (0x10001)
# Enter pass phrase for private.key: *******************（ここに入力したものを絶対わすれちゃダメ）
# Verifying - Enter pass phrase for private.key: *******************

```

## CSRの生成

```bash
$ openssl req -new -key private.key -out server.csr
# Enter pass phrase for private.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]:Kita-Ku
# Organization Name (eg, company) [Default Company Ltd]:組織名を何か
# Organizational Unit Name (eg, section) []:（任意）
# Common Name (eg, your name or your server's hostname) []:http://example.comなら「example.com」
# Email Address []:（未入力）

# Please enter the following 'extra' attributes
# to be sent with your certificate request
# A challenge password []:（未入力）
# An optional company name []:（未入力）
```

## できたファイル
```bash
$ -rw-rw-r--   1 sample sample 1743  4月 28 08:54 private.key
$ -rw-rw-r--   1 sample sample  980  4月 28 08:58 server.csr
```

## CSRの中身

```bash
$ cat server.csr
# -----BEGIN CERTIFICATE REQUEST-----
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# -----END CERTIFICATE REQUEST-----
```

## SSL証明書の申し込み
さくらで取得。
![スクリーンショット 2018-04-28 9.09.10.png](https://qiita-image-store.s3.amazonaws.com/0/48912/91e76795-8ea7-3efe-24d2-3195321a092e.png)

しばらくするとメールで準備できたとメールが来るので
`認証ファイルDL`を押してtxtファイルをダウンロードする。
![スクリーンショット 2018-04-28 9.59.24.png](https://qiita-image-store.s3.amazonaws.com/0/48912/234f774f-41a6-7afb-50b7-535549e883d6.png)


## サーバ証明書の設定

```bash
$ cd [ドキュメントルート]
$ sudo mkdir -p .well-known/pki-validation
# このディレクトリ以下にダウンロードしたファイルを入れる
```

アクセス制限をかけてると認証できないらしいので、ベーシック認証などを外す必要がある。
暫く待つと、`サーバ証明書DL`が現れる。

![スクリーンショット 2018-04-28 10.46.56.png](https://qiita-image-store.s3.amazonaws.com/0/48912/94c13d41-6763-6ad5-29d5-aa0a0493bbf5.png)

ダウンロードしたサーバ証明書をサーバーに転送する。

```bash
$ scp server.crt [ユーザー名]@[IPアドレス]:[ディレクトリ]
```

## 中間CA証明書の設定

ダウンロードしたサーバ証明書に中間CA証明書情報を記載する必要がある。
今回取得したSSL証明書の中間証明書は[JPRS](https://jprs.jp/pubcert/info/intermediate/)から取得する。
中間証明書は取得したSSL証明書によって違うので上記にすればよいというわけではない。
`server.crt`を開き、以下のように設定する。

```
-----BEGIN CERTIFICATE-----
（サーバ証明書）
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----　　⇐　ここから下を追加する
（中間証明書）
-----END CERTIFICATE-----
```

## Apacheの設定
### バーチャルホストの設定

```conf
<VirtualHost *:443>
  （省略）
  SSLEngine on
  SSLCertificateFile server.crt （ダウンロードしたサーバ証明書）
  SSLCertificateKeyFile private.key （CSR生成時の秘密鍵）
  （省略）
</VirtualHost>
```

### SSLモジュールの設定

```bash
$ sudo yum install mod_ssl
$ sudo vim /etc/httpd/conf.modules.d/00-ssl.conf
# 以下を記載する
# LoadModule ssl_module modules/mod_ssl.so
$ sudo systemctl restart httpd
```

### 443ポートの開放

```bash
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --reload
```


# 参考
* [Apache + OpenSSL CSR生成手順 (新規)](https://knowledge.symantec.com/jp/support/ssl-certificates-support/index?page=content&actp=CROSSLINK&id=SO23384)
* [ファイル認証SSL　トラブルシューティング](https://help.sakura.ad.jp/hc/ja/articles/206208881-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%AA%8D%E8%A8%BCSSL-%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0)
* [SSLサーバ証明書　導入サポートツール](https://sstool.cybertrust.ne.jp/support_tool/index01.php)