サーバーにSSL証明書を設置してHTTPS化する

#### mod_sslインストール

```
yum install -y mod_ssl
```

privateディレクトリに移動。このディレクトリにcsr（証明書署名要求）、key（秘密鍵）を作る。
※ディレクトリはここではなくてはならないというわけではない。使用する証明書をconfファイルで指定する際のパスを適宜変えればいい。


```
cd /etc/pki/tls/private　
```

#### 秘密鍵を作る

```
　openssl genrsa -des3 -out hoge.key 2048
```
|  オプション名 | 役割 |
| --- | --- |
|  genrsa | 秘密鍵を生成 |
|  -des3 | 暗号化アルゴリズム |
|  -out | 書き出されるファイル |
| 2048 | 2048bitで暗号化 |


####CSRを作る

```
　openssl req -new -sha256 -key hoge.key -out hoge.csr
```

|  オプション名 | 役割 |
| --- | --- |
|  req | 証明書要求 |
|  -new | 新しい証明書要求を生成 |
|  -sha256 | 256bitで暗号化 |
|  -key | で読み込む秘密鍵を指定 |
|  -out | 作成される証明書のファイル名を指定 |


CSR作成コマンド実行後、秘密鍵のパスフレーズの入力を求められる。
その後、ディスティングイッシュネーム情報を求められる。

#####ディスティングイッシュネーム情報とは
CSRに含まれる、サイトやサイト運営団体に関わる情報

Country (国名)
例）JP
State(都道府県名)
例）Kanagawa
Locality(市区町村名)
例）Yokohama
Organizational Name(組織名)
例）example Inc.
Organizational Unit (部門名)　※「空のまま」でも大丈夫
例）（空）
Common Name(コモンネーム)
例）example.co.jp
Email Address(メールアドレス)
例）hoge@example.co.jp
以下２つは「空のまま」で大丈夫
任意：A challenge password (パスワードを設定するとApacheの起動時に毎回パスワードを求められる。)
任意：An optional company name（会社名の略称）

####CSRの内容を確認する

ディスティングイッシュネーム情報の誤入力がないか確認する
https://sstool.cybertrust.ne.jp/support_tool/index02.php

####認証局にログインし、更新申し込み
- CSRの貼り付け


####認証局から証明書、中間証明書を取得
- 証明書（crt）　・・・ SSL証明書会社が証明書署名要求（csr）に情報を付加して秘密鍵で暗号化したもの。
- 中間証明書（cer）　・・・　SSL証明書会社がセキュリティ強化、トラブル時の被害を最小限に抑えるために発行するもの。

####サーバーに設置
ファイルを保存

「-----BEGIN CERTIFICATE-----」から「-----END CERTIFICATE-----」までも必要。

```
-----BEGIN CERTIFICATE----- // ココから
hogehoge...
-----END CERTIFICATE-----　// ココまで
```
※ディレクトリはここではなくてはならないというわけではない。使用する証明書をconfファイルで指定する際のパスを適宜変えればいい。

```
vim /etc/pki/tls/certs/hoge.crt
vim /etc/pki/tls/certs/hoge.cer
```

#### ファイルに不備がないか確認する
Issuer ：証明書署名要求(csr)に署名した者
Subject：証明されたいサーバの情報
Validity：証明書の有効期間

```
// 証明書
openssl x509 -noout -text -in /etc/pki/tls/certs/hoge.crt
// 中間証明書
openssl x509 -noout -text -in /etc/pki/tls/certs/hoge.cer
```

証明書と秘密鍵の整合性を確認する
実行後、「(stdin)=」の値に差異がないか

```
// 証明書
openssl x509 -noout -pubkey -in /etc/pki/tls/certs/hoge.crt | openssl sha1
// 秘密鍵
openssl rsa -pubout -in /etc/pki/tls/private/hoge.key | openssl sha1
```





####ssl.confを修正

```
vim etc/httpd/conf.d/ssl.conf
```

証明書、秘密鍵、中間証明書を追加

```
SSLCertificateFile　/etc/pki/tls/certs/hoge.crt
SSLCertificateKeyFile　/etc/pki/tls/private/hoge.key
SSLCertificateChainFile　/etc/pki/tls/certs/hoge.cer
```

※注意点

１．デフォルトではssl.confを参照するように設定されているが、設定を変更していた場合、上記設定をしても無意味なので参照先をコマンドで確認する

```
httpd -S
```

（例）参照先がexample.co.jp.confに変更されている

```
httpd -S コマンド実行結果
*:443                  is a NameVirtualHost
         default server example.co.jp.localdomain (/etc/httpd/conf.d/ssl.conf:56)
         port 443 namevhost example.co.jp (/etc/httpd/conf.d/example.co.jp.conf:18)
```

２．Apache2.4.8以降はSSLCertificateChainFileが廃止されたので証明書と中間証明書を結合したcrtファイルを作成し、該当するconfファイルの「SSLCertificateFile」に設置する

```hoge.crt
-----BEGIN CERTIFICATE----- // 証明書（crt）
hogehoge...
-----END CERTIFICATE-----　
-----BEGIN CERTIFICATE----- // 中間証明書(cer)
hogehoge...
-----END CERTIFICATE-----　
```

```ssl.conf
SSLCertificateFile　/etc/pki/tls/certs/hoge.crt
```

####設定ファイルのチェックを行う

「syntax OK」とでればOK

※サーバーによってコマンドは異なる

```
service httpd configtest
```


####サーバー再起動

※サーバーによってコマンドは異なる

```
service httpd graceful
```



#### ブラウザから証明書が更新されているか確認する

URLバー付近の鍵マーク→項目「証明書」→証明書を確認


## 反省

SSL証明書を更新する際にサーバー設定を変更しても反映されない場合は、作業しているサーバーがあっているか確認してみる。
サーバー移行しているかもしれない・・・

```
dig example.co.jp
```