Let's EncryptでSSL/TLS化 【Cent OS 7】

この記事は [ICS Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ics2018) の11日目の記事です。
昨日は大木くん(@2357gi)が [Slackを研究室のラボメンに布教した話](https://qiita.com/2357gi/items/2c0598532929c9f8370c) を書いてくれました。
ちなみにうちの研究室はSlackより先にLINEのグループができてしまいました:poop:
情報通信システム工学科の わくわく(@waku_25) です。~~苗字は一瞬で一族特定されるので勘弁…~~

さて、主要なブラウザが、SSL/TLS通信ではない場合に<img width="160" alt="スクリーンショット 2018-12-07 11.36.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/247779/43f4bf58-8da2-8b8d-4560-dac60b95a7d2.png">とか出るようになりました。
「まじか〜〜」or「やっとか〜〜」ってなったと思います。なってない人はなってください。
というわけで、通信のSSL/TLS化した時の手順について、書き残しておきます。

#環境
- さくらのVPS
   - CentOS Linux release 7.4.1708 
   - Apache 2.4.6
   - mod_ssl インストール済み
   - epel-release 追加済み

#HTTPS化しよう
「企業ならともかく、ログインとかする事ないサイトなんだが証明書入れる必要あるの？」って思ったそこのあなた！！！簡単だし無料だからやろう？
証明書がなんなのかわからない人はここを読んでください。
[IT初心者用入門 「証明書とは？」｜Cybertrust.ne.jp](https://www.cybertrust.ne.jp/journal/certification.html)

##CertBotのインストールと実行
VPSにいつも通りログインします。
まず、以下をhttpd.confに書き加えます。
僕は ~~大木君のようにVim使いではないので~~ エディタの指定はしませんし、宗教戦争にも参加しません。

```conf:/etc/httpd/conf/httpd.conf
<VirtualHost *:80>
    ServerAdmin <メールアドレス>
    DocumentRoot /var/www/html #自分の環境によって変えてください
    ServerName <ドメイン名>
</VirtualHost>
```
そしてLet's Encryptのツールcertbotをインストールします。
対話型のインストーラなので指示に従います。

```:tarminal
yum install certbot　python-certbot-apache
certbot run --apache -d <ドメイン名>
```
`/etc/letsencrypt/live/<ドメイン名>`に証明書が作成され、
`/etc/httpd/conf.d/ssl.conf`が書き換えられ、暗号化されたかと思います。

###できてないが？
もし自前の証明書使ってるやで！安全じゃないやで！って警告が出てたらconfigファイルを書き換えます。
僕は警告出ました:angry::angry::angry::angry:なんでや:angry::angry::angry::angry:

```conf:/etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt

      # ↓   変更後   ↓ #

SSLCertificateFile /etc/letsencrypt/live/<ドメイン名>/cert.pem
SSLCertificateKeyFile　/etc/letsencrypt/live/<ドメイン名>/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/<ドメイン名>/chain.pem
```
`/etc/httpd/conf/httpd.conf`にも同じ項目があったらコメントアウトして、
最後に`Include /etc/httpd/conf/httpd-le-ssl.conf`と書き込めばOKなはずです。
`--apache`のオプションを使うと、`/etc/httpd/conf/httpd-le-ssl.conf`ができます。
そこで443ポートの設定とLet's Encryptの証明書を読み込んでいるはずなので、includeすれば大丈夫です。

###できた
できました。<img width="141" alt="スクリーンショット 2018-12-07 9.57.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/247779/98293fa8-82df-6c0b-8f6c-c3049ed7c93b.png">
企業名の表示だったり、バーを緑色にしたりは、EV(Extended Validation)を使えばできますが企業じゃないとできません。
企業名の表示はされないけど、企業が実在していることを証明した証明書(OV: Organization Validation)というのもあります。
個人サイトではドメイン認証型証明書(DV: Domain Validation)が限界です。
詳しくはここを見てください。
[SSLサーバ証明書の種類と比較 | DigiCert & Symantec](https://www.websecurity.symantec.com/ja/jp/theme/ssl-compare)

##cronで自動更新
今回の証明書は90日で期限が切れます。短い気もしますが無料なのでしょうがないですね。
僕は忘れっぽいので、証明書を切らしてしまう未来が見えます。
なので、自動的に更新してくれるようにします。

```:tarminal
crontab -e
```
Certbotにもタイマー機能があるらしいんですが、イマイチわからなかったのでCronを使いました。
cronについては [初心者向けcronの使い方](https://qiita.com/tossh/items/e135bd063a50087c3d6a) がわかりやすくていいかと思います。

```conf:/etc/crontab
0 0 * * sun root certbot renew #毎週日曜0:00に更新する
```
１ヶ月前から更新が可能なので、もし失敗してもまだ３回くらいはチャンスがあるので大丈夫でしょう。
毎日やる必要もないかなーと。

#参考資料
[CentOS 7(さくらVPS) + ApacheにLet's Encryptの無料SSL導入 - Qiita](https://qiita.com/Ayame/items/42d9fcac64085bacbb73)
[常時SSL化待ったなし！CentOS 7 と Apacheに Let’s Encryptで信頼性の高いHTTPSを設定する](https://www.rem-system.com/cent-httpd-ssl/)
[ネコでもわかる！さくらのVPS講座 ～第六回「無料SSL証明書 Let’s Encryptを導入しよう」 | さくらのナレッジ](https://knowledge.sakura.ad.jp/10534/)

おまけ
[SSL/TLS未対応のサイト - 阿部寛のHP](http://abehiroshi.la.coocan.jp/)


#最後に
もう少し書きたいことはあったんですが、長くなりそうなのでまた次に書くことにします。
僕はまだ触り始めて１ヶ月とかなので、もし変なところがあればコメントください。
明日は [ICS Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ics2018) 12日目です。@ksg61が書いてくれるそうです。何を書いてくれるんでしょうね。