[PYTHON] Comment installer votre propre autorité de certification (racine)

J'ai résumé que je devais installer mon propre certificat CA racine. Si vous utilisez divers outils et applications, vous ne pouvez pas dire "il est sûr de le configurer dans le système d'exploitation", et il y a beaucoup de choses qui doivent être définies individuellement en plus des paramètres du système d'exploitation.

Cet article décrit comment définir votre propre certificat d'autorité de certification racine pour les environnements et outils suivants:

  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. Créez un répertoire approprié (non bâclé) sous / usr / share / ca-certificates /. Ici, c'est * mylocal *. (Ci-après, il est appelé / usr / share / ca-certificates / * mylocal * /) Le répertoire est organisé par unité d'organisation de gestion. (Il y a probablement un répertoire appelé mozilla /, mais je n'y toucherai pas) Vous n'êtes pas obligé d'avoir un répertoire, mais je pense qu'il est plus facile de gérer les répertoires locaux plus tard si vous les organisez dans un répertoire.

  2. Placez le fichier de certificat dans le dossier créé * mylocal *. Ici, il s'agit de * mylocal-root-cacert.crt *. (/usr/share/ca-certificates/mylocal/mylocal-root-cacert.crt)

  3. Dans / etc / ca-certificates.conf, ajoutez le chemin relatif sous` / usr / share / ca-certificates / ʻdu fichier ajouté. Autrement dit, dans l'exemple ci-dessus, ajoutez "* mylocal * / * mylocal-root-cacert.crt *".

  4. Exécutez ʻupdate-ca-certificates (/ usr / sbin / update-ca-certificates`).

  5. Assurez-vous d'avoir un lien symbolique vers / usr / share / ca-certificates / * mylocal * / * mylocal-root-cacert.crt * sous / etc / ssl / certs / S'il te plait donne moi.

Ubuntu18.Procédure de mise à jour CA en 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

En passant, si cela est fait correctement, un / etc / ssl / certs / ca-certificates.crt avec tous les certificats CA sera créé en tant que bundle CA, alors référez-vous à ceci si nécessaire. Alors ce serait bien. Par exemple, si vous souhaitez spécifier le chemin du Bundle CA dans l'argument de requests () en python.

ʻUpdate-ca-certificates se mettra automatiquement à jour / etc / ssl / certs / ca-certificates.crt`, donc ajouter le vôtre est strictement interdit.

Red Hat / CentOS (7)

Voir aussi: [Red Hat Enterprise Linux 7 | Red Hat Customer Portal-Using Shared System Certificates](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/security_guide/sec-shared] -certificats-système)

Placez le fichier de certificat sous / usr / share / pki / ca-trust-source / anchors / et exécutez ʻupdate-ca-trust`.

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

La même chose est vraie sous / etc / pki / ca-trust / source / anchors /. / usr / share / pki est pour la compatibilité ascendante et le réglage de / etc / share / pki est prioritaire. Le certificat est placé sous / usr / share / pki / ca-trust-source / anchors / afin qu'il puisse être défini pour les deux.

Actuellement, donner un argument à ʻupdate-ca-trust est ignoré, mais si vous regardez à l'intérieur du script, le commentaire indique qu'il supportera "ʻupdate-ca-trust extract" dans le futur. ..

(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

Utilisez la commande trust pour gérer le certificat CA de confiance que vous avez défini.

commande de confiance


$ 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

Vous pouvez supprimer ou modifier l'autorité de certification configurée à l'aide de la commande trust, mais elle est omise ici.

Python - certifi/requests/ssl

**Mise en garde! !! : Vérifiez les paramètres du système d'exploitation avant d'ajouter un certificat pour l'environnement Python. ** **


Résumez les paramètres du module certifi / requests / ssl utilisé par python.

python - Paramètres CA pour les certifi / requêtes

Si vous utilisez des requêtes, cela dépend du package certifi (depuis les requêtes 2.4, vous utilisez certifi. Voir: CA Certificates /en/v2.7.0/user/advanced/#ca-certificates)), donc s'il est différent de la référence du système d'exploitation, ajoutez-le au bundle CA de certifi.

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.

Vous pouvez vérifier la destination de référence comme suit.

certifi/Confirmation du bundle de certificats pour les demandes


$ 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

Si vous faites référence aux mêmes paramètres du système d'exploitation (par exemple, / etc / ssl / certs / ca-certificates.crt pour Ubuntu 18.04 openssl), vous n'avez pas besoin d'ajouter les vôtres.

Si vous faites référence à un fichier qui est différent du système d'exploitation (par exemple, dans un environnement virtuel), ajoutez un certificat de format texte au fichier dans le chemin affiché et vous avez terminé.

Je fais la même chose avec le script python ci-dessous. Placez le certificat d'installation dans le répertoire actuel en tant que mylocal-root-cacert.crt et exécutez le script Python.

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 ) )

Résultat d'exécution


(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) $

paramètres python --ssl

Vérifiez la destination de référence du module ssl. Même si le répertoire référencé est différent, le lien symbolique peut faire référence au répertoire / fichier de la même entité que requests / certifi, donc vérifiez également le répertoire référencé.

Confirmation du bundle de certificats pour 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

Si l'entité référencée est différente, configurez-la pour qu'elle ait la même configuration que le répertoire openssl ou pour faire référence au bundle CA.

python --Modification par variable d'environnement

Vous pouvez modifier la destination de référence à l'aide de la variable d'environnement.

Variable d'environnement REQUESTS_CA_BUNDLE --requests

Voir aussi: Vérification du certificat SSL (https://2.python-requests.org/en/v2.7.0/user/advanced/?highlight=requests_ca_bundle#ssl-cert-verification)

Variables d'environnement SSL_CERT_DIR et SSL_CERT_FILE --ssl

Environnement Conda / Anaconda

La même chose est vraie pour Conda / Anaconda.

Si vous utilisez Anaconda, ajoutez le certificat au cabundle de certifi dans l'environnement conda. Sous Windows, etc., il peut être nécessaire d'afficher les fichiers (dossiers) cachés comme sous AppData en fonction de l'emplacement d'installation.

environnement virtuel python

Si vous utilisez un environnement virtuel Python, vous devez configurer chaque environnement virtuel.

Mozilla Firefox

Firefox sur Microsoft Windows est géré dans un magasin de certificats distinct de Microsoft Windows (non confirmé sous Linux et MacOS), il doit donc être géré séparément des paramètres de certificat pour Microfoft Windows. (Non confirmé, mais il semble qu'il doit être défini pour chaque profil)

[Option] --[Confidentialité et sécurité]-" Certificat "- [Afficher le certificat ... (C)] --[Certificat d'autorité de certification]--` [Importer (M). ..] ʻest la lecture du certificat.

Si vous utilisez Firefox, cette explication devrait être suffisante.


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


Mozilla Thunderbird

Thunderbird est géré dans un magasin de certificats distinct de Microsoft Windows (non confirmé sous Linux et MacOS), il doit donc être géré séparément de la configuration du certificat dans Microfoft Windows. (Non confirmé, mais il semble qu'il doit être défini pour chaque profil)

[Option] --[Détails]-- [Certificat] (Tab) --[Gérer les certificats (M)]-- [Certificat d'autorité de certification] --` [Importer (M). ..] ʻest la lecture du certificat.

Si vous utilisez Thunderbird, cette explication suffira.

Windows 10

Maintenez la touche Windows enfoncée et appuyez sur la touche " R ". La boîte de dialogue "Exécuter" apparaîtra. Entrez certmgr.msc pour l'exécuter.

win-certmgr_msc.PNG

(Si la boîte de dialogue UAC (User Access Control) s'affiche, sélectionnez "Oui" pour l'exécuter.)

"Certificate-Current User" s'affiche.

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

Cliquez avec le bouton droit de la souris sur "Autorités de certification racines de confiance" - "Certificats" et cliquez sur "Toutes les tâches" - "Importer ...".

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

La boîte de dialogue Assistant d'importation de certificat s'affiche. Suivez l'assistant pour importer le certificat.

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

Cliquez sur Suivant et sélectionnez le certificat à lire sous Parcourir.

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

Sélectionnez un certificat et cliquez sur Ouvrir. Vous serez renvoyé à la fenêtre d'origine, cliquez donc sur [Suivant].

証明書選択.png

Dans la sélection "Magasin de certificats", sélectionnez "Placer tous les certificats dans le magasin suivant" et sélectionnez "Autorités de certification racines de confiance" dans le menu déroulant. Cliquez sur Suivant].

証明書ストア.PNG

Un écran de confirmation apparaît. S'il n'y a pas d'erreur, cliquez sur [Terminer].

証明書ストア完了.png

Lorsque le message "Importé avec succès" s'affiche, le processus est terminé.

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

Fermez certmgr lorsque vous n'en avez plus besoin.

En passant, au lieu d'afficher et d'importer le certificat lorsqu'un avertissement apparaît lors de l'utilisation d'un poste de travail distant dans un environnement local, vous pouvez l'exporter vers un fichier et le définir par la méthode ci-dessus. , L'avertissement disparaîtra. (Je ne connais pas la raison, mais parfois l'avertissement ne disparaissait pas même si j'affichais le certificat à partir de la boîte de dialogue d'avertissement et que je l'importais tel quel)

Splunk

Dans Splunk, vous devez définir les paramètres suivants pour la communication SSL.

  1. Préférences Splunk Apps (python)
  2. Paramètres lorsque Splunk devient client et se connecte à un serveur externe
  3. Paramètres SSL fournis par Splunk

Le troisième paramètre est omis ici.

Préférences Splunk Apps (python)

Dans l'exemple ci-dessous, il s'agit de 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
$

Je pense que nous passerons à Python3 à l'avenir, mais pour le moment, les applications existantes dépendent de python2, nous devons donc également prendre en compte python2.

Certaines applications ont leur propre cacert.pem dans les packages de site et y font référence, vous devez donc les prendre en charge également.

splunk&nbsp;Sous la maison&nbsp;cacert.pem&nbsp;Exemple de recherche


$ (cd /opt/splunk; sudo find . -name cacert.pem -ls)
 49024396    276 -r--r--r--1 splunk splunk 282085 16 juin 2019./lib/python2.7/site-packages/certifi/cacert.pem
 48893114    268 -r--r--r--1 splunk splunk 271088 9 août 03:32 ./lib/python2.7/site-packages/botocore/cacert.pem
 49024315    268 -r--r--r--1 splunk splunk 271088 9 août 03:32 ./lib/python2.7/site-packages/botocore/vendored/requests/cacert.pem
 49155480    276 -r--r--r--1 splunk splunk 282085 16 juin 2019./lib/python3.7/site-packages/certifi/cacert.pem
 49026412    268 -r--r--r--1 splunk splunk 271088 9 août 03:32 ./lib/python3.7/site-packages/botocore/cacert.pem
 49155400    268 -r--r--r--1 splunk splunk 271088 9 août 03:32 ./lib/python3.7/site-packages/botocore/vendored/requests/cacert.pem
 39325129      4 -rw-------1 splunk splunk 1265 9 août 2018./etc/auth/cacert.pem
 41816513    344 -rw-r--r--1 splunk splunk 348799 20 février 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 février 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 septembre 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 septembre 2018./etc/apps/Splunk_SA_Scientific_Python_linux_x86_64/bin/linux_x86_64/lib/python2.7/site-packages/requests/cacert.pem
$

Paramètres lorsque Splunk devient client et se connecte à un serveur externe

Si vous voulez faire correspondre les paramètres à votre système d'exploitation, c'est une bonne idée de regarder / etc / ssl / certs / ca-certificates.crt (pour Ubuntu).

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


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

Je n'ai pas trouvé de description sur la façon de le configurer officiellement. (Réexamen requis)

Recommended Posts

Comment installer votre propre autorité de certification (racine)
Comment installer Python
Comment installer pip
Comment installer Archlinux
Comment installer BayesOpt
Comment installer Nbextensions
Comment installer Prover9
Comment définir votre propre cible dans Sage
Étapes pour installer votre propre bibliothèque avec pip
Comment installer Python [Windows]
Comment installer Tabpy 1.0 (version 2020-01)
Comment installer le blog Pelican
[Ansible] Comment appeler des variables lors de la création de votre propre module
(Note) Comment passer le chemin de votre propre module
Comment installer Python à l'aide d'Anaconda
Comment installer mysql-connector-python sur Mac
Comment installer et utiliser Tesseract-OCR
Comment installer python-pip avec ubuntu20.04LTS
Comment installer Graph-Tool sur macOS
Comment installer VMware-Tools sur Linux
Comment installer pycrypto sur Windows
Comment installer OpenCV sur Mac
Comment installer MBDyn (Linux Ubuntu)
Comment installer PyPy sur CentOS
Comment installer TensorFlow sur CentOS 7
Comment installer et configurer Blackbird
Comment installer et utiliser Graphviz
Reliez ROS à votre propre protocole
Comment installer mysql-connector avec pip3
Comment installer Maven sur CentOS
Comment installer Music 21 sur Windows
Comment installer Anaconda avec pyenv
Créez le thème de Pythonista 3 comme Monokai (comment créer votre propre thème)
Comment créer votre propre site de domaine avec heroku (plan gratuit)
Ajoutez votre propre vue de contenu à mitmproxy
Comment installer aws-session-manager-plugin sur Manajro Linux
Comment installer drobertadams / toggl-cli sur Mac
Comment installer et utiliser pandas_datareader [Python]
python3 Comment installer un module externe
[Kivy] Comment installer Kivy sur Windows [Python]
Migrez vos propres données CMS vers WordPress
Comment installer CatBoost [à partir de janvier 2020]
Comment installer DLIB avec 2020 / CUDA activé
Comment installer un package à l'aide d'un référentiel
Jusqu'à ce que vous installiez votre propre bibliothèque Python
Comment installer des packages sur Alpine Linux
5 raisons d'installer Linux sur votre ordinateur portable.
Pour importer votre propre module avec jupyter
Comment installer Richzhang / Colorisation sur Windows 10
Comment installer le sous-système Windows pour Linux
Comment installer Apache (httpd) sur CentOS7
Comment installer php7.4 sur Linux (Ubuntu)
Comment installer Eclipse GlassFish 5.1.0 sur CentOS7
Comment installer Apache (httpd) sur CentOS8
Comment installer zsh (avec la personnalisation .zshrc)