How's that again?

Python 3

SSL в requests

Если для доступа к каким-либо внутренним ресурсам нужно использовать самоподписанный сертификат, то придется немного поприседать

Python 3.5 и раньше

Нужно указать путь к самоподписанному сертификату в переменной окружения REQUESTS_CA_BUNDLE

Python 3.6 (Mac OS X)

В Mac OS X Начиная с 3.6 requests использует центры сертификации, которые берет из модуля certifi.

Поэтому чтобы добавить туда свой CA, нужно сделать так:

Создаем скрипт import_ca.py:

import certifi
import requests
import sys
# source: https://incognitjoe.github.io/adding-certs-to-requests.html
if __name__ == '__main__':
  cafile = certifi.where()

  with open('{}.pem'.format(sys.argv[1]), 'rb') as infile:
    customca = infile.read()

  with open(cafile, 'ab') as outfile:
    outfile.write(customca)

  print('That might have worked.') 

Затем в шелле выполняем:

export CERT_NAME=<путь к сертификату CA без расширения>

openssl x509 -in $CERT_NAME.crt -out $CERT_NAME.pem -outform PEM
pip3 install certifi
python3 ./import_ca.py $CERT_NAME

Обязательно после этого нужно удалить свой REQUESTS_CA_BUNDLE из переменных окружения, иначе все еще будет использоваться неверный сертификат.

Если используется venvs, то это нужно сделать для каждого виртуального окружения.