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