[PYTHON] So installieren Sie Ihre eigene (Root-) Zertifizierungsstelle

Ich habe zusammengefasst, dass ich mein eigenes Stammzertifizierungsstellenzertifikat installieren muss. Wenn Sie verschiedene Tools und Anwendungen verwenden, können Sie nicht sagen, dass das Einstellen im Betriebssystem sicher ist, und es gibt viele Dinge, die zusätzlich zu den Betriebssystemeinstellungen individuell festgelegt werden müssen.

In diesem Artikel wird beschrieben, wie Sie Ihr eigenes Stammzertifizierungsstellenzertifikat für die folgenden Umgebungen und Tools festlegen:

  1. Ubuntu (18.04)
  2. Red Hat / CentOS (7)
  3. Python - certifi/requests/ssl
  4. Mozilla Firefox
  5. Mozilla Thunderbird
  6. Windows 10
  7. Splunk

Ubuntu (18.04)

  1. Erstellen Sie ein geeignetes (nicht schlampiges) Verzeichnis unter "/ usr / share / ca-certificates /". Hier ist es * mylokal *. (Im Folgenden wird es als "/ usr / share / ca-certificates /" * mylocal * "/" bezeichnet.) Das Verzeichnis dient zur Organisation nach Verwaltungsorganisationseinheiten. (Wahrscheinlich gibt es ein Verzeichnis namens "Mozilla /", aber ich werde es nicht berühren) Sie müssen kein Verzeichnis haben, aber ich denke, es ist einfacher, lokale später zu verwalten, wenn Sie sie in einem Verzeichnis organisieren.

  2. Legen Sie die Zertifikatdatei unter den erstellten Ordner * mylocal *. Hier ist es * mylocal-root-cacert.crt *. (/usr/share/ca-certificates/mylocal/mylocal-root-cacert.crt)

  3. Fügen Sie in / etc / ca-certificates.conf den relativen Pfad unter / usr / share / ca-certificates / der hinzugefügten Datei hinzu. Fügen Sie im obigen Beispiel "* mylocal * / * mylocal-root-cacert.crt *" hinzu.

  4. Führen Sie "update-ca-certificates" ("/ usr / sbin / update-ca-certificates") aus.

  5. Stellen Sie sicher, dass Sie einen symbolischen Link zu / usr / share / ca-certificates / * mylocal * / * mylocal-root-cacert.crt * unter / etc / ssl / certs / haben Bitte gib mir.

Ubuntu18.CA-Aktualisierungsverfahren in 04


# cd /usr/share/ca-certificates
# mkdir mylocal
# cp somewhere/mylocal-root-cacert.crt mylocal/
# cp -p /etc/ca-certificates.conf /etc/ca-certificates.conf.bak
# echo "mylocal/mylocal-root-cacert.crt" >> /etc/ca-certificates.conf
# update-ca-certificates
# ls -l /etc/ssl/certs/ | grep mylocal-root-cacert

Wenn dies korrekt durchgeführt wird, wird außerdem eine / etc / ssl / certs / ca-certificates.crt mit allen CA-Zertifikaten als CA-Bundle erstellt. Lesen Sie dies gegebenenfalls. Dann wäre es gut. Wenn Sie beispielsweise den Pfad des CA-Bundles im Argument "request ()" in Python angeben möchten.

update-ca-certificates aktualisiert automatisch / etc / ssl / certs / ca-certificates.crt, daher ist es strengstens verboten, eigene hinzuzufügen.

Red Hat / CentOS (7)

Siehe: [Red Hat Enterprise Linux 7 | Red Hat-Kundenportal - Verwenden freigegebener Systemzertifikate](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/security_guide/sec-shared] -Systemzertifikate)

Platzieren Sie die Zertifikatdatei unter "/ usr / share / pki / ca-trust-source / anchor /" und führen Sie "update-ca-trust" aus.

# cp somewhere/mylocal-root-cacert.crt /usr/share/pki/ca-trust-source/anchors/
# update-ca-trust
# ls -l /etc/pki/ca-trust/extracted/openssl/

Gleiches gilt unter / etc / pki / ca-trust / source / anchor /. / usr / share / pki dient der Abwärtskompatibilität und die Einstellung von / etc / share / pki` hat Vorrang. Das Zertifikat befindet sich unter "/ usr / share / pki / ca-trust-source / anchor /", sodass es für beide festgelegt werden kann.

Derzeit wird die Angabe eines Arguments für "update-ca-trust" ignoriert. Wenn Sie jedoch in das Skript schauen, heißt es in dem Kommentar, dass es in Zukunft "update-ca-trust extract" unterstützen wird. ..

(CentOS7) /bin/update-ca-trust


#!/bin/sh

#set -vx

# At this time, while this script is trivial, we ignore any parameters given.
# However, for backwards compatibility reasons, future versions of this script must
# support the syntax "update-ca-trust extract" trigger the generation of output
# files in $DEST.

DEST=/etc/pki/ca-trust/extracted

# OpenSSL PEM bundle that includes trust flags
# (BEGIN TRUSTED CERTIFICATE)
/usr/bin/p11-kit extract --comment --format=openssl-bundle --filter=certificates --overwrite $DEST/openssl/ca-bundle.trust.crt
/usr/bin/p11-kit extract --comment --format=pem-bundle --filter=ca-anchors --overwrite --purpose server-auth $DEST/pem/tls-ca-bundle.pem
/usr/bin/p11-kit extract --comment --format=pem-bundle --filter=ca-anchors --overwrite --purpose email $DEST/pem/email-ca-bundle.pem
/usr/bin/p11-kit extract --comment --format=pem-bundle --filter=ca-anchors --overwrite --purpose code-signing $DEST/pem/objsign-ca-bundle.pem
/usr/bin/p11-kit extract --format=java-cacerts --filter=ca-anchors --overwrite --purpose server-auth $DEST/java/cacerts

Verwenden Sie den Befehl "trust", um das von Ihnen festgelegte vertrauenswürdige CA-Zertifikat zu verwalten.

Vertrauensbefehl


$ trust
usage: trust command <args>...

Common trust commands are:
  list             List trust or certificates
  extract          Extract certificates and trust
  extract-compat   Extract trust compatibility bundles
  anchor           Add, remove, change trust anchors
  dump             Dump trust objects in internal format

See 'trust <command> --help' for more information

Sie können die konfigurierte Zertifizierungsstelle mit dem Befehl trust löschen oder ändern, dieser wird jedoch hier weggelassen.

Python - certifi/requests/ssl

**Hinweis! !! : Überprüfen Sie die Betriebssystemeinstellungen, bevor Sie ein Zertifikat für die Python-Umgebung hinzufügen. ** **.


Fassen Sie die Einstellungen des von Python verwendeten Moduls certifi / request / ssl zusammen.

Python --CA-Einstellungen für Zertifikate / Anforderungen

Wenn Sie Anforderungen verwenden, hängt dies vom Zertifikatspaket ab (seit Anforderung 2.4 verwenden Sie Zertifikate. Siehe: CA-Zertifikate /de/v2.7.0/user/advanced/#ca-certificates)) Wenn es sich also von der Betriebssystemreferenz unterscheidet, fügen Sie es dem CA-Zertifikatspaket hinzu.

From Requests version 2.4.0 onwards, Requests will attempt to use certificates from certifi if it is present on the system. This allows for users to update their trusted certificates without having to change the code that runs on their system.

Sie können das Referenzziel wie folgt überprüfen.

certifi/Bestätigung des Zertifikatspakets für Anfragen


$ python3 -c "import certifi; print(certifi.where())"
/etc/ssl/certs/ca-certificates.crt

$ python3 -c "import requests;print(requests.__version__)"
2.22.0

$ python3 -c "import requests; print(requests.certs.where())"
/etc/ssl/certs/ca-certificates.crt

Wenn Sie auf dieselben Betriebssystemeinstellungen verweisen (z. B. / etc / ssl / certs / ca-certificates.crt für Ubuntu 18.04 openssl), müssen Sie keine eigenen hinzufügen.

Wenn Sie auf eine Datei verweisen, die sich vom Betriebssystem unterscheidet (z. B. in einer virtuellen Umgebung), fügen Sie der Datei im angezeigten Pfad ein Zertifikat im Textformat hinzu, und Sie sind fertig.

Ich mache das gleiche mit dem Python-Skript unten. Legen Sie das Installationszertifikat im aktuellen Verzeichnis als "mylocal-root-cacert.crt" ab und führen Sie das Python-Skript aus.

local_ca_install.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import certifi

cabundle = certifi.where()
local_rootCA = 'mylocal-root-cacert.crt'

print( 'read from {}'.format( local_rootCA ) )
with open( local_rootCA, 'rb' ) as infile:
    myrootca = infile.read()

print( 'append to {}'.format( cabundle ) )
with open( cabundle, 'ab' ) as outfile:
    outfile.write( myrootca )

print( '{} has been imported.'.format( local_rootCA ) )

Ausführungsergebnis


(pythonsample) $ python local_ca_install.py
read from mylocal-root-cacert.crt
append to /home/.../envs/pythonsample/lib/python3.6/site-packages/certifi/cacert.pem
mylocal-root-cacert.crt has been imported.
(pythonsample) $

python --ssl Einstellungen

Überprüfen Sie das Referenzziel des SSL-Moduls. Selbst wenn das referenzierte Verzeichnis unterschiedlich ist, verweist der symbolische Link möglicherweise auf dasselbe Verzeichnis / dieselbe Datei wie request / certifi. Überprüfen Sie daher auch das referenzierte Verzeichnis.

Bestätigung des Zertifikatspakets für ssl


$ python3 -c "import ssl; print(ssl.get_default_verify_paths())"; (set -x; ls -l /usr/lib/ssl)
DefaultVerifyPaths(cafile=None, capath='/usr/lib/ssl/certs', openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/lib/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/lib/ssl/certs')
+ ls -l /usr/lib/ssl
total 4
lrwxrwxrwx 1 root root   14 Apr 23  2018 certs -> /etc/ssl/certs
drwxr-xr-x 2 root root 4096 Nov 20 06:52 misc
lrwxrwxrwx 1 root root   20 Nov 13 01:58 openssl.cnf -> /etc/ssl/openssl.cnf
lrwxrwxrwx 1 root root   16 Apr 23  2018 private -> /etc/ssl/private

Wenn sich die referenzierte Entität unterscheidet, konfigurieren Sie sie so, dass sie dieselbe Konfiguration wie das openssl-Verzeichnis hat oder auf das CA-Bundle verweist.

Python - Nach Umgebungsvariable ändern

Sie können das Referenzziel mithilfe der Umgebungsvariablen ändern.

Umgebungsvariable REQUESTS_CA_BUNDLE --requests

Siehe auch: SSL-Zertifizierungsüberprüfung (https://2.python-requests.org/en/v2.7.0/user/advanced/?highlight=requests_ca_bundle#ssl-cert-verification)

Wenn Sie * Anforderungen verwenden, setzen Sie die Umgebungsvariable "REQUESTS_CA_BUNDLE" auf "CA Bundle" (dh "/home/.../envs/pythonsample/lib/python3.6/site-packages/certifi/cacert.pem") Durch Setzen von `bezieht sich request () auf diese Zertifizierungsstelle.

Umgebungsvariablen SSL_CERT_DIR und SSL_CERT_FILE --ssl

Conda / Anaconda-Umgebung

Gleiches gilt für Conda / Anaconda.

Wenn Sie Anaconda verwenden, fügen Sie das Zertifikat dem Cabundle of Certifi in der Conda-Umgebung hinzu. Unter Windows usw. kann es je nach Installationsort erforderlich sein, versteckte Dateien (Ordner) anzuzeigen, z. B. unter AppData.

Virtuelle Python-Umgebung

Wenn Sie eine virtuelle Python-Umgebung verwenden, müssen Sie jede virtuelle Umgebung konfigurieren.

Mozilla Firefox

Firefox unter Microsoft Windows wird in einem von Microsoft Windows getrennten Zertifikatspeicher verwaltet (unter Linux und MacOS nicht bestätigt), daher muss es getrennt von den Zertifikateinstellungen für Microfoft Windows verwaltet werden. (Nicht bestätigt, aber es scheint, dass es für jedes Profil festgelegt werden muss)

[Option] --[Datenschutz und Sicherheit]-" Zertifikat "- [Zertifikat anzeigen ... (C)] --[Zertifikat der Zertifizierungsstelle]--[Import (M). ..]ist das Lesen des Zertifikats.

Wenn Sie Firefox verwenden, sollte diese Erklärung ausreichen.


Firefox: How to audit & reset the list of trusted servers/CAs - Red Hat Customer Portal


Mozilla Thunderbird

Thunderbird wird in einem von Microsoft Windows getrennten Zertifikatspeicher verwaltet (unter Linux und MacOS nicht bestätigt). Daher muss es separat vom Festlegen des Zertifikats in Microfoft Windows verwaltet werden. (Nicht bestätigt, aber es scheint, dass es für jedes Profil festgelegt werden muss)

[Option] --[Details]-- [Zertifikat] (Tab) --[Zertifikate verwalten (M)]-- [Zertifikat der Zertifizierungsstelle] --[Import (M). ..]ist das Lesen des Zertifikats.

Windows 10

win-certmgr_msc.PNG

信頼されたルート証明機関-処理前.PNG

信頼されたルート証明書-インポートメニュー.PNG

Halten Sie die Windows-Taste gedrückt und drücken Sie die Taste " R ". Das Dialogfeld "Ausführen" wird angezeigt. Geben Sie "certmgr.msc" ein, um es auszuführen. (Wenn das Dialogfeld UAC (User Access Control) angezeigt wird, wählen Sie Ja, um es auszuführen.) "Zertifikat-aktueller Benutzer" wird angezeigt. Klicken Sie mit der rechten Maustaste auf "Vertrauenswürdige Stammzertifizierungsstellen" - "Zertifikate" und klicken Sie auf "Alle Aufgaben" - "Importieren ...". Das Dialogfeld Zertifikatimport-Assistent wird angezeigt. Folgen Sie dem Assistenten, um das Zertifikat zu importieren.

証明書のインポートウィザードの開始.PNG

Klicken Sie auf Weiter und wählen Sie unter Durchsuchen das zu lesende Zertifikat aus.

インポートするファイルの指定.PNG

Wählen Sie ein Zertifikat aus und klicken Sie auf Öffnen. Sie kehren zum ursprünglichen Fenster zurück, klicken Sie also auf [Weiter].

証明書選択.png

Wählen Sie in der Auswahl "Zertifikatspeicher" die Option "Alle Zertifikate im folgenden Speicher ablegen" und im Pulldown-Menü "Vertrauenswürdige Stammzertifizierungsstellen" aus. Weiter klicken].

証明書ストア.PNG

Ein Bestätigungsbildschirm wird angezeigt. Wenn keine Fehler vorliegen, klicken Sie auf [Fertig stellen].

証明書ストア完了.png

Wenn die Meldung "Erfolgreich importiert" angezeigt wird, ist der Vorgang abgeschlossen.

正しくインポートされました.PNG

Schließen Sie certmgr, wenn Sie es nicht mehr benötigen.

Abgesehen davon können Sie das Zertifikat nicht anzeigen und importieren, wenn bei Verwendung eines Remotedesktops in einer lokalen Umgebung eine Warnung angezeigt wird, sondern es in eine Datei exportieren und mit der oben beschriebenen Methode festlegen. Die Warnung verschwindet. (Ich kenne den Grund nicht, aber manchmal ist die Warnung nicht verschwunden, selbst wenn ich das Zertifikat im Warndialog angezeigt und so importiert habe, wie es war.)

Splunk

In Splunk müssen Sie die folgenden Einstellungen für die SSL-Kommunikation vornehmen.

  1. Einstellungen für Splunk Apps (Python)
  2. Einstellungen, wenn Splunk zum Client wird und eine Verbindung zu einem externen Server herstellt
  3. Von Splunk bereitgestellte SSL-Einstellungen

Die dritte Einstellung wird hier weggelassen.

Einstellungen für Splunk Apps (Python)

Im folgenden Beispiel ist es "SPLUNK_HOMOE = / opt / splunk".

$ /opt/splunk/bin/splunk cmd python -c "import requests; print(requests.certs.where())"
/opt/splunk/lib/python2.7/site-packages/certifi/cacert.pem
$ /opt/splunk/bin/splunk cmd python -c "import certifi; print(certifi.where())"
/opt/splunk/lib/python2.7/site-packages/certifi/cacert.pem
$ 
$ /opt/splunk/bin/splunk cmd python3 -c "import requests; print(requests.certs.where())"
/opt/splunk/lib/python3.7/site-packages/certifi/cacert.pem
$ /opt/splunk/bin/splunk cmd python3 -c "import certifi; print(certifi.where())"
/opt/splunk/lib/python3.7/site-packages/certifi/cacert.pem
$

Ich denke, wir werden in Zukunft auf Python3 umsteigen, aber vorerst hängen vorhandene Apps von Python2 ab, daher müssen wir auch Python2 berücksichtigen.

Einige Apps haben ihre eigene cacert.pem in Site-Paketen und verweisen darauf, daher müssen Sie diese ebenfalls unterstützen.

splunk&nbsp;Unter dem Haus&nbsp;cacert.pem&nbsp;Suchbeispiel


$ (cd /opt/splunk; sudo find . -name cacert.pem -ls)
 49024396    276 -r--r--r--1 splunk splunk 282085 16. Juni 2019./lib/python2.7/site-packages/certifi/cacert.pem
 48893114    268 -r--r--r--1 splunk splunk 271088 9. August 03:32 ./lib/python2.7/site-packages/botocore/cacert.pem
 49024315    268 -r--r--r--1 splunk splunk 271088 9. August 03:32 ./lib/python2.7/site-packages/botocore/vendored/requests/cacert.pem
 49155480    276 -r--r--r--1 splunk splunk 282085 16. Juni 2019./lib/python3.7/site-packages/certifi/cacert.pem
 49026412    268 -r--r--r--1 splunk splunk 271088 9. August 03:32 ./lib/python3.7/site-packages/botocore/cacert.pem
 49155400    268 -r--r--r--1 splunk splunk 271088 9. August 03:32 ./lib/python3.7/site-packages/botocore/vendored/requests/cacert.pem
 39325129      4 -rw-------1 splunk splunk 1265 9. August 2018./etc/auth/cacert.pem
 41816513    344 -rw-r--r--1 Splunk Splunk 348799 20. Februar 2019./etc/apps/splunk_app_addon-builder/bin/splunk_app_add_on_builder/requests/cacert.pem
 41943696    344 -rw-r--r--1 Splunk Splunk 348799 20. Februar 2019./etc/apps/splunk_app_addon-builder/bin/ta_generator/resources_lib/requests/cacert.pem
 40370693    304 -rw-r--r--1 splunk splunk 308434 18. September 2018./etc/apps/Splunk_SA_Scientific_Python_linux_x86_64/bin/linux_x86_64/lib/python2.7/site-packages/pip/_vendor/requests/cacert.pem
 40371155    340 -rw-r--r--1 splunk splunk 344712 18. September 2018./etc/apps/Splunk_SA_Scientific_Python_linux_x86_64/bin/linux_x86_64/lib/python2.7/site-packages/requests/cacert.pem
$

Einstellungen, wenn Splunk zum Client wird und eine Verbindung zu einem externen Server herstellt

Wenn Sie die Einstellungen an Ihr Betriebssystem anpassen möchten, sollten Sie sich / etc / ssl / certs / ca-certificates.crt (für Ubuntu) ansehen.

${SPLUNK_HOME}/etc/system/local/server.conf


[sslConfig]
sslRootCAPath = /etc/ssl/certs/ca-certificates.crt

Ich konnte keine Beschreibung finden, wie ich es offiziell einstellen sollte. (Nachuntersuchung erforderlich)

Recommended Posts

So installieren Sie Ihre eigene (Root-) Zertifizierungsstelle
So installieren Sie Python
So installieren Sie pip
So installieren Sie archlinux
So installieren Sie BayesOpt
So installieren Sie Nbextensions
So installieren Sie Prover9
So definieren Sie Ihr eigenes Ziel in Sage
Schritte zum Installieren Ihrer eigenen Bibliothek mit pip
So installieren Sie Python [Windows]
So installieren Sie Tabpy 1.0 (Version 2020-01)
So installieren Sie Pelican Blog
[Ansible] So rufen Sie Variablen auf, wenn Sie ein eigenes Modul erstellen
(Hinweis) So übergeben Sie den Pfad Ihres eigenen Moduls
So installieren Sie Python mit Anaconda
So installieren Sie mysql-connector-python auf einem Mac
So installieren und verwenden Sie Tesseract-OCR
So installieren Sie Python-Pip mit Ubuntu20.04LTS
So installieren Sie das Graph-Tool unter macOS
So installieren Sie VMware-Tools unter Linux
So installieren Sie OpenCV auf einem Mac
So installieren Sie MBDyn (Linux Ubuntu)
So installieren Sie PyPy unter CentOS
So installieren Sie TensorFlow unter CentOS 7
So installieren und konfigurieren Sie Amsel
So installieren und verwenden Sie Graphviz
Überbrücken Sie ROS mit Ihrem eigenen Protokoll
So installieren Sie den MySQL-Connector mit pip3
So installieren Sie Maven unter CentOS
So installieren Sie Musik 21 unter Windows
So installieren Sie Anaconda mit pyenv
Erstellen Sie das Thema von Pythonista 3 wie Monokai (wie Sie Ihr eigenes Thema erstellen)
So erstellen Sie Ihre eigene Domain-Site mit Heroku (kostenloser Plan)
Fügen Sie mitmproxy Ihre eigene Inhaltsansicht hinzu
So installieren Sie das aws-session-manager-Plugin unter Manajro Linux
So installieren Sie drobertadams / toggl-cli auf einem Mac
So installieren und verwenden Sie pandas_datareader [Python]
python3 So installieren Sie ein externes Modul
[Kivy] So installieren Sie Kivy unter Windows [Python]
Wenn Sie dasselbe wie zuvor verwenden, können Sie dies visualisieren, indem Sie Japan, China und Südkorea ausschließen, in denen viele Menschen infiziert sind. In diesem Fall lauten die Daten für "2020/02/21" wie folgt. Besonders auffällig sind Südostasien, Europa und Nordamerika. Ich hoffe es konvergiert so schnell wie möglich. .. .. Migrieren Sie Python, Pandas, Python3, Zeitreihendaten und eigene CMS-Daten nach WordPress
So installieren Sie CatBoost [Stand Januar 2020]
So installieren Sie DLIB mit aktiviertem 2020 / CUDA
So installieren Sie ein Paket mithilfe eines Repositorys
Bis Sie Ihre eigene Python-Bibliothek installieren
So installieren Sie Pakete unter Alpine Linux
5 Gründe, Linux auf Ihrem Laptop zu installieren.
So importieren Sie Ihr eigenes Modul mit jupyter
So installieren Sie Richzhang / Colorization unter Windows 10
So installieren Sie das Windows-Subsystem für Linux
So installieren Sie Apache (httpd) unter CentOS7
Wie installiere ich php7.4 unter Linux (Ubuntu)
So installieren Sie Eclipse GlassFish 5.1.0 unter CentOS7
So installieren Sie Apache (httpd) unter CentOS8
So installieren Sie zsh (mit .zshrc-Anpassung)