CentOS 6 で Let's Encrypt を利用してサイトを HTTPS 化する
概要
横着してやっていなかった、このサイトの HTTPS 化(SSL 対応) を、いい加減やることにした。 CentOS 6 環境で Let’s Encrypt を利用して対応。ここに作業ログを残す。
環境
- サーバは VPS で CentOS 6 系
- Web サーバは Apache
前提知識
(HTTPS の必要性や SSL とは何か、といった基礎知識については世の中に情報がたくさんあるので説明を省略)
現代においては Let’s Encrypt のおかげで誰でも無料で Web サイトの HTTPS 対応が可能になっている。 Let’s Encrypt とは 2016-04 に開始された非営利団体による認証局である:
今どきだと VPS を借りる際の初期設定で Let’s Encrypt 対応までやってくれるものもあるようだが、 自分のサイトが動いているサーバは 2013 年頃に借り始めたもので、 Linux のディストリビューションもちょっと古めの CentOS 6.4 であった。
CentOS 7 系と 6 系では、Let’s Encrypt を利用するためのソフトウェアのインストール手順が異なる。
参考リンク
- [2017-04] Let’s Encrypt の使い方 - Let’s Encrypt 総合ポータル
- [2017-09] ネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」 | さくらのナレッジ
- [2019-07] CentOS6にLet’s Encryptをインストール - Qiita
作業ログ
下準備
サーバにログインしてバージョンなどの確認
# Linux のバージョン確認
$ cat /etc/redhat-release
CentOS release 6.4 (Final)
# Apache の SSL モジュールが入っているか調べる
$ httpd -M | sort
>> (入っていれば "ssl_module" が出力に含まれる)
そもそも Apache の SSL モジュール mod_ssl
が入っていなかったのでインストールする:
$ sudo yum install mod_ssl
certbot-auto を使って証明書の取得を行う
certbot
というクライアントを利用すると、Let’s Encrypt の証明書の取得や更新を手軽に行える:- CentOS 7 系だと
yum
でインストールできるらしいが、CentOS 6 系ではできない - 代わりに
certbot-auto
という、実行用の Python 環境の構築から自動でやってくれるやつがあるので、そちらを利用する:
$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
$ ./certbot-auto
- 通知用のメールアドレスだったり、対応させるドメインだったりを聞かれるので、指示に従って入力していく
- HTTP から HTTPS にリダイレクトさせる設定なども、選択すればこの段階でやってくれる
- (Apache の conf に RewriteRule が追記される)
これで Web サーバを再起動すれば、もうサイトが HTTPS 化されている:
$ sudo service httpd restart
証明書の更新を自動で行うように cron を仕込む
Let’s Encrypt の証明書の有効期限は 90 日であり、60 日ごとに証明書の更新を行うことが推奨されている:
- [2015-11] 証明書の有効期間が90日間な理由 - Let’s Encrypt 総合ポータル
証明書の更新は、先の certbot-auto
を利用して、以下のコマンドで行える:
# 必要であれば証明書の更新を行い、更新後に Web サーバを再起動する
$ sudo /path/to/certbot-auto renew --post-hook "sudo service httpd restart"
certbot-auto renew
は、デフォルトでは期限が残り 30 日以内でなければ何もせず、--post-hook
も実行しない。
従って、自動で更新させるには単純に cron に登録して定期実行させればよい:
# cron が動いているかの確認
$ /etc/rc.d/init.d/crond status
crond (pid *****) is running...
# 適当なエディタで cron の設定を記述
$ sudo emacs /etc/cron.d/letsencrypt
下記は毎週月曜の 16 時に実行する例:
00 16 * * 1 root /path/to/certbot-auto renew --post-hook "sudo service httpd restart"
# cron を再起動
$ sudo /etc/rc.d/init.d/crond restart
所感
Let’s Encrypt のおかげで、無料で簡単に HTTPS 化が行える時代になった。
ありがとう Let’s Encrypt.