libssl.so.1.1: 无法打开共享对象文件:没有那个文件或目录。

107
我刚刚升级到了Ubuntu 22.04 LTS,我的使用OpenSSL的库突然停止工作了。看起来Ubuntu切换到了版本3.0的OpenSSL。
例如,Poetry就停止工作了:
Traceback (most recent call last):
  File "/home/robz/.local/bin/poetry", line 5, in <module>
    from poetry.console import main
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/__init__.py", line 1, in <module>
    from .application import Application
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/application.py", line 7, in <module>
    from .commands.about import AboutCommand
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/commands/__init__.py", line 4, in <module>
    from .check import CheckCommand
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/console/commands/check.py", line 2, in <module>
    from poetry.factory import Factory
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/factory.py", line 18, in <module>
    from .repositories.pypi_repository import PyPiRepository
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/repositories/pypi_repository.py", line 33, in <module>
    from ..inspection.info import PackageInfo
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/inspection/info.py", line 25, in <module>
    from poetry.utils.env import EnvCommandError
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/poetry/utils/env.py", line 23, in <module>
    import virtualenv
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/__init__.py", line 3, in <module>
    from .run import cli_run, session_via_cli
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/run/__init__.py", line 11, in <module>
    from ..seed.wheels.periodic_update import manual_upgrade
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/__init__.py", line 3, in <module>
    from .acquire import get_wheel, pip_wheel_env_run
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/acquire.py", line 12, in <module>
    from .bundle import from_bundle
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/bundle.py", line 4, in <module>
    from .periodic_update import periodic_update
  File "/home/robz/.local/share/pypoetry/venv/lib/python3.9/site-packages/virtualenv/seed/wheels/periodic_update.py", line 10, in <module>
    import ssl
  File "/home/robz/.pyenv/versions/3.9.10/lib/python3.9/ssl.py", line 98, in <module>
    import _ssl             # if we can't import it, let the error propagate
ImportError: libssl.so.1.1: cannot open shared object file: No such file or directory

有没有简单的解决方法?例如,是否可以在不卸载 OpenSSL 3 的情况下使用 libssl.so.1.1(我不知道这是否可能)。


4
我建议您重新安装虚拟环境:ssl 模块需要使用更新的系统库进行重建。 - larsks
3
这就是我所做的,运行得非常好! - RobinFrcd
14个回答

233
这是解决22.04版本中包装问题的方法:
wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb

sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb

PS:如果链接已过期,请检查http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/?C=M;O=D以获取有效链接。
当前版本为:libssl1.1_1.1.1f-1ubuntu2.19_amd64.deb

3
那给了我一个404错误。 - Gert Sønderby
6
这解决了我从21升级到22.04后遇到的多个问题,谢谢!请注意:该文件现在似乎被命名为 "libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb"。如果缺少此文件将阻止upower守护程序运行,这会导致我的笔记本电池无法识别(journalctl -xe -u upower)。 - Josh Honig
17
这看起来非常靠不住 - 没有官方网站/仓库/方法可以做到这一点吗? - niico
3
@niico 那是官方的Ubuntu网站。 - Goigle
3
我认为有一个通用(未版本化的).deb可用:http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb。这对我有用,也许是指向最新版本.deb的永久链接。 - P.R.
显示剩余13条评论

63
安装openssl-1.1.1oUbuntu 22.04上是有风险的,因为它支持openssl-3.0.2。更好的方法是构建并将libssl.so.1.1libcrypto.so.1.1库放在根目录之外,并根据需要导出LD_LIBRARY_PATH

e.g.,

$ mkdir $HOME/opt && cd $HOME/opt
# Download a supported openssl version. e.g., openssl-1.1.1o.tar.gz or openssl-1.1.1t.tar.gz
$ wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
$ tar -zxvf openssl-1.1.1o.tar.gz
$ cd openssl-1.1.1o
$ ./config && make && make test
$ mkdir $HOME/opt/lib
$ mv $HOME/opt/openssl-1.1.1o/libcrypto.so.1.1 $HOME/opt/lib/
$ mv $HOME/opt/openssl-1.1.1o/libssl.so.1.1 $HOME/opt/lib/

然后

export LD_LIBRARY_PATH=$HOME/opt/lib:$LD_LIBRARY_PATH

根据需要进行操作。如果您希望始终启用此导出功能,也可以将其放在~/.bashrc等文件中。
这种方法的优点是,如果您需要从计算机中删除openssl-1.1.1,那么这是很容易的。您还可以通过使用正确的LD_LIBRARY_PATH或在链接期间提供库路径来进行选择和操作。

2
虽然这解决了标题中提到的错误,但现在我遇到了像SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)这样的错误,有什么线索吗?编辑:我将您的解决方案(~/.bashrc部分的导出)与此结合解决了问题:https://deanpcmad.com/2022/installing-older-ruby-versions-on-ubuntu-22-04/ - Tashows
2
这个回答真的应该有更多的赞。感谢您的回答,这绝对是这里首选的方式! - JamesD
1
在撰写本文时,如上所述的 1.1.1o 无法编译(证书问题?),但 1.1.1t 可以正常工作。 - paws
1
@paws 根据您的评论,我已经更新了答案。谢谢! - A. K.

13

我在升级到Ubuntu 22.04时遇到了问题。

我使用pyenv

对于我来说,解决方案是重新安装已经安装的Python版本:

  • list of installed versions:
    $ pyenv versions
    
  • reinstall every version, eg for 3.9.6:
    $ pyenv install 3.9.6
    
    pyenv: /home/slesage/.pyenv/versions/3.9.6 already exists
    continue with installation? (y/N) y
    Downloading Python-3.9.6.tar.xz...
    -> https://www.python.org/ftp/python/3.9.6/Python-3.9.6.tar.xz
    Installing Python-3.9.6...
    Installed Python-3.9.6 to /home/slesage/.pyenv/versions/3.9.6
    

13
下载并安装libssl1.1
wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.20_amd64.deb

2
截至2022年9月13日,这个程序可以正常工作。 - Andre DeCarlo

12
我通过以下方式解决了这个问题:
wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -zxvf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test
sudo make install
find / -name libssl.so.1.1
ln -s /usr/local/lib64/libssl.so.1.1  /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libssl.so.1.1  /usr/lib/libssl.so.1.1
find / -name libcrypto.so.1.1
ln -s /home/ubuntu/openssl-1.1.1o/libcrypto.so.1.1    /usr/lib64/libcrypto.so.1.1
ln -s /home/ubuntu/openssl-1.1.1o/libcrypto.so.1.1     /usr/lib/libcrypto.so.1.1

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community
我不得不在/usr/lib中创建类似的符号链接,所以这就是解决我的问题的方法。(尽管顶部仍然缺少一个tar命令。) - Gert Sønderby
什么是进入openssl-1-1-1o文件夹的路径 - 它找不到该文件夹。 - niico

11

我在使用nodejs时遇到了与nvm环境相关的相同问题。在ubuntu jammy中,我没有找到任何带有libopenssl1.1的deb软件包,最终我手动安装了它。

wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -zxvf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test
sudo make install

注意: 最新版本的openssl可以从OpenSSL下载。上述版本仅为举例。

1
当我切换到带有makemkv的Ubuntu 22.04时,我遇到了这个问题。按照说明安装openssl并重新编译makemkv就解决了问题。尽管我错过了第2行之前的tar -xzf openssl-1.1.1o.tar.gz - rominator007
1
openssl-1.1.1o 的路径是什么? - niico

10

快速安装libssl1.1的方法

更新于2022/11/09

$ echo "deb http://security.ubuntu.com/ubuntu focal-security main" | sudo tee /etc/apt/sources.list.d/focal-security.list
$ apt-get update && \
    apt-get install libssl1.1
$ dpkg -L libssl1.1
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/engines-1.1
/usr/lib/x86_64-linux-gnu/engines-1.1/afalg.so
/usr/lib/x86_64-linux-gnu/engines-1.1/capi.so
/usr/lib/x86_64-linux-gnu/engines-1.1/padlock.so
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1      <---
/usr/lib/x86_64-linux-gnu/libssl.so.1.1         <---
/usr/share
/usr/share/doc
/usr/share/doc/libssl1.1
/usr/share/doc/libssl1.1/NEWS.Debian.gz
/usr/share/doc/libssl1.1/changelog.Debian.gz
/usr/share/doc/libssl1.1/copyright


2022/11/06更新

# /usr/local/bin/mysql -uroot -h127.0.0.1 -p
/usr/local/bin/mysql: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

$ ldd /usr/local/bin/mysql
    linux-vdso.so.1 (0x00007fff1e576000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f7e6db3e000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7e6db39000)
    libcrypto.so.1.1 => not found
    libssl.so.1.1 => not found
    libresolv.so.2 => /lib/x86_64-linux-gnu/libresolv.so.2 (0x00007f7e6db25000)
    librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f7e6db1e000)
    libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007f7e6daf8000)
    libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f7e6dac9000)
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7e6d89d000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f7e6d7b6000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f7e6d796000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7e6d56c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f7e6db4b000)

$ wget -c https://www.openssl.org/source/openssl-1.1.1s.tar.gz && \
    tar xf openssl-1.1.1s.tar.gz && \
    cd openssl-1.1.1s/ && \
    ./config --prefix="/usr/local/openssl" && \
    make && \
    make test && \
    make install && \
    export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH" >> /etc/profile.d/startEnv.sh && \
    echo "export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH" >> /etc/profile.d/startEnv.sh && \
    echo $LD_LIBRARY_PATH

6

恢复全部。

针对Ubuntu 22.04的解决方案

问题之前的环境:pyenv -> poetry

不要尝试通过pyenv、poetry、pip等方式修复ssl库!只需执行以下操作:

wget https://www.openssl.org/source/openssl-1.1.1o.tar.gz
tar -zxvf openssl-1.1.1o.tar.gz
cd openssl-1.1.1o
./config
make
make test      (failed 2 tests)
sudo make install (on this moment you can't install python by pyenv)
sudo find / -name libssl.so.1.1
sudo ln -s /usr/local/lib/libssl.so.1.1  /usr/lib/libssl.so.1.1
sudo find / -name libcrypto.so.1.1
sudo ln -s /usr/local/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1

现在您可以通过pyenv安装Python,并且所需的软件包必须正常工作。

3

好在我正在使用pyenv来管理系统上的Python版本。

之前我使用的是Python 3.9.10,在Ubuntu 22.04上遇到了SSL错误。

我刚刚卸载了Python 3.9.10并安装了3.9.12,将其设置为全局版本,问题得到了解决。

pyenv uninstall 3.9.10
pyenv install 3.9.12
pyenv global 3.9.12

curl -sSL https://install.python-poetry.org | python3 -

正如@larsks所建议的那样,只需重新安装环境即可(甚至不需要升级Python版本)。重新安装环境将使用当前已安装的系统库。

2

最顶尖的推荐答案提供的链接已经过时了,这是最新的链接。

wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.17_amd64.deb && sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb

谢谢!但应该是 && sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.17_amd64.deb - Dmitrijs Rekuns

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接