Urllib Python3, чтобы проверить самоподписанный сертификат - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу сделать проверенный запрос (используя urllib в Python 3.5) на URL, который использует мой самоподписанный сертификат.

Вот минимальный пример:

import ssl
from urllib.request import urlopen
from urllib.error import URLError

# <version 1>
ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
ssl_ctx.verify_mode = ssl.CERT_REQUIRED
ssl_ctx.load_cert_chain(certfile="/path/to/cert.pem", keyfile="/path/to/cert.key")
# </version 1>

try:
    urlopen("https://localhost/", context=ssl_ctx)
except URLError as e:
    print(e)

Это печатает:

<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:720)>
  • Я проверил значение ssl_ctx.get_ca_certs() -> []
  • Я также проверил значение ssl_ctx.cert_store_stats() -> {'x509_ca': 0, 'crl': 0, 'x509': 0}

Как указано ответом для Python 3 urllib с самозаверяющими сертификатами , я могу обойти это с помощью:

# <version 2>
ssl_ctx = ssl.create_default_context()
ssl_ctx.check_hostname = False
ssl_ctx.verify_mode = ssl.CERT_NONE
# </version 2>

Но есть ли способ на самом деле проверить мой сертификат?

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