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


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

さて、主要なブラウザが、SSL/TLS通信ではない場合にとか出るようになりました。
「まじか〜〜」or「やっとか〜〜」ってなったと思います。なってない人はなってください。
というわけで、通信のSSL/TLS化した時の手順について、書き残しておきます。

環境

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

HTTPS化しよう

「企業ならともかく、ログインとかする事ないサイトなんだが証明書入れる必要あるの?」って思ったそこのあなた!!!簡単だし無料だからやろう?
証明書がなんなのかわからない人はここを読んでください。
IT初心者用入門 「証明書とは?」|Cybertrust.ne.jp

CertBotのインストールと実行

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

/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ファイルを書き換えます。
僕は警告出ましたなんでや

/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すれば大丈夫です。

できた

できました。
企業名の表示だったり、バーを緑色にしたりは、EV(Extended Validation)を使えばできますが企業じゃないとできません。
企業名の表示はされないけど、企業が実在していることを証明した証明書(OV: Organization Validation)というのもあります。
個人サイトではドメイン認証型証明書(DV: Domain Validation)が限界です。
詳しくはここを見てください。
SSLサーバ証明書の種類と比較 | DigiCert & Symantec

cronで自動更新

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

tarminal
crontab -e

Certbotにもタイマー機能があるらしいんですが、イマイチわからなかったのでCronを使いました。
cronについては 初心者向けcronの使い方 がわかりやすくていいかと思います。

/etc/crontab
0 0 * * sun root certbot renew #毎週日曜0:00に更新する

1ヶ月前から更新が可能なので、もし失敗してもまだ3回くらいはチャンスがあるので大丈夫でしょう。
毎日やる必要もないかなーと。

参考資料

CentOS 7(さくらVPS) + ApacheにLet's Encryptの無料SSL導入 - Qiita
常時SSL化待ったなし!CentOS 7 と Apacheに Let’s Encryptで信頼性の高いHTTPSを設定する
ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」 | さくらのナレッジ

おまけ
SSL/TLS未対応のサイト - 阿部寛のHP

最後に

もう少し書きたいことはあったんですが、長くなりそうなのでまた次に書くことにします。
僕はまだ触り始めて1ヶ月とかなので、もし変なところがあればコメントください。
明日は ICS Advent Calendar 2018 12日目です。@ksg61が書いてくれるそうです。何を書いてくれるんでしょうね。