この記事は ICS Advent Calendar 2018 の11日目の記事です。

昨日は大木くん(@2357gi)が Slackを研究室のラボメンに布教した話 を書いてくれました。

ちなみにうちの研究室はSlackより先にLINEのグループができてしまいました:poop:

情報通信システム工学科の わくわく(@waku_25) です。苗字は一瞬で一族特定されるので勘弁…

さて、主要なブラウザが、SSL/TLS通信ではない場合にスクリーンショット 2018-12-07 11.36.58.pngとか出るようになりました。

「まじか〜〜」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ファイルを書き換えます。

僕は警告出ました:angry::angry::angry::angry:なんでや:angry::angry::angry::angry:


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


できた

できました。スクリーンショット 2018-12-07 9.57.25.png

企業名の表示だったり、バーを緑色にしたりは、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が書いてくれるそうです。何を書いてくれるんでしょうね。