web-dev-qa-db-ja.com

SSL UNSUPPORTED_PROTOCOL Python 3 in Docker

Https経由でウェブサイトからデータを取得しようとして、SSL証明書でエラーが発生しましたが、Macで実行すると、すべて正常に動作します。

私もカールで試して同じエラーが出ました、

curl: (35) error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol

パーカーをDockerコンテナーMy Dockerfileで実行します。

FROM python:3.7

WORKDIR /parser
COPY ./requirements.txt .

RUN python -m pip install --upgrade pip

RUN pip install -r requirements.txt

COPY . /parser

以下のエラーが発生します:

 Traceback (most recent call last):                                                                                                                                                                                                       │
│     File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 672, in urlopen                                                                                                                                          │
│       chunked=chunked,                                                                                                                                                                                                                     │
│     File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 376, in _make_request                                                                                                                                    │
│       self._validate_conn(conn)                                                                                                                                                                                                            │
│     File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 994, in _validate_conn                                                                                                                                   │
│       conn.connect()                                                                                                                                                                                                                       │
│     File "/usr/local/lib/python3.7/site-packages/urllib3/connection.py", line 394, in connect                                                                                                                                              │
│       ssl_context=context,                                                                                                                                                                                                                 │
│     File "/usr/local/lib/python3.7/site-packages/urllib3/util/ssl_.py", line 370, in ssl_wrap_socket                                                                                                                                       │
│       return context.wrap_socket(sock, server_hostname=server_hostname)                                                                                                                                                                    │
│     File "/usr/local/lib/python3.7/ssl.py", line 423, in wrap_socket                                                                                                                                                                       │
│       session=session                                                                                                                                                                                                                      │
│     File "/usr/local/lib/python3.7/ssl.py", line 870, in _create                                                                                                                                                                           │
│       self.do_handshake()                                                                                                                                                                                                                  │
│     File "/usr/local/lib/python3.7/ssl.py", line 1139, in do_handshake                                                                                                                                                                     │
│       self._sslobj.do_handshake()                                                                                                                                                                                                          │
│   ssl.SSLError: [SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1076)                                                                                                                                                             │
│   During handling of the above exception, another exception occurred:                                                                                                                                                                      │
│   Traceback (most recent call last):                                                                                                                                                                                                       │
│     File "/usr/local/lib/python3.7/site-packages/requests/adapters.py", line 449, in send                                                                                                                                                  │
│       timeout=timeout                                                                                                                                                                                                                      │
│     File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 720, in urlopen                                                                                                                                          │
│       method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]                                                                                                                                                                      │
│     File "/usr/local/lib/python3.7/site-packages/urllib3/util/retry.py", line 436, in increment                                                                                                                                            │
│       raise MaxRetryError(_pool, url, error or ResponseError(cause))                                                                                                                                                                       │
│   urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(Host='life.pravda.com.ua', port=443): Max retries exceeded with url: /health/ (Caused by SSLError(SSLError(1, '[SSL: UNSUPPORTED_PROTOCOL] unsupported protocol (_ssl.c:1076)'))   │
│   )

私はそれがDockerまたは証明書に関するものではないと確信していますが、次のように、サーバーが通信できるプロトコルを確認する必要があります:

nmap --script ssl-enum-ciphers -p 443 this-is-your-site.com

次に、あなたのケースで機能するはずのSSLコンテキストを設定します:

import ssl
ssl_context = ssl.create_default_context()
# Sets up old and insecure TLSv1.
ssl_context.options &= ~ssl.OP_NO_TLSv1_3 & ~ssl.OP_NO_TLSv1_2 & ~ssl.OP_NO_TLSv1_1
ssl_context.minimum_version = ssl.TLSVersion.TLSv1

このマウントポイントthis-is-your-site.comにカスタムHTTPAdapterを使用します。

0
frost-nzcr4