「Let's Encrypt」のsnap版certbotのインストール手順とテスト方法

カテゴリ:SSL証明書

「Let's Encrypt」の証明書の作成ツールであるcertbotのプログラムが刷新され、従来のgithubからcloneしたものを実行していた環境では証明書の作成・更新が行えなくなっています。

旧版を使用している場合、ログに以下のようなメッセージが出力されるようになっているはずです。

Your system is not supported by certbot-auto anymore. Certbot will no longer receive updates. Please visit https://certbot.eff.org/ to check for other alternatives.

新しいcertbotはsnapでインストールするように変更されています。そこでこの記事ではgithub版certbotをsnap版に移行する手順を記載いたします。

参考 参考にしたサイトは以下です。
https://certbot.eff.org/lets-encrypt/centosrhel7-apache

サーバにSSHで接続

sudo権限を持つユーザーでWebサイトを実行しているサーバーにSSHで接続します。

snapdをインストール

snapdをインストールします。

参考snapdのインストールはsnapcraftのサイトを参考にしました。

次のコマンドを使用してEPELリポジトリをCentOS7システムに追加します。

$ sudo yum install epel-release

CentOSにEPELリポジトリを追加後、snapdパッケージをインストールします。

$ sudo yum install snapd

インストールしたら、メインのsnap通信ソケットを管理するsystemdユニットを有効にします。

$ sudo systemctl enable --now snapd.socket

従来のsnapサポートを有効にするには、以下を実行して/var/lib/snapd/snapの/snapへのシンボリックリンクを作成します。

$ sudo ln -s /var/lib/snapd/snap /snap

ログアウトして再度ログインするか、システムを再起動して、snapのパスが正しく更新されていることを確認します。

snapdのバージョン確認

snapdのバージョンが最新であることを確認します。 コマンドラインで次の手順を実行して、最新バージョンのsnapdを使用していることを確認します。

$ sudo snap install core
$ sudo snap refresh core

旧certbotパッケージの削除

certbot-autoおよびCertbotのOSパッケージを削除します。

apt、dnf、yumなどのOSのパッケージマネージャーを使用してcertbotパッケージをインストールしている場合は、snap版certbotをインストールする前にそれらを削除して、certbotコマンドを実行するときに、OSのパッケージマネージャーからのインストール版ではなくsnap版が使用されるようにする必要があります。

これを行うための正確なコマンドはOSによって異なりますが、一般的な例はsudo apt-get remove certbot、sudo dnf remove certbot、またはsudo yum remove certbotです。

以前にcertbot-autoスクリプトを使用してcertbotを使用したことがある場合は、こちらの手順に従ってインストールを削除する必要もあります。

github版を/usr/binにcloneしている場合は、単純にcertbotディレクトリを削除します。

$ sudo rm -rf /usr/bin/certbot

certbotのインストール

certbotをインストールします。

コマンドラインで次のコマンドを実行して、certbotをインストールします。

$ sudo snap install --classic certbot

certbotコマンドの準備

certbotコマンドを準備します。

コマンドラインで次のコマンドを実行して、certbotコマンドを実行できるようにします。

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

以下のように/snap/bin/certbotへのシンボリックリンクが作成されているはずです。

$ sudo ls -la /usr/bin/certbot
lrwxrwxrwx 1 root root 17 Jan 18 18:32 /usr/bin/certbot -> /snap/bin/certbot

$ sudo ls -la /snap/bin/certbot
lrwxrwxrwx 1 root root 13 Jan 18 18:31 /snap/bin/certbot -> /usr/bin/snap

以下のcertbotコマンドでバージョンが表示されることを確認します。

$ sudo certbot --version
certbot 1.11.0

certbotを実行して証明書を作成

注意このステップは新規に証明書を作成する場合のみ実行します。すでにLet's Encrypt証明書を作成済みの場合はスキップしてください。

certbotの実行方法を選択します。

証明書を取得してインストールする場合

次のコマンドを実行して証明書を取得し、certbotにApacheの構成を自動的に編集させて提供し、HTTPSアクセスを1ステップで有効にします。

$ sudo certbot --apache

証明書を取得するだけの場合

より保守的に、証明書を取得するだけでApache構成は手動で変更したい場合は、次のコマンドを実行します。

$ sudo certbot certonly --apache

ドキュメントルート(webroot)を指定して証明書を作成する場合の例)

$ sudo certbot certonly --webroot \
-w /var/www/html/hoge/ -d hoge.com \
-w /var/www/html/foo/ -d foo.com \
-w /var/www/html/bar/ -d bar.com \
...

自動更新をテスト

certbotパッケージには、有効期限が切れる前に証明書を自動的に更新するcronジョブまたはsystemdタイマーが付属しています。構成を変更しない限り、certbotを再度実行する必要はありません。

次のコマンドを実行して、証明書の自動更新をテストできます。

$ sudo certbot renew --dry-run

certbotを更新するコマンドは、次のいずれかの場所にインストールされます。

/etc/crontab/
/etc/cron.*/*
systemctl list-timers

certbotの動作確認

certbotが機能していることを確認します。

サイトが正しく設定されていることを確認するには、ブラウザでhttps://自サイトのドメイン/にアクセスし、URLバーで鍵のアイコンを探します。

cronの登録・修正

cronの登録・修正を行います。

単純にcronにcertbot renewを登録するだけで証明書は更新されますが、以下の例では、証明書の更新後に再起動が必要なサービスを--renew-hookオプションで再起動させるようにします。またログへの出力および管理者へのメール送信も実施するようにします。

Noteこの辺りは任意にカスタマイズしてください。

certbot renew --renew-hook "systemctl restart httpd" --renew-hook "systemctl restart postfix" --renew-hook "systemctl restart dovecot" --renew-hook "service vsftpd restart" --renew-hook "systemctl restart webmin" -q >> /var/log/certbot-renew.log | mail -s "CERTBOT Renewals" admin@hoge.com < /var/log/certbot-renew.log

certbot renewの実行例

最後にcertbot renewコマンドの実行例を載せておきます。以下は期限切れまで余裕があるためスキップ(有効期限までの日数が30日未満になるまで証明書は更新しません)していますが、証明書の更新処理が実施されていることが確認できます。

$ sudo certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/hoge.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not yet due for renewal

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
The following certificates are not due for renewal yet:
  /etc/letsencrypt/live/hoge.com/fullchain.pem expires on 2021-03-05 (skipped)
No renewals were attempted.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

公開日時: 2021年01月18日  19:53:26

本格的なスキルを身につける

Linux/ITエンジニアとしてのスキルを身につけるにはLPI-Japanアカデミック認定校リナックスアカデミーがおすすめですよ。

SSL証明書に戻る

「SSL証明書」に関する他のTips

このページのトップに戻る