Certyfikaty Pythona i pipa
Moduł ssl Pythona, requests i pip mogą ufać różnym listom. Znajdź tę, którą czyta program, który pada, zanim cokolwiek zmienisz.
Którą listę czyta Python
Moduł ssl Pythona ufa temu, co jego OpenSSL ma czytać. Na Linuksie to zwykle pakiet dystrybucji, na Windowsie magazyn certyfikatów Windows, który Python czyta za każdym razem, gdy program tworzy domyślny kontekst TLS (dokumentacja ssl). SSL_CERT_FILE kieruje go na inny plik.
Którą listę czyta pip
pip ma własną regułę (dokumentacja pip):
- od pip 24.2 pip używa
truststore, które pyta własny magazyn systemu operacyjnego - firmowy certyfikat główny, który dział IT umieścił w magazynie Windows, dociera do pipa, - przed 24.2 albo z
--use-deprecated=legacy-certspip ufa jednemu plikowi: pakietowicertifi, który ze sobą niesie, albo plikowi wskazanemu przezPIP_CERT, jego ustawieniecertalboREQUESTS_CA_BUNDLE.
Tak wskazany plik zastępuje listę certifi, a nie dokłada do niej.
Zobacz, czemu ufa każdy Python i pip
certdoctor https://pypi.org/
Każdy Python w PATH dostaje wiersz python, oceniany według listy, której ufa jego moduł ssl, a pip każdego Pythona dostaje wiersz pip, oceniany według własnej reguły pipa: truststore albo certifi i plik wskazany dla niego. L0 pokazuje, czy ustawiono SSL_CERT_FILE, REQUESTS_CA_BUNDLE albo PIP_CERT.
Dodaj certyfikat główny
Polecenie zależy od wiersza:
- Python na Windowsie: magazyn Windows tego konta,
certutil -user -addstore Root "<certificate.pem>". Windows prosi o potwierdzenie, a każdy Python uruchomiony później go czyta. - Python albo pip czytający plik: dopisanie certyfikatu głównego do tego pliku, tak jak wypisuje to wiersz. Każdy program czytający ten sam plik też zaczyna ufać certyfikatowi, a narzędzie, które utrzymuje plik -
update-ca-certificates,update-ca-trust- może go przepisać i zgubić dopisany certyfikat. Jak sprawić, żeby został, mówi poradnik pakiet CA Linuksa. - pip tylko na certifi, bez wskazanego pliku: bez polecenia, a wiersz mówi dlaczego - wskazanie pliku zastąpiłoby listę certifi. pip od 24.2 czyta zamiast tego magazyn systemu.
Python 3.13
Python 3.13 odrzuca też certyfikaty, które łamią ścisłe reguły OpenSSL. Gdy wiersz nazywa regułę, a nie nieznany urząd, dotyczy cię strona Python 3.13 certificate verify failed.
Czego nie robić
verify=False w requests i --trusted-host w pip pomijają weryfikację dla tych połączeń. Ukrywają problem, zamiast go naprawić.