HTTPS証明書LetsEncryptで自動更新時にエラー

18900000

HTTPSサーバ証明書「Let's Encrypt」の自動アップデートでエラー。
更新期間が90日と短いので定期的に証明書を更新しなければなりません。 証明書が切れればサーバが危険なサイトと見なされ面倒なことになってしまいます。とりあえず早めに更新しておいて成功するか試してみました。

Amazon Linuxの場合

/usr/local/certbot/certbot-auto renew

File "./letsencrypt", line 7, in
from letsencrypt.main import main
File "/erozine/.local/share/letsencrypt/local/lib/python2.7/dist-packages/letsencrypt/main.py", line 11, in
import zope.component
File "/erozine/.local/share/letsencrypt/local/lib/python2.7/dist-packages/zope/component/init.py", line 16, in
from zope.interface import Interface
ImportError:No module named interface

失敗しました。Pythonのバージョンエラーは網戸を閉めても入ってくる小さい虫のようにあるあるです。現行バージョンは3.6.1ですが、これは関係ありません。

File "/erozine/.local/share/letsencrypt/local/lib/python2.7/dist-packages/zope/component/init.py"

と示しているようにローカルでインストールされているpython2.7のエラーです。なので、zope.interfaceをそのローカルPythonからインストールします。

/erozine/.local/share/letsencrypt/bin/pip install --upgrade pip
/erozine/.local/share/letsencrypt/bin/pip install zope.interface
/erozine/.local/share/letsencrypt/bin/pip install rsa
/erozine/.local/share/letsencrypt/bin/pip install cryptography

pyenv global 2.7.13
/usr/local/certbot/certbot-auto renew

Saving debug log to /var/log/letsencrypt/letsencrypt.log

----------------------------------
Processing /etc/letsencrypt/renewal/erozine.jp.conf
----------------------------------
Cert not yet due for renewal

The following certs are not due for renewal yet:
/etc/letsencrypt/live/erozine.jp/fullchain.pem (skipped)
No renewals were attempted.

エラー文が消えて[更新する必要はありません]と促されました。更新できませんでしたが、あらかじめエラーを消しておくことができたでぐっすり眠ることができます。

CentOS7の場合

上記はAmazonLinuxのエラーでしたが、CentOS7のエラーはまた一風変わったものでした。

ImportError:/hamster/.local/share/letsencrypt/lib/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so:undefined symbol:OPENSSL_sk_num

最初にHTTPS化にするにあたって、Nginxをソースからインストールしてconfigureオプションでopensslを最新のものにしたので、opensslバージョンが新しすぎてエラーがでています。AmazonLinuxではOpensslが古かったのでこのエラーが無かったんですね。

yum remove openssl-devel
cd ~/.local/share/letsencrypt/bin/
./pip uninstall cryptography pyopenssl -y
rm -rf ~/.cache/
./pip install cryptography pyopenssl
ldd ~/.local/share/letsencrypt/lib/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so

完了。

関連記事