Как настроить Python-клиенты для работы с российскими TLS-сертификатами Минцифры
Разработчикам, использующим Python для взаимодействия с российскими API, подписанными сертификатами Минцифры, столкнулись с ошибкой "CERTIFICATE_VERIFY_FAILED", и теперь есть решение для точечной настройки доверия к таким сертификатам.
Проблема возникает из-за того, что стандартные библиотеки Python не распознают корневые сертификаты российской системы удостоверяющих центров, что приводит к сбоям при попытке установить защищённое соединение. Ранее разработчикам приходилось применять небезопасные методы, такие как полное отключение проверки SSL/TLS, что создавало риски для безопасности данных.
Предложено решение, позволяющее добавить доверие к сертификатам Минцифры только для конкретных Python-клиентов, не затрагивая системные настройки. Это достигается за счёт создания отдельного SSLContext с указанием промежуточного сертификата Минцифры в качестве "якоря доверия" и активацией флага VERIFY_X509_PARTIAL_CHAIN. Такой подход сохраняет высокий уровень безопасности, поскольку не отключает проверку сертификатов полностью.
Новый метод применим для популярных библиотек, таких как requests, aiohttp, httpx и urllib, что делает его универсальным для большинства проектов. Также подчёркивается важность сверки отпечатка сертификата для предотвращения подмены и действия в случае его замены. Это позволяет разработчикам безопасно интегрироваться с российскими сервисами, использующими отечественную криптографию.
Внедрение этой практики поможет обеспечить стабильность и безопасность взаимодействия между информационными системами, использующими российские API, минимизируя риски, связанные с ненадлежащей проверкой TLS-сертификатов.
Часто задаваемые вопросы
Почему Python выдаёт ошибку при работе с российскими API?
Python выдаёт ошибку "CERTIFICATE_VERIFY_FAILED", так как его стандартные библиотеки не доверяют корневым сертификатам российской системы удостоверяющих центров, используемым Минцифры.
Как безопасно настроить доверие к сертификатам Минцифры в Python?
Для безопасной настройки доверия нужно создать отдельный SSLContext, указав промежуточный сертификат Минцифры как "якорь", и активировать флаг VERIFY_X509_PARTIAL_CHAIN, не отключая проверку полностью.
Можно ли применить этот метод для всех популярных HTTP-библиотек Python?
Да, предложенный метод применим для большинства популярных HTTP-библиотек Python, включая requests, aiohttp, httpx и urllib.
Какие риски связаны с использованием флага VERIFY_X509_PARTIAL_CHAIN?
Использование флага VERIFY_X509_PARTIAL_CHAIN может ослабить некоторые аспекты проверки цепочки сертификатов, поэтому важно внимательно следить за отпечатками сертификатов и регулярно их проверять.
Источник: Habr · Rusability ИИ


Комментарии (0)
Без регистрации. Комментарии проверяются автоматически перед публикацией.
Пока нет комментариев. Будьте первым!