SSLサーバー証明書の導入 （FujiSSL編）

# 概要
httpでのアクセスだと、ブラウザでアクセスした際に、「通信が暗号化されてません」などと表示されて嫌だったので、httpsでアクセスできるように、SSLのサーバー証明書を導入する事にしました。
結果、安いサービスをあたった結果、FujiSSLに決めました。
今回はその導入手順の記事となります。

また、サーバーはMacにMAMP環境で立ち上げています。
MAMP環境の導入については、 [こちら](https://qiita.com/beckyJPN/items/c10e295e753dd3d2da1b) の記事を参照してください。

# 1. 証明書発行業者の選定

SSLサーバー証明書は自分でも発行はできますが、その場合だとsafariやchromeさんに警告されてしまったので、証明書発行サービスを利用する事にしました。

自分が知っていた所だとベリサインとかですが、ちょっと高いイメージがあったので、安そうなところを探しました。

ちなみに、ベリサインはシマンテックに社名変更したみたいですね。。

**■ 日本ベリサイン株式会社の社名変更および組織変更**
https://knowledge.digicert.com/ja/jp/alerts/ALERT692.html

いろいろと調べた結果、FujiSSLと言うところが比較的安くて、割と有名でもあるみたいだったので、今回はこちらで証明書を発行してもらうことにしました。

ちなみに、証明書の費用は発行時、1年で1,080円でした。

**■ FujiSSL-安心・安全の純国産格安SSLサーバ証明書**
https://www.fujissl.jp/

# 2. 申請に必要なファイルを作成
申請手続きを進めるに当たり、サーバーの署名を記入する必要が出てきます。

また、サーバの署名を作成するために予め鍵ペアを作成しておく必要もあります。

FujiSSLの場合は、公式に詳しい説明があったので、こちらを確認して進めました。
https://www.fujissl.jp/docs/d001/

この場面で作成するファイルは以下の２つです。

`任意の名前.key`
`任意の名前.csr`
仮にここでは

`servername.key`
`server.csr`
としておきます。

またそれぞれのファイルについては以下サイトが詳しかったです。

**■ 鍵ペア**
https://wa3.i-3-i.info/word17033.html

**■ 署名のリクエストファイル**
https://knowledge.digicert.com/ja/jp/solution/SO22872.html
# 3. 申請手続き
申請についても公式の説明が詳しいので、こちらを参考に進めます。

先程作成したcsrファイルの中身をコピペで貼り付けたりする必要があります。

**■ 申請**
https://www.fujissl.jp/request/petition/
# 4. サーバーの審査
手続きを進めると、FujiSSLより有効なサーバーかを審査するために、htmlファイルが送信されます。

FujiSSLのボットによる定期的なサイト審査作業が開始されるようなので、このファイルをサーバーの指定位置に配置ししばらく待ちましょう。

この辺の手続きについても公式サイトを参考にしましょう。

**■ 審査**
https://www.fujissl.jp/request/review/

ちなみに、メールで認証する方法もあるみたいですがこちらは試していないので、やり方はわかりません。

# 5. 証明書の配置
審査が完了するとようやくメールでサーバー証明書とCA証明書が送付されます。

添付ファイルもついているのですが、使い方がよくわからず、自分はメールに書かれている証明書の内容をコピペしてファイルを作成しました。

サーバー証明書とCA証明書についてメールの中にコードが貼り付けれられているので、 `(—–BEGIN CERTIFICATE—–)` から `(—–END CERTIFICATE—–)` の部分をそれぞれコピペしてファイル化します。

また、CA証明書はなぜか２つの証明書文字列が書かれていたんですが、１つ目の方だけ利用してファイルを作成したら結果的にうまくいきました。

今後の説明のため、作成したファイルは仮に以下の通りとしておきます。

**サーバー証明書**
`server.csr`

**CA証明書**
`server-ca.csr`
# 6. keyファイルのパスフレーズ解除
この部分はMAMPの場合のみ必要な作業となります。

MAMPだとkeyファイルにパスフレーズが含まれていると、apacheの起動に失敗してしまうようです。

いくつか方法はありそうですが、今回はkeyファイルのパスフレーズを解除したファイルを作成する事にしました。

具体的なコマンドは以下の通り。

```sh
openssl rsa -in xxxxxxx.key -out xxxxxxx.key
```

ここでは、 **手順２** で作成した `servername.key` を `non-phrase-servername.key` としてフレーズなしキーファイルを作成したこととします。

ちなみに、この手続はGlobalSignの説明を参考に参考にしました。

**■ Apacheでの、パスフレーズ入力なしでの起動方法 | サポート・お申し込みガイド | GMOグローバルサイン【公式】**
https://jp.globalsign.com/support/faq/93.html

# 7. 証明書類の配置
ここまででSSL通信を行うために必要なファイルが揃いました。

おさらいすると **手順５** と **６** で作成した以下ファイルとなります。

|ファイル名|概要|
|---|---|
|server.csr|サーバー証明書|
|server-ca.csr|CA証明書|
|non-phrase-servername.key|鍵ペア (フレーズ解除済み)|
これらをApachから確認できる任意のフォルダに配置します。

# 8. httpd-ssl.conf の設定
ファイルの準備も整ったので、apacheにssl通信をする事を認識させるため、設定ファイルの書き換えを行います。

デフォルトの場合以下の位置に配置されている、httpd-ssl.confのファイルを修正します。

`/Applications/MAMP/conf/apache/extra/httpd-ssl.conf`

具体的な修正箇所は以下のとおりです。

SSLCertificateFile など設定項目のキーでファイルを検索し、書き換えてください。
\# でコメントアウト化されていると思うので、コメントも解除しましょう。

```
SSLCertificateFile "ファイルのディレクトリ/server.csr"
SSLCertificateKeyFile "ファイルのディレクトリ/non-phrase-servername.key"
SSLCertificateChainFile "ファイルのディレクトリ/server-ca.csr"
```
# 9. httpd.conf の設定
次に、 `httpd.conf` も修正します。

以下記述がある部分がコメントアウトされていると思うので、こちらのコメントアウトを外します。

```
Include /Applications/MAMP/conf/apache/extra/httpd-ssl.conf
```
# 10. wordpressのサイトアドレスを設定
WordPressの「設定 > 一般」より、サイトのアドレスをそれぞれhttpsにしておきます。
![スクリーンショット-2019-06-08-10.16.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142886/02efe4f5-ca18-dfe3-620d-47d89054112f.png)
# 11. 443ポートの開放
デフォルトの設定だと、SSL通信は443番ポートで通信されるので、ルーターの設定などで443番ポートでサーバーが通信できるように設定します。
# 12. MAMPの再起動
以上の設定が完了したら、MAMPを再起動しapacheの設定項目を読み込み直します。

これで https://でサイトにアクセスするとSSL通信が行われます。
chromeなどでアクセスして、URL部分に鍵マークが表示され
その部分をクリックして保護されている説明があればOKです。
![スクリーンショット-2019-06-08-11.41.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/142886/44219faf-5641-8dfc-a0ad-b3aaa9db7e67.png)
#後述
結果、かなり面倒な手順となりました。。。

証明書のファイルの下りはツールとかでもっと簡素化できないものかなぁ。。

一つ一つの手順はそんなに難しくはないのですが工程が多かったり、必要なファイルの概念がよくわからなかったりで、けっこう大変でした。