URL-адрес Python3 для проверки самоподписанного сертификата

Я хочу сделать проверенный запрос (используя 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>

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


person Chen Levy    schedule 26.09.2018    source источник
comment
Что конкретно вы хотите проверить?   -  person Oliver Charlesworth    schedule 27.09.2018
comment
@oliver-charlesworth, я хочу убедиться, что сертификат ssl, который я получаю, действительно является моим самоподписанным сертификатом, или указать другой способ, учитывая, что я доверяю своему самоподписанному ключу, мой сеанс ssl должен быть действительным, и, следовательно, здесь нет шананигенов посередине.   -  person Chen Levy    schedule 27.09.2018
comment
Я считаю, что на этот вопрос был дан ответ здесь: stackoverflow.com/a/52961564/515368   -  person supermitch    schedule 15.07.2021