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:
Ubuntu (18.04)
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.
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)
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 *".
Exécutez ʻupdate-ca-certificates (
/ usr / sbin / update-ca-certificates`).
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.
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) $
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.
Vous pouvez modifier la destination de référence à l'aide de la variable d'environnement.
REQUESTS_CA_BUNDLE
--requestsVoir aussi: Vérification du certificat SSL (https://2.python-requests.org/en/v2.7.0/user/advanced/?highlight=requests_ca_bundle#ssl-cert-verification)
Si vous utilisez des requêtes, définissez la variable d'environnement REQUESTS_CA_BUNDLE
sur CA Bundle (c'est-à-dire/home/.../envs/pythonsample/lib/python3.6/site-packages/certifi/cacert.pem dans l'exemple ci-dessus. En définissant
, requests () fait référence à cette autorité de certification.
Bien qu'il ne s'agisse pas d'une variable d'environnement, vous pouvez spécifier le chemin du fichier CA Bundle comme argument de requests.get / post (requests.get (..., verify = '* chemin vers le fichier CA Bundle *). ' ) est). Cependant, sachez que si vous codez en dur le chemin, il sera moins polyvalent.
La définition de verify sur False est un dernier recours. Nous vous recommandons de le conserver pour un test temporaire.
SSL_CERT_DIR
et SSL_CERT_FILE
--sslSSL_CERT_DIR
et SSL_CERT_FILE
.
(Bien qu'il y ait beaucoup d'informations sur le net, je n'ai pas pu trouver la source principale pour SSL_CERT_DIR
et SSL_CERT_FILE
)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.
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.
(Si la boîte de dialogue UAC (User Access Control) s'affiche, sélectionnez "Oui" pour l'exécuter.)
"Certificate-Current User" s'affiche.
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 ...".
La boîte de dialogue Assistant d'importation de certificat s'affiche. Suivez l'assistant pour importer le certificat.
Cliquez sur Suivant et sélectionnez le certificat à lire sous Parcourir.
Sélectionnez un certificat et cliquez sur Ouvrir. Vous serez renvoyé à la fenêtre d'origine, cliquez donc sur [Suivant].
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].
Un écran de confirmation apparaît. S'il n'y a pas d'erreur, cliquez sur [Terminer].
Lorsque le message "Importé avec succès" s'affiche, le processus est terminé.
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.
Le troisième paramètre est omis ici.
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 Sous la maison cacert.pem 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
$
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