Проверка SSL-сертификата — важная мера безопасности при выполнении HTTPS-запросов в Python. Однако иногда вы можете столкнуться с сообщением об ошибке, например «urllib.error.URLError: Метод 1: отключение проверки SSL (не рекомендуется) Метод 2. Обновление библиотеки Certifi Метод 3. Предоставление пользовательского пакета ЦС Метод 4. Проверка сертификата сервера Ошибки проверки сертификата SSL могут доставлять неприятности, но с помощью методов, описанных в этой статье, вы можете устранить и устранить эти проблемы в своих приложениях Python. Не забывайте уделять приоритетное внимание безопасности и использовать проверку SSL в производственных средах. Отключение проверки SSL должно быть лишь временным решением для целей разработки и тестирования. Следуя этим методам, вы сможете обеспечить безопасную и надежную связь с HTTPS-серверами в вашем коде Python.
Если вы находитесь в среде разработки или доверяете серверу, вы можете временно отключить проверку SSL. Однако этот подход ставит под угрозу безопасность, и его следует использовать только с осторожностью. Вот пример отключения проверки SSL с использованием библиотеки requests
:import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
response = requests.get("https://example.com", verify=False)
Библиотека Certifi поддерживает набор доверенных сертификатов ЦС. Иногда ошибки проверки SSL возникают из-за устаревшего пакета сертификатов. Чтобы решить эту проблему, вы можете обновить Certifi до последней версии:import certifi
import urllib3
urllib3.contrib.pyopenssl.inject_into_urllib3()
urllib3.contrib.pyopenssl.DEFAULT_SSL_CIPHER_LIST = 'ECDHE+AESGCM'
http = urllib3.PoolManager(
cert_reqs='CERT_REQUIRED',
ca_certs=certifi.where()
)
response = http.request('GET', 'https://example.com')
Если обновление Certifi не решает проблему проверки SSL, вы можете предоставить собственный путь к пакету ЦС. Это позволяет вам вручную указать доверенные сертификаты CA. Вот пример использования модуля urllib.request
:import ssl
import urllib.request
custom_ca_bundle = '/path/to/custom_ca_bundle.pem'
context = ssl.create_default_context(cafile=custom_ca_bundle)
url = 'https://example.com'
req = urllib.request.Request(url)
response = urllib.request.urlopen(req, context=context)
В некоторых случаях сам сертификат SSL может быть недействительным или срок его действия истек. Вы можете вручную проверить данные сертификата с помощью модуля ssl
:import ssl
import urllib.request
url = 'https://example.com'
req = urllib.request.Request(url)
response = urllib.request.urlopen(req, context=ssl.create_default_context())
cert = response.getpeercert()
# Access the certificate details
print(cert)