首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未定义符号: OPENSSL_sk_num

未定义符号: OPENSSL_sk_num
EN

Stack Overflow用户
提问于 2017-02-08 10:56:23
回答 3查看 13.6K关注 0票数 7

我正在尝试用让我们加密更新Certbot证书。它停止工作了,我不知道为什么。以下是错误:

代码语言:javascript
运行
复制
ImportError: /root/.local/share/letsencrypt/local/lib/python2.7/site-packages/cryptography/
hazmat/bindings/_openssl.so: undefined symbol: OPENSSL_sk_num

我安装了最新的OpenSSL版本

代码语言:javascript
运行
复制
OpenSSL 1.1.0d  26 Jan 2017

我尝试通过以下操作调试此问题。首先,我尝试在python控制台中添加导入OpenSSL。它运行得很完美,没有错误。但当我尝试

代码语言:javascript
运行
复制
. ~/.local/share/letsencrypt/bin/activate

然后>>> import OpenSSl,我得到错误:

代码语言:javascript
运行
复制
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/ path,然后再次尝试运行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。我怎样才能改变它,让它加密使用更新的库?

溶液

经过一番挣扎。我刚刚重新安装了openssl版本1.1.0c。从另一个项目中复制的让我们加密的库,它就成功了。我想是升级毁了它。所以我建议大家,当你运行时,让加密只使用--不-自我升级选项。

解决方案更新

在再次遇到这个问题后,我决定以正确的方式解决它。因此,基本上您需要使用命令重新编译openssl 1.1.0c:

./config -Wl,--enable-new-dtags,-rpath,'$(LIBRPATH)'make

将已编译的libcrypto.so.1.1libssl.so.1.1复制到/usr/lib/x86_64-linux-gnu

然后,您需要重做或修改libcryptolibssl符号链接。在/usr/lib/x86_64-linux-gnu文件夹中输入命令ln -s libssl.so.1.1 libsslln -s libcrypto.so.1.1 libcrypto

然后输入以下命令:

代码语言:javascript
运行
复制
cd ~/.local/share/letsencrypt/bin/
./pip uninstall cryptography pyopenssl -y
./pip install --upgrade pip
rm -rf ~/.cache/
./pip install cryptography pyopenssl

你已经做好了,一切都应该正常工作。

EN

Stack Overflow用户

发布于 2017-07-27 07:46:06

我在Centos 7上安装Python3.6.2时遇到了这个错误,它被称为openssl 1.0.1e,我下载openssl 1.1.0.e。在接下来的步骤之后,它正确地工作了。

代码语言:javascript
运行
复制
cd ${openssl_src_path}

在我的例子中,${openssl_src_path} is '/usr/local/server/openssl-1.1.0e‘

代码语言:javascript
运行
复制
./configure --prefix=/usr/local --openssldir=/usr/local/openssl

make
make test
make install

正确安装OpenSSL后,安装Python3.6.2

代码语言:javascript
运行
复制
cd ${python_src_path}/Modules

修改“安装程序”文件,更改日志:

代码语言:javascript
运行
复制
    SSL=/usr/local/openssl
_ssl _ssl.c \
    -DUSE_SSL -I/usr/local/openssl/include -I/usr/local/openssl/include/openssl \
    -L/usr/local/openssl/lib -lssl -lcryptoere

‘'SSL=/usr/local/ OpenSSL’是OpenSSL参数的值--openssldir‘.and,确保DUSE_SSL目录存在。

代码语言:javascript
运行
复制
cd ${python_src_path}
./configure
make
make install

希望能帮上忙。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42111198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档