Ich habe gerade Python3 von python.org installiert und habe Probleme beim Installieren von Paketen mit pip
. Standardmäßig gibt es hier im Netzwerk eine Man-in-the-Middle-Appliance für die Paketinspektion, die alle Pakete (einschließlich SSL) überprüft, indem alle SSL-Verbindungen mit einem eigenen Zertifikat gekündigt werden. Ein Teil des Gruppenrichtlinienobjekts überträgt das benutzerdefinierte Stammzertifikat in den Windows-Keystore.
Wenn ich bei Verwendung von Java auf externe https-Sites zugreifen muss, muss ich die Cacerts in der JVM manuell aktualisieren, um dem selbstsignierten CA-Zertifikat zu vertrauen.
Wie schaffe ich das für Python? Wenn ich gerade versuche, Pakete mit pip
verständlicherweise zu installieren , erhalte ich wunderbare [SSL: CERTIFICATE_VERIFY_FAILED]
Fehler.
Mir ist klar, dass ich sie mit dem --trusted-host
Parameter ignorieren kann, aber ich möchte das nicht für jedes Paket tun, das ich installieren möchte.
Gibt es eine Möglichkeit, den von Python verwendeten CA-Zertifikatspeicher zu aktualisieren?
Antworten:
Selbstsignierte Zertifizierungsstellen
pip
/conda
Nachdem wir ein ähnliches Problem mit Git ausführlich dokumentiert haben ( Wie kann ich Git dazu bringen, ein selbstsigniertes Zertifikat zu akzeptieren? ), Befinden wir uns wieder hinter einer Unternehmensfirewall mit einem Proxy, der uns einen MitM- "Angriff" gibt , dem wir vertrauen sollten, und:
tl; dr
pip config set global.cert path/to/ca-bundle.crt pip config list conda config --set ssl_verify path/to/ca-bundle.crt conda config --show ssl_verify # Bonus while we are here... git config --global http.sslVerify true git config --global http.sslCAInfo path/to/ca-bundle.crt
Aber woher bekommen wir
ca-bundle.crt
?Holen Sie sich ein aktuelles CA-Bundle
cURL veröffentlicht einen Auszug der mit Mozilla Firefox gebündelten Zertifizierungsstellen
https://curl.haxx.se/docs/caextract.html
Ich empfehle Ihnen, diese
cacert.pem
Datei in einem Texteditor zu öffnen, da wir dieser Datei unsere selbstsignierte Zertifizierungsstelle hinzufügen müssen.Zertifikate sind ein Dokument, das X.509 entspricht. Sie können jedoch auf verschiedene Arten auf der Festplatte codiert werden. Der folgende Artikel ist eine gute Lektüre, aber die Kurzversion besagt, dass es sich um die Base64-Codierung handelt, die in den Dateierweiterungen häufig als PEM bezeichnet wird. Sie werden sehen, dass es das Format hat:
https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them
Erhalten Sie unser selbstsigniertes Zertifikat
Im Folgenden finden Sie einige Optionen, wie Sie unser selbstsigniertes Zertifikat erhalten:
Holen Sie sich unser selbstsigniertes Zertifikat von OpenSSL CLI
/unix/451207/how-to-trust-self-signed-certificate-in-curl-command-line/468360#468360
echo quit | openssl s_client -showcerts -servername "curl.haxx.se" -connect curl.haxx.se:443 > cacert.pem
Holen Sie sich unsere selbstsignierte Zertifizierungsstelle über den Browser
Dank dieser Antwort und des verknüpften Blogs werden Schritte (unter Windows) zum Anzeigen des Zertifikats und zum Kopieren in eine Datei mithilfe der Base64-PEM-Codierungsoption angezeigt.
Kopieren Sie den Inhalt dieser exportierten Datei und fügen Sie ihn am Ende Ihrer
cacerts.pem
Datei ein.Benennen Sie diese Datei aus Gründen der Konsistenz um
cacerts.pem
->ca-bundle.crt
und platzieren Sie sie an einem einfachen Ort wie:# Windows %USERPROFILE%\certs\ca-bundle.crt # or *nix $HOME/certs/cabundle.crt
Holen Sie sich unsere selbstsignierte Zertifizierungsstelle über Python
Vielen Dank an alle brillanten Antworten in:
Wie erhalte ich ein SSL-Antwortzertifikat von Anfragen in Python?
Ich habe Folgendes zusammengestellt, um zu versuchen, noch einen Schritt weiter zu gehen.
https://github.com/neozenith/get-ca-py
Schließlich
Stellen Sie die Konfiguration in pip und conda so ein, dass sie weiß, wo sich dieser CA-Speicher mit unserer zusätzlichen selbstsignierten CA befindet.
pip config set global.cert %USERPROFILE%\certs\ca-bundle.crt conda config --set ssl_verify %USERPROFILE%\certs\ca-bundle.crt
ODER
pip config set global.cert $HOME/certs/ca-bundle.crt conda config --set ssl_verify $HOME/certs/ca-bundle.crt
DANN
pip config list conda config --show ssl_verify # Hot tip: use -v to show where your pip config file is... pip config list -v # Example output for macOS and homebrew installed python For variant 'global', will try loading '/Library/Application Support/pip/pip.conf' For variant 'user', will try loading '/Users/jpeak/.pip/pip.conf' For variant 'user', will try loading '/Users/jpeak/.config/pip/pip.conf' For variant 'site', will try loading '/usr/local/Cellar/python/3.7.4/Frameworks/Python.framework/Versions/3.7/pip.conf'
Verweise
quelle
Ausführen:
python -c "import ssl; print(ssl.get_default_verify_paths())"
Zum Überprüfen der aktuellen Pfade, die zum Überprüfen des Zertifikats verwendet werden. Fügen Sie einem dieser Dokumente das Stammzertifikat Ihres Unternehmens hinzu.Der Pfad
openssl_capath_env
zeigt auf die Umgebungsvariable :SSL_CERT_DIR
.Wenn
SSL_CERT_DIR
es nicht vorhanden ist, müssen Sie es erstellen und auf einen gültigen Ordner in Ihrem Dateisystem verweisen. Sie können dann Ihr Zertifikat zu diesem Ordner hinzufügen, um es zu verwenden.quelle
/usr/local/ssl/certs
.~/.config/pip/pip.conf
mit den erforderlichen Einstellungen erstellt. Siehe diese Antwort .Nicht die beste Antwort, aber Sie können ein bereits erstelltes Ca-Bundle mit der folgenden
--cert
Option wiederverwendenpip
:pip install SQLAlchemy==1.1.15 --cert="C:\Users\myUser\certificates\my_ca-bundle.crt"
quelle
Unter Windows habe ich es gelöst, indem ich eine pip.ini-Datei in% APPDATA% \ pip \ erstellt habe
zB C: \ Users \ asmith \ AppData \ Roaming \ pip \ pip.ini
In der pip.ini habe ich den Pfad zu meinem Zertifikat angegeben:
[global] cert=C:\Users\asmith\SSL\teco-ca.crt
Unter https://pip.pypa.io/en/stable/user_guide/#configuration finden Sie weitere Informationen zur Konfigurationsdatei.
quelle
Eine alternative Lösung unter Windows ist die Installation von python-certifi-win32, mit der Python den Windows-Zertifikatspeicher verwenden kann.
quelle
Öffnen Sie Anaconda Navigator.
Gehen Sie zu Datei \ Einstellungen.
SSL-Überprüfung aktivieren Deaktivieren (nicht empfohlen)
oder SSL-Zertifikatpfad aktivieren und angeben (optional)
Aktualisieren Sie ein Paket auf eine bestimmte Version:
Wählen Sie oben rechts installieren
Paket auswählen auf Häkchen klicken
Zum Aktualisieren markieren
Markieren Sie für die Installation einer bestimmten Version
Klicken Sie auf Übernehmen
quelle