SSL証明書の取得方法 | HTTPからHTTPSへ移行

# httpsに対応すること

<font color="IndianRed">http</font>://〜で表示されているサイトを
<font color="LimeGreen">https</font>://〜 で表示する内容をまとめました

## なぜhttpsにする必要があるのか 暗号化について

<font color="LimeGreen">https</font>は「HTTP over SSL/TLS」の略です。
<font color="IndianRed">http</font>というプロトコルで通信しているものを、
<font color="LimeGreen">https</font>だとSSLプロトコルという当事者以外には意味の通じない形式に変換して通信することが可能になります。
セキュリティ上、安全になるわけで、
つまり、問い合わせフォームやお客様の個人情報を扱うページだと特に<font color="LimeGreen">https</font>に対応することが重要になってきます。

## フィッシングサイトの防止

サイトが正しく運営されていることを第三者により認証し、それを証明されます。
分かりやすく言うと、フィッシングサイト(偽物のサイト)の防止が可能です。

偽物サイトで、本物のサイトか迷った時は確認できます。
https://matome.naver.jp/odai/2138950703143836101

## SEO的にも有利

Googleが推奨していることから、これからこの傾向はますます強くなります。

## Google Chrome Version62

2017年10月24日からversion62になるGoogle Chrome になっています。
セキュリティ警告のラベルを表示することをGoogleが2017年4月に告知していました。
該当するページは下記の通りです。


・<font color="IndianRed">http</font> でテキストをフォーム送信するページ
・シークレットモードでアクセスするすべての <font color="IndianRed">http</font> ページ

## httpsに対応させる方法とプロセス

<font color="LimeGreen">https</font>で映るようにする
<font color="IndianRed">http</font>からリダイレクトさせ<font color="LimeGreen">https</font>にさせるのが一般的

<font color="LimeGreen">https</font>で映るようにするために、SSL証明書(SSLサーバ証明書)を取得する必要があって
SSL証明書の取得方法は何種類かあり、認証局に発行してもらう必要があります。
また認証局によってSSL証明書の金額がまちまちです。

# SSL認証について

## 認証の種類

SSL証明書にはいくつか認証型に種類があります。

|名前|説明|信頼性|
|:-------------|:----------:|:-------------:|
|ドメイン認証|ドメインの使用権の有無のみ|低|
|企業実在性認証|ドメイン+サイト運営団体の実在性の確認(電話認証など)|高|
|EV認証|サイト運営団体の厳格な確認|最高|

※オレオレ証明書(自分自身が発行する証明書)は割愛

https://www.cpi.ad.jp/column/column08/
違いは認証レベルの違いですが
一般的に、httpsで表示出来るだけなら安いに越したことはありません。

EV認証は金額も高額になるため、実際にそこまでの認証を取得しているのは
日本では超大規模サイトに加え銀行など決済サイトが主です。

## 認証局による金額の違い

SSL証明書の認証の違いで取得する金額も異なりますが目安として下さい。

|認証局|金額|
|:---------|:-------:|
|kingSSL |900〜|
|ジオトラスト |31,300〜|
|GlobalSign (GMO)  |59,800〜|
|シマンテック |81,000〜|

※金額は1年間

本記事では割愛しますが、
実はAWSやさくらサーバにおいて無料でSSL証明書を取得できるサービスも存在します。

# 実際にSSL証明書を取得する

## SSL証明書を取得するまでのざっくりした流れ

1. 秘密鍵の作成
1. 秘密鍵を用いてcsrを作成
1. csrを認証局のブラウザで貼り付け申し込む
1. 承認メールが届くので、承認して、証明書を発行してもらう。
1. 証明書をサーバーに設置して、再起動
1. 終了

※現在の証明書の署名アルゴリズムには、SHA-1ではなくSHA-2(SHA-256)を使用することが推奨されているため、sha-256で作ることを前提としてます。

## サーバーでの作業

あくまでディレクトリの場所は一例です。

### ディレクトリ作成

```
mkdir /etc/httpd/conf/ssl.key
mkdir /etc/httpd/conf/ssl.csr
```

###  versionの確認

```
openssl version
ssh -ver
```

※sha-2はsshのversionが0.9.8から対応なので、それより古いとsha-2は使えませんのでご注意下さい。

### 秘密鍵の作成

```
openssl genrsa -out /etc/httpd/conf/ssl.key/hogehoge.com.key 2048
```

注意点はパスフレーズなしで作ることです。
色々なサイトに載っている-des3というオプションを使うと、パスワード付きになってしまうので注意。仮にパスワードつきで作成してしまった場合は、パスワードを解除してください。

※パスワードを解除する順番はどちらでも良さそうです。CSRを作り直したり、証明書を再発行する必要はありません。
パスフレーズ有りの秘密鍵生成後、パスフレーズ解除、CSR作成、証明書発行
パスフレーズ有りの秘密鍵生成、CSR作成、証明書発行、パスフレーズ解除

```
openssl rsa -in hogehoge.com.key -out hogehoge.com_nopass.key
```


すでに証明書がある場合はこれで確認できます。

### 確認 (SSLCertificateFileなどのファイルを見れる)

```
grep SSL /etc/httpd/conf.d/ssl.conf | grep Certifi | grep -v ^#
SSLCertificateFile /etc/httpd/conf/ssl.crt/hogehoge.com_2016.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/hogehoge.com.key
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/intermediate_ca_2016.crt
```

### 確認 (chain式で見れる)

```
 echo "" | openssl s_client -connect hogehoge.com:443 -showcerts
```

### csrの作成

```
openssl req -new -key /etc/httpd/conf/ssl.key/hogehoge.com.key -out /root/hogehoge.com_2017.csr
```

※-sha256を付与しなくてもsha-256になると思われます。

以下のコマンドを打つと、会社の名前、所在地など入力する

```
# openssl req -new -sha256 -key /etc/httpd/conf/ssl.key/hogehoge.com.key -out /root/hogehoge.com_2017.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) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shibuya-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Hoge Hoge, Inc.
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:hogehoge.com
Email Address []:

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

※パスワードはエンターのみを押してください。

### cat で確認

```
cat /root/hogehoge.com_2017.csr
```

### csr情報の確認(入力した情報の確認)

```
openssl req -text -noout -in /root/hogehoge.com_2017.csr
```

csrを作成したら、あとはcsrを用いて、ブラウザなどで、各認証局に申し込みます。

申し込みを経て
csrの内容とブラウザで申し込んだ内容に相違がないか認証局から確認の電話が来ます。
確認を終了し、振り込みを終了すると、(順序の前後はありますが)
証明書が発行されます(通常メールなどで送られてきます)

### 証明書の設置(crt作成)

```
メールでかいてある情報の
（-----BEGIN CERTIFICATE-----）　から　（-----END CERTIFICATE-----）　までをコピーペースト
(--  ---)内も含む
```

```
# vi /etc/httpd/conf/ssl.crt/hogehoge.com_2017.crt
# cat /etc/httpd/conf/ssl.crt/hogehoge.com_2017.crt
-----BEGIN CERTIFICATE-----
CI341F7afFe3avEwIBfeGeE7ek+
以下省略
```

### 権限変更

```
# chmod 600 /etc/httpd/conf/ssl.crt/hogehoge.com_2017.crt
```

### 中身確認

```
# sudo openssl x509 -text -noout -in /etc/httpd/conf/ssl.crt/hogehoge.com_2017.crt
```

中間CA証明書があれば設置(高いプランの証明書の場合はあります)
ファイル名はなんでも可能です。(最後にconfファイルで書くだけ)

```
vi /etc/httpd/conf/ssl.crt/intermediate_ca_2017.crt
cat /etc/httpd/conf/ssl.crt/intermediate_ca_2017.crt
chmod 0600 /etc/httpd/conf/ssl.crt/intermediate_ca_2017.crt
```

再起動すると、証明書が更新されhttps通信が可能になるはずです。
その前にバックアップをとりましょう。

```
cp -p /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.20170101
```

### 設定を追記

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

SSLCertificateFile /etc/httpd/conf/ssl.crt/hogehoge.com_2017.crt
SSLCertificateChainFile /etc/httpd/conf/ssl.crt/intermediate_ca_2017.crt
```

### 差分を確認

```
sudo diff -u /etc/httpd/conf.d/ssl.conf.20170101 /etc/httpd/conf.d/ssl.conf
```

### コンフファイルの書式のチェック

```
service httpd configtest
```

※centOS7以降はserviceではなくsystemctlコマンド

###サーバーの状態の確認

```
service httpd status
```

サーバー無停止によるの再起動

```
service httpd graceful
```

###確認方法

ブラウザの検証ツールで確認も可能。

もしくは下記のようなサイトでも確認できます。
https://www.geocerts.com/ssl_checker