Let’s Encryptの証明書がエラーで更新できなくなってしまい、めんどくさくなったので再インストールて再発行しました。

環境


当該サーバはUbuntu18.04です。Let’s EnctyptはUbuntu16.04の時点でインストールしたもので、パッケージマネージャでインストールしてものではなくwgetで落としてきたものです。

Ubuntu16.04の時は動いていたので、たぶん18.04にアップグレードした拍子に動かなくなったんじゃないかと思います。

エラー


/usr/bin/certbot-auto renew --force-renewを実行すると下記のようなエラーがでます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ /usr/bin/certbot-auto renew --force-renew

Error: couldn't get currently installed version for /opt/eff.org/certbot/venv/bin/letsencrypt:
Traceback (most recent call last):
File "/opt/eff.org/certbot/venv/bin/letsencrypt", line 7, in <module>
from certbot.main import main
File "/opt/eff.org/certbot/venv/local/lib/python2.7/site-packages/certbot/main.py",
line 5, in <module>
import logging.handlers
File "/usr/lib/python2.7/logging/__init__.py", line 26, in <module>
import sys, os, time, cStringIO, traceback, warnings, weakref, collections
File "/usr/lib/python2.7/weakref.py", line 14, in <module>
from _weakref import (
ImportError: cannot import name _remove_dead_weakref

たぶん、インストールされてるpythonのバージョンがあがったんじゃないですかね。pythonよくわかんないし、調べてないのでそれ以上なんとも言えないんですけど。

対応


下記のような手順で対応しました。

  • certbot-autoを削除
  • 関連するファイルも削除
  • パッケージマネージャでcertbotをインストール
  • 一旦失効させる
  • 再発行する

まず、certbot-autoを削除しました。具体的には下記の通り。

1
2
3
# インストール先を確認して削除
$ which certbot-auto
$ rm /usr/bin/certbot-auto

次に、certbot-auto関連のpythonのコードが格納されている(ちなみになにをやってるのかは知りません)も削除しました。

1
$ rm -rf /opt/eff.org/certbot/*

最後にパッケージマネージャでインストールしなおしました。

1
$ apt install certbot

というか、アレなんですね。いつの間にかcertbot-autoからcertbotに変わったんですね。

更新する


次に、証明書を更新しようとすると、下記のようなエラーが出てしまいました。

1
2
3
4
5
6
Attempting to renew cert (hoge.example.com)
from /etc/letsencrypt/renewal/hoge.example.com.conf produced an unexpected error
: Problem binding to port 443: Could not bind to IPv4 or IPv6.. Skipping.

All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/hoge.example.com/fullchain.pem (failure)

失効させる


正直調べるのがめんどくさいので、一旦失効させて再発行することにしました。

1
$ certbot revoke --cert-path ./hoge.example.com/cert1.pem

この処理をサブドメイン全てに対して実施しました。

再発行する


この後、再発行して終わりです。

1
$ certbot certonly -a standalone -d hoge.example.com --email example@example.com

まとめ


めんどくさかったので、力業で再発行しました。ほぼ同じ条件のサーバを3台運用しているのですが、なぜコイツだけ問題が発生したのかちょっと腑に落ちないですね…。