Python certifi предоставляет «тщательно отобранную коллекцию сертификатов Mozilla для проверки достоверности сертификатов SSL при проверке подлинности хостов TLS». Она была взята из проекта Requests.
Установка certifi в Python
Чтобы установить пакет сертификации Python, введите следующую команду.
|
1 2 3 4 5 |
python3 -m pip install certifi # OR pip install certifi |
Если вы уже установили библиотеку requests, есть 100% вероятность того, что библиотека certifi также установлена, но вы должны это проверить. Библиотека запросов Python использует свой собственный файл CA по умолчанию или будет использовать пакет сертификатов пакета certifi, если он установлен.
Несмотря на то, что вы можете передать свой собственный пакет CA в запросы, чтобы переопределить по умолчанию, несколько сторонних пакетов используют запросы под капотом, и вы не можете быть уверены, что использовали пользовательское расположение для проверки.
Как установить сертификат Python в Windows
Чтобы установить сертификат Python в Microsoft Windows:
- Введите cmd в строке поиска и нажмите Enter, чтобы открыть командную строку.
- Введите python3 -m pip install certifi в командной строке и снова нажмите Enter. Это устанавливает certifi для установки Python по умолчанию.
- Предыдущая команда может не работать, если на вашем компьютере установлены версии Python 2 и 3. В этом случае попробуйте выполнить команду pip3 install certifi. Теперь он установлен в вашей системе.
Как установить сертификат Python в Linux
Чтобы установить сертификат Python в Linux:
- Сначала откройте терминал или оболочку в вашей ОС Linux.
- Введите python3 -m pip install certifi и нажмите Enter.
- Если это не сработает, попробуйте использовать эту команду: pip3 install certifi или python -m pip install certifi.
Python certifi.where()
Функция certifi.where() помогает нам найти ссылку на установленный пакет центра сертификации(CA) в Python.
|
1 2 3 |
import certifi print(certifi.where()) |
Выход
|
1 2 |
/Users/krunal/Library/Python/3.8/lib/python/site-packages/certifi/cacert.pem |
Вы также можете найти путь cacert.pem из командной строки, используя следующую команду.
|
1 2 |
python -m certifi /Users/krunal/Library/Python/3.8/lib/python/site-packages/certifi/cacert.pem |
Браузеры и центры сертификации пришли к выводу, что 1024-битные ключи неприемлемо слабы для сертификатов, особенно для корневых.
По той же причине Mozilla удаляет любой слабый (т. е. 1024-битный ключ) сертификат из своего пакета, заменив его эквивалентным надежным(т. е. 2048-битным ключом или выше) сертификатом от того же ЦС.
Примечание. Certifi не поддерживает добавление/удаление или изменение содержимого хранилища доверенных сертификатов ЦС.
Если вы поместите дополнительные сертификаты в файл пакета PEM, вы можете использовать эти две переменные среды для перезаписи хранилищ сертификатов по умолчанию, используемых Python OpenSSL и Requests.
|
1 2 |
SSL_CERT_FILE=/System/Library/OpenSSL/cert.pem REQUESTS_CA_BUNDLE=/System/Library/OpenSSL/cert.pem |
Тем не менее, мы можем быстро проверить это при запуске наших скриптов и автоматически обновить пакет ЦС с помощью данного ЦС, если это необходимо.
Во-первых, запишите свой собственный ЦС и сохраните его как PEM; вы можете преобразовать его с помощью OpenSSL.
Если у вас есть только .cer, .crt или .derenSSL.
|
1 |
openssl x509 -inform der -in certificate.cer -out certificate.pem |
Если у вас есть несколько пользовательских промежуточных или корневых файлов, вы можете добавить их все в один файл .pem при преобразовании. Перетащите файл certificate.pem в корень вашего проекта.
Теперь попробуем запросить целевой URL. В нашем случае это GitHub API, и если мы столкнемся с ошибкой сертификата, обновите пакет ЦС, используемый Certifi.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import certifi import requests try: print('Checking connection to Github...') test = requests.get('https://api.github.com') print('Connection to Github OK.') except requests.exceptions.SSLError as err: print('SSL Error. Adding custom certs to Certifi store...') cafile = certifi.where() with open('certicate.pem', 'rb') as infile: customca = infile.read() with open(cafile, 'ab') as outfile: outfile.write(customca) print('That might have worked.') |
Выход
|
1 2 |
Checking connection to Github... Connection to Github OK. |
Как исправить ModuleNotFoundError: нет модуля с именем «certifi»
Ошибка ModuleNotFoundError: нет модуля с именем «certifi» возникает, если либо модуль certifi установлен неправильно, либо вы забыли установить пакет certifi в Python.
Чтобы исправить ошибку ModuleNotFoundError: нет модуля с именем «certifi» в Python, сначала установите библиотеку certifi, используя «python3 -m pip install certifi» или «pip install certifi» в оболочке или терминале вашей операционной системы.
