Let’s Encryptの更新エラーを直す(certbot renew失敗)

Let's Encryptの更新エラーを直す(certbot renew失敗) サーバー

本日、無料SSLでおなじみのLet’s Encryptの更新チェック(certbot renew)をかけたら見慣れないエラーが発生して更新チェックが失敗する。

エラー内容はこれ↓

これを正常に更新(certbot renew)できるようにします。

【※2019/08/22追記】
以下のようなエラーが出たのでその原因と対策もこの記事の末尾に追記しました。

※動作環境
CentOS Linux 7.6

原因調査&対策

いつもLet’s Encryptの更新チェック(certbot renew)を行う際は、

にて確認のために事前にcertbotのアップデートを行うのだが、その際に

  • certbot.noarch 0:0.29.1-1.el7
  • python2-certbot.noarch 0:0.29.1-1.el7

の2つがアップデートされたのでcertbot関連の依存関係のエラーという可能性が高い。

エラーメッセージの末尾にも、
pkg_resources.DistributionNotFound: acme>=0.29.0
(和訳:acmeのバージョン0.29.0以上が無い)と書いてあるので、「acme」をyumで検索してみる。

python2-acme.noarchというのを発見。
これを更新すればOKっぽい。

これですぐに解決すると思ったが、
yum update python2-acme
で更新を試してもアップデートが存在しない。

そこでふと「certbot 関連のリポジトリはepel」と思い出し、epelを許可して、
yum –enablerepo=epel update python2-acme
で更新をかけてみる。

無事python2-acmeのアップデートが完了。
うっかりpython2-acmeのバージョンがずいぶんと古かったみたいですね…。

もう一度、エラーでこけたLet’s Encryptの更新チェック(certbot renew)を試してみる。

certbot renewが正常に終了し、Let’s Encryptの更新チェックが正常に完了しました。

まとめ

certbot renewを行った際に、末尾が「pkg_resources.DistributionNotFound: acme>=0.29.0」というエラーを吐いたら、

でpython2-acmeを更新すればOKです。

「–enablerepo=epel」を入れてepelのリポジトリからpython2-acmeをアップデートするのがミソ。

以上で解決です。

【※ポイント】

Let’s Encryptの更新の際に、
「pkg_resources.DistributionNotFound: パッケージ名>=~」系のエラーが出たら、yumで「–enablerepo=epel」を付けて指定されたパッケージをインストール又はアップデートすれば大抵のエラーは直ります。

Let’s Encryptの証明書を削除する方法

おまけですが、SSL設定に失敗して一からやり直す際や、ドメインを使わなくなった際などでLet’s Encryptの証明書を削除する方法も記載しておきます。

まず「certbot certificates」を実行して既存の証明書一覧を確認する。

不要なドメイン名(又はホスト名)を「certbot delete –cert-name」で削除する。

証明書が「/etc/letsencrypt/live/ドメイン名-0001/fullchain.pem」のように、ドメイン名の後に数字の連番が含まれる書式になっている場合は数字も含めて指定して削除してください。

正常に削除されたか「certbot certificates」で確認する。

最後に証明書のパスが記入されていたNginx、Apache、postfix、Dovecot、ProFTPDなどの各種サーバーの設定ファイルから削除したドメインの証明書のパスを削除して各種サーバーを全て再起動します。

以上でLet’s Encryptの証明書の削除は完了です。

おまけ(SSL証明書の更新をcronで自動実行)

うっかりミスでLet’s EncryptのSSL証明書の更新を忘れてしまい、ある日突然SSLが無効にならないように、SSL証明書の更新作業はcronで自動化しておきましょう。

以下のページで解説しています。

cronによる自動化設定はとても簡単ですのでやっておきましょう。

【※2019/08/22追記】The key authorization file from the server did not matchエラーの対策

あるドメインでまた見慣れないcertbot関連のエラーが発生しました。以下がそのエラーです。

色々と調べながら試行錯誤を繰り返していたら原因が判明。

原因は、ドメインの「www無し」を「www有り」に転送するために、Nginxのserverディレクティブを追加したのだが、その記述内容に不備があったためでした。

これを以下のように修正。
(※4行目の転送先URLの末尾に$request_uriを追加)

【原因の詳細】

転送先の「www有りURL」の末尾に$request_uriを追加していなかったので、Let’s EncryptのBotがアクセスしてくる際に、認証に利用される.well-knownディレクトリへのアクセスまでwww有りURLのトップページに転送してしまうためでした。

単なるイージーミスです。みなさんもイージーミスには気を付けましょう。

以上で解決です。

タイトルとURLをコピーしました