Python запрашивает «проверка сертификата не удалась» для определенного сертификата SNI - PullRequest
0 голосов
/ 17 июня 2019

Я использую инфраструктуру запросов Python для почти всех своих проектов уже много лет и не сталкивался с подобной проблемой.

Это происходит только для веб-сайта www.pagedna.com насколько я знаю.Воспроизводимый пример кода смехотворно прост:

import requests
requests.get("https://www.pagedna.com")

Браузеры Chrome / Firefox открывают этот сайт без проблем, но приведенный выше фрагмент кода дает мне исключение общего отказа SSL

Traceback (most recent call last):
  File "inline.py", line 2, in <module>
    requests.get("https://www.pagedna.com")
  File "/home/rishi/workspace/misc/venvs/mc3.4/lib/python3.4/site-packages/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/home/rishi/workspace/misc/venvs/mc3.4/lib/python3.4/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "/home/rishi/workspace/misc/venvs/mc3.4/lib/python3.4/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/rishi/workspace/misc/venvs/mc3.4/lib/python3.4/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/home/rishi/workspace/misc/venvs/mc3.4/lib/python3.4/site-packages/requests/adapters.py", line 514, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.pagedna.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError("bad handshake: Error([('SSL routines', 'tls_process_server_certificate', 'certificate verify failed')],)",),))

OpenSSLдает мне правильную информацию, если я использую аргумент servername

openssl s_client -showcerts -servername www.pagedna.com -connect www.pagedna.com:443

CONNECTED(00000003)
---
Certificate chain
 0 s:/OU=Domain Control Validated/CN=*.pagedna.com
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
-----BEGIN CERTIFICATE-----
MIIGrjCCBZagAwIBAgIJAJdLy96ULpdIMA0GCSqGSIb3DQEBCwUAMIG0MQswCQYD
VQQGEwJVUzEQMA4GA1UECBMHQXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEa
MBgGA1UEChMRR29EYWRkeS5jb20sIEluYy4xLTArBgNVBAsTJGh0dHA6Ly9jZXJ0
cy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5LzEzMDEGA1UEAxMqR28gRGFkZHkgU2Vj
dXJlIENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTE4MDcyNzE4MzUyMloX
DTIwMDkyNTE3MTExMVowOzEhMB8GA1UECxMYRG9tYWluIENvbnRyb2wgVmFsaWRh
dGVkMRYwFAYDVQQDDA0qLnBhZ2VkbmEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAt6B/jE5FjTKWdEtNj8oRxzqlk5fGjBfYbsKjdPuSi0t6i0a8
lN9yVYLhLM988s3XXvcU8E9d30aQ51JDjxtkID9VP4z4x8E/fWjGpJZ/Nh1XMrSf
rmIZEXr+SZzUBp2dISIJKgmNNr3vVWS4BmViL7YXxvgZzGiZwQRACkoFdfGkkGcT
h1WOPIYf7nzxyasLvddSN5j6BU4XgiTpdlJSWofXFdMJBFfHoTyLUiH+stMzE4wU
gA+oxKzRqhDHJ+L393i2mv4y2FXiQ0InTqyKRGGuX8zmoPirHCRAmMItk9gmUoi+
/3nDVnUlIG6LOgcXylVbn22W5WXN4iwtZ8TCVwIDAQABo4IDOTCCAzUwDAYDVR0T
AQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH/
BAQDAgWgMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly9jcmwuZ29kYWRkeS5jb20v
Z2RpZzJzMS04NTIuY3JsMF0GA1UdIARWMFQwSAYLYIZIAYb9bQEHFwEwOTA3Bggr

etc...

Однако, он дает мне другой сертификат, если опция -servername отсутствует, что, я подозреваю, является проблемой здесь.

Соответствующие установки пипса следующие:

pyOpenSSL==19.0.0
requests==2.21.0
requests-toolbelt==0.8.0

Использование python3.4

Является ли это ошибкой инфраструктуры запросов?Должен ли я открыть отчет об ошибке или я что-то упустил?

1 Ответ

0 голосов
/ 17 июня 2019

... но приведенный выше фрагмент дает мне исключение общего отказа SSL ...

 ...'tls_process_server_certificate', 'certificate verify failed')],)",),))

На самом деле это не общий сбой SSL. Это явно терпит неудачу, потому что это не могло проверить сертификат. И причина не в SNI, а в не-SNI, поскольку SNI по умолчанию используется в запросах в течение длительного времени.

Причина в неправильной настройке сервера. Из отчета SSLLabs :

Цепочка сертификатов этого сервера неполная. Оценка ограничена до B.

Браузеры Chrome / Firefox открывают этот сайт без проблем ...

Браузеры настольных компьютеров обычно успешно работают с этим типом неправильной конфигурации, например, кэшируя промежуточные сертификаты из других соединений и используя их для заполнения недостающих частей цепочки сертификатов. Но если вы попробуете, например, Firefox со свежим профилем, вы получите те же проблемы с SSL.

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