Сертификаты для внутренних сервисов я выпускаю с помощью локального CA. Бывает так, что при работе в виртуальном окружении Python (venv), например, с каким-нибудь внутренним API по средством HTTPS запросов, вылезает ошибка:
1SSL: CERTIFICATE_VERIFY_FAILED
Связано это с тем, что наше виртуальное окружение, а точнее модуль certifi, ничего не знает о нашем локальном центре сертификации.
К счастью, на просторах инета нашлось простое решение1- добавить информацию о корневом сертификате в виртуальное окружение.
Для этого:
Копируем наш корневой CA-сертификат на машину, где развернуто виртуальное окружение;
Если сертификат не в формате PEM, то меняем формат:
1openssl x509 -inform DER -in CA-CERT.cer -out CA-CER-OUT.pem
- Выводим и копируем содержимое преобразованного сертификата:
1cat CA-CER-OUT.pem
Вставляем содержимое в файл ca-cert в нашем виртуальном окружении ./venv/lib/certifi/ca-cert;
Перезапускаем наше приложение - ошибка должна исчезнуть.