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を使用します。