Ubunto 16.10 + Apache に Let's Encrypt の SSL 証明書を設定する手順

Let's Encrypt の SSL 証明書を Ubunto 16.10 + Apache の環境にインストールして設定する手順を紹介します。

Let's Encrypt の SSL 証明書を Ubunto 16.10 + Apache にインストールして設定しました。

複数のサブドメンにも対応させましたが、非常に簡単にできましたので、その手順をシェアします。

インストール環境

今回の環境は下記の通りです。

# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.10
DISTRIB_CODENAME=yakkety
DISTRIB_DESCRIPTION="Ubuntu 16.10"
# apache2 -v
Server version: Apache/2.4.18 (Ubuntu)
Server built: 2016-07-18T18:32:02

事前の注意点

  1. バーチャルホストでサブドメインなど複数のドメインを運用していて、1つの .conf ファイルでそれらを管理している場合は、事前に1つの .conf ファイルに対して1つの VirsualHost になるように分けておく必要があります。現時点では Certbot クライアントが1つの設定ファイルに複数の VirtualHost の設定があるパターンに対応していないようです。
  2. 開発中で自分のマシンで hosts を設定してアクセスしているようなサーバー、つまり DNS の A レコードが設定しようとしているサーバーに向いていない場合は証明書を作成するときにエラーになります。

Certbot クライアント(旧・Let's Encrypt クライアント)のインストール

証明書を作成したりインストールしたりする Certbot クライアントは、 apt-get でサクッとインストールできます。

# apt-get update
# apt-get install python-certbot-apache

Google で色々と検索すると python-letsencrypt-apache となっている記事も多いですが、これは python-certbot-apache に名前が変わっていますのでご注意ください。

SSL 証明書のセットアップ

Certbot クライアントを使って Apache 用の SSL 証明書を作成します。証明書のセットアップは certbot コマンドを使って簡単に実行できます。

# certbot --apache -d example.com

もし、1枚の証明書でサブドメインを含めた複数のドメインをカバーしたい場合は、下記のように -d パラメーターを複数書きます。このとき、最初に書いた -d パラメーターがベースドメインになるので、トップレベルドメインを最初に書いた方がいいようです。

# certbot --apache -d example.com -d www.example.com

コマンドを実行すると、プロンプトが表示されます。

letsencrypt-01.png

何かあったときに通知してもらうためのメールアドレスを入力して OK します。

この他にキャプチャを撮り忘れてしまいましたが、http と https の両方のアクセスを許可するか、または強制的に https にリダイレクトするかも聞かれます。特に http を残しておく特別な事情がなければ https にリダイレクトさせた方がいいでしょう。

また、次に利用規約に同意するかも聞かれますので、同意する場合は Agree を選びましょう。

プロンプトが終了し、下記のように表示されれば成功です。

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at
 /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will
 expire on 2017-06-07. To obtain a new or tweaked version of this
 certificate in the future, simply run certbot again with the
 "certonly" option. To non-interactively renew *all* of your
 certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

 Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
 Donating to EFF: https://eff.org/donate-le

自動更新の設定

Let's Encrypt の証明書は有効期間が 90 日間だそうです。有効期間が切れる 30 日前になると、 certbot renew コマンドで更新できます。更新可能期間になる前にこのコマンドを実行しても、「まだ更新期間ではないよ」と言われるだけです。

そこで、 cron で毎週 certbot renew コマンドが走るように設定します。

# crontab -e

下記の内容を追記して保存します。これで毎週月曜日の 2:30 に証明書の更新チェックが走ります。コマンドの実行結果は /var/log/le-renew.log に記録されます。

30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

確認

ブラウザで設定した URL に https:// でアクセスしてみましょう。アドレスバーの左端が緑色になり、安全であることを示しているはずです。

また、証明書は、下記の URL にアクセスして確認することができます。

https://www.ssllabs.com/ssltest/analyze.html?d= example.com &latest

以上です。

参考

Published 2017-03-10
Updated 2019-06-25