Сертификаты для внутренних сервисов я выпускаю с помощью локального 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;

  • Перезапускаем наше приложение - ошибка должна исчезнуть.