невозможно получить сертификат местного эмитента в новом образе - PullRequest
0 голосов
/ 20 сентября 2018

Я создал новый образ 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, но команда заявляет, что этот пакет уже обновлен.

Как исправитьэто?

1 Ответ

0 голосов
/ 20 сентября 2018

Попробуйте, пожалуйста.

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

Если вы хотите отключить проверку, используйте команду, которую я пишу выше.

-debug isнеобязательно.

Я думаю, что это дублированный раздел, потому что проблема не в докере, а в синтаксисе консоли OpenSSL.

Проверьте это: OpenSSL не удалось получить локального эмитентасертификат, если CAfile явно не указан .

На самом деле, вы должны найти каталог -CApath .Там есть ваши сертификаты.

Вам также понадобится универсальный CAcert, поэтому посетите этот сайт: https://curl.haxx.se/docs/caextract.html.

Надеюсь, это будет полезно.Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...