【问题标题】:unable to get local issuer certificate in fresh image无法以新图像获得本地颁发者证书
【发布时间】:2018-09-20 00:44:40
【问题描述】:

我创建了一个新的 Docker 映像:

FROM ubuntu:18.04

# Install dependencies
RUN apt-get update
RUN apt-get install -y build-essential g++ curl openssl libssl-dev apache2-utils git libxml2-dev sshfs libbz2-dev libsqlite3-dev tk-dev libffi-dev libreadline-dev libfreetype6-dev libpng-dev

# Install Python
RUN curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
RUN echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile && \
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile && \
    echo 'eval "$(pyenv init -)"' >> ~/.bash_profile && \
    echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
RUN source ~/.bash_profile && \
    pyenv install 3.7-dev && \
    pyenv virtualenv 3.7-dev venv && \
    pyenv global venv && \
    pip install -U pip

但是,在容器中运行此程序后,由于证书问题,我无法访问任何网站。这在 Python(3.6 和 3.7)和 openssl 中都会发生:

openssl s_client -connect discordapp.com:443
openssl s_client -connect python.org:443
openssl s_client -connect google.com:443

全部返回相同的错误:Verify return code: 20 (unable to get local issuer certificate)

在 Python 中,它给了我(当 discord.py 尝试连接到 discordapp.com 时:

SSL handshake failed on verifying the certificate
protocol: <asyncio.sslproto.SSLProtocol object at 0x7fd78479c6d8>
transport: <_SelectorSocketTransport fd=6 read=polling write=<idle, bufsize=0>>
Traceback (most recent call last):
  File "/root/.pyenv/versions/3.7-dev/lib/python3.7/asyncio/sslproto.py", line 625, in _on_handshake_complete
    raise handshake_exc
  File "/root/.pyenv/versions/3.7-dev/lib/python3.7/asyncio/sslproto.py", line 189, in feed_ssldata
    self._sslobj.do_handshake()
  File "/root/.pyenv/versions/3.7-dev/lib/python3.7/ssl.py", line 763, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1048)
SSL error in data received

我尝试使用 apt-get install ca-certificates 更新我的证书,但命令指出此软件包已经是最新的。

我该如何解决这个问题?

【问题讨论】:

  • 您在运行 Python 代码时看到的完整错误是什么?
  • 已更新以包含 python 错误。
  • 你试过here的解决方案了吗?
  • 这些解决方案似乎是针对 Mac OS X 的。我没有找到适用于 Ubuntu 18.04 的等效解决方案。

标签: docker ubuntu openssl


【解决方案1】:

请尝试一下。

openssl s_client -connect python.org:443 -verify false -debug

如果你想禁用验证,使用我上面写的命令。

-debug 是可选的。

我认为这是一个重复的话题,因为问题不在于 docker,而在于 OpenSSL 控制台语法。

检查这个:OpenSSL unable to get local issuer certificate unless CAfile is explicitly specified

其实,你必须找到你的-CApath目录。您的证书在那里。

您还需要通用 CAcert,因此请访问此站点: https://curl.haxx.se/docs/caextract.html.

希望对您有所帮助。 祝你好运。

【讨论】:

  • 我为什么要绕过证书验证?
  • 随心所欲地做你想做的事。如果您想绕过,我会提供一个解决方案,或者提供修复证书的解决方案。检查第一个链接。
猜你喜欢
  • 2016-04-20
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 2022-06-21
  • 2017-08-31
  • 2018-07-04
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多