Как работать с апи если сайт требует SSL сертификат?

У меня есть некая программа для работы с апи DevOps. Получение данных с одного DevOps и создание user story/tasks в другом. Функция получения данных будет ниже. Но недавно нам сказали установить SSL сертификат и заходить в девопс теперь можно только через VPN компании. Соответственно, теперь появляется такая ошибка. Я совсем не знаю куда двигаться

raise SSLError(e, request=request)

requests.exceptions.SSLError: HTTPSConnectionPool(host='devops.xregernd.local', port=443): Max retries exceeded with url: /Support/Maergt/_apis/wit/workitems/$User%20Story?api-version=5.1 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1122)')))

def GetUSInfo(id_):

url_get_m = f'http://devops.xpa123re.com:8181/support/Mat/_apis/wit/workitems/{id_}?api-version=5.1'

r = requests.get(url_get_m,
    auth=(user_name_x, token_x))
res = r.json()

workType = res['fields']['System.WorkItemType']

if workType != "User Story":
    return False, False, False, "Not a User Story"
id_ = res['id']
title = res['fields']['System.Title']
description = res['fields']['System.Description']
return id_, title, description, "OK"

Ответы (1 шт):

Автор решения: asanisimov

В библиотеке requests по умолчанию включена проверка SSL сертификатов как в браузере. В вашем случае проверка не удалась, получили ошибку SSLError - unable to get local issuer certificate. Для более глубокого понимания вопроса, Вам стоит прочитать про SSL сертификаты.

В request для отключения проверки сертификата используется передача соответствующего параметра verify = False:

requests.get(url, verify=False)

Для передачи сертификата:

requests.get(url, verify='/path/to/certfile')
# или в сессии
session = requests.Session()
session.verify = '/path/to/certfile'

Для получения сертификата для библиотеки request можно использовать certifi.

import certifi
certifi.where()  # out: '/path/to/python_dir/site-packages/certifi/cacert.pem'
→ Ссылка