「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