CentOS 6 で Let's Encrypt を利用してサイトを HTTPS 化する

/ 2019-11-06

概要

横着してやっていなかった、このサイトの 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 を利用するためのソフトウェアのインストール手順が異なる。

参考リンク

作業ログ

下準備

サーバにログインしてバージョンなどの確認

# 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
URL の左に鍵のマークがついた

URL の左に鍵のマークがついた

証明書の更新を自動で行うように cron を仕込む

Let’s Encrypt の証明書の有効期限は 90 日であり、60 日ごとに証明書の更新を行うことが推奨されている:

証明書の更新は、先の 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.