Как работать с Python-запросами на хостах, поддерживающих только TLS 1.0 - PullRequest
0 голосов
/ 18 апреля 2019

используя OPENSSL_VERSION: OpenSSL 1.1.0j и пытаясь подключиться к хосту, который, кажется, поддерживает только шифры TLS 1.0, и получая ошибку в _sslobj.do_handshake ().

import OpenSSL
import requests
from urllib.request import urlopen
import ssl
...

url = 'https://slpin.universalservice.org/'
urlopen(url).read()

1 Ответ

0 голосов
/ 18 апреля 2019

Как видно из этого отчета о SSLLabs сервер, к которому вы пытаетесь получить доступ, ужасно сломан.Он получает оценку F (наихудшее), что в основном связано с его ужасными небезопасными шифрами:

enter image description here

Единственное не ужасное, но только слабое использование шифров3DES.Из-за этой уязвимости этот шифр, вероятно, не включен в сборку openssl на вашей платформе (например, в системах на основе Debian и Debian, таких как Ubuntu, этот шифр не включен).

Это означает, что единственный способ получить доступ к серверу из скрипта Python - это использовать версию Python, связанную с более старой версией OpenSSL или связанную с современной версией, но с явно включенным этим шифром.Даже в этом случае вам, вероятно, потребуется специально включить 3DES, так как это временно отключено urllib.Таким образом, когда Python собирается с OpenSSL, в который включена поддержка 3DES, должно работать следующее:

import ssl
from urllib.request import urlopen

url = 'https://slpin.universalservice.org/'
ctx = ssl.create_default_context()
ctx.set_ciphers('3DES')
urlopen(url, context = ctx).read()

В моем случае это дает 403 Forbidden, что соответствует тому, что я получаю, когда посещаю этот URL с помощью браузера..

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