我正在尝试使用Certbot更新Let's Encrypt证书。它停止工作,我不知道为什么。这是错误:
ImportError: /root/.local/share/letsencrypt/local/lib/python2.7/site-packages/cryptography/
hazmat/bindings/_openssl.so: undefined symbol: OPENSSL_sk_num
我安装了最新的 OpenSSL 版本
OpenSSL 1.1.0d 26 Jan 2017
我尝试通过执行以下操作来调试此问题。首先,我只是尝试在 python 控制台中添加 import OpenSSL。它工作得很好,没有错误。但是当我尝试
. ~/.local/share/letsencrypt/bin/activate
然后>>> import OpenSSl
我得到错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/OpenSSL/__init__.py", line 8, in <module>
from OpenSSL import rand, crypto, SSL
File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/OpenSSL/rand.py", line 12, in <module>
from OpenSSL._util import (
File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/OpenSSL/_util.py", line 6, in <module>
from cryptography.hazmat.bindings.openssl.binding import Binding
File "/root/.local/share/letsencrypt/local/lib/python2.7/site-packages/cryptography/hazmat/bindings/openssl/binding.py", line 14, in <module>
from cryptography.hazmat.bindings._openssl import ffi, lib
ImportError: /root/.local/share/letsencrypt/local/lib/python2.7/site-packages/cryptography/hazmat/bindings/_openssl.so: undefined symbol: OPENSSL_sk_num
我尝试删除 /root/.local/share/letsencrypt/ 路径,然后尝试再次运行 certbot-auto。我仍然得到同样的错误。有没有人遇到过这个问题并知道解决方案?请帮帮我。需要更新一些证书。
更新:
我发现/lib/x86_64-linux-gnu
目录中有旧版本的 libssl.so.1.0.0 并且没有OPENSSL_sk_num
. 当我尝试用较新版本的 libssl1.1(它确实有OPENSSL_sk_num
)替换时,我得到一个它需要的错误OPENSSL_VERSION 1.0.1
。然后经过一番努力从 /usr 目录和本地目录中删除库后,我得到了错误ImportError: libssl.so.1.0.0: cannot open shared object file: No such file or directory
。我怎样才能改变它,让letsencrypt使用更新的库?
解决方案
经过一番挣扎。我刚刚重新安装了 openssl 1.1.0c 版。从另一个项目复制了letsencrypt库并且它有效。我认为一些升级毁了它。所以我建议大家在运行letsencrypt时只使用--no-self-upgrade选项。
解决方案更新
再次遇到此问题后,我决定以正确的方式解决它。所以基本上你需要用命令重新编译openssl 1.1.0c:
./config -Wl,--enable-new-dtags,-rpath,'$(LIBRPATH)'
和make
将编译好的libcrypto.so.1.1
和复制libssl.so.1.1
到/usr/lib/x86_64-linux-gnu
然后你需要重做或只是修改libcrypto
和libssl
符号链接。通过在/usr/lib/x86_64-linux-gnu
文件夹中输入命令ln -s libssl.so.1.1 libssl
和ln -s libcrypto.so.1.1 libcrypto
.
然后输入以下命令:
cd ~/.local/share/letsencrypt/bin/
./pip uninstall cryptography pyopenssl -y
./pip install --upgrade pip
rm -rf ~/.cache/
./pip install cryptography pyopenssl
你完成了,一切都应该正常工作。