Ce wiki retrace les tests de la chaîne de certification établie pour la création de certificats à usage interne( comprenant une autorité de certification racine et une autorité de certification intermédiaire) .
Pour tester les certificats émis, un serveur web minimal a été mis en service:
Dans un premier temps, on crée un alias DNS whoami.mairie.local sur la machine docker-alpha.mairie.local sur les serveurs DNS internes (cronos.mairie.local et rhea.mairie.local)
On vérifie que la résolution de nom fonctionne via dig:
dig whoami.mairie.local
Créer le conteneur Docker exécutant le serveur web minimal répondant à l'alias whoami.mairie.local
# Instanciation d'un serveur web minimaliste via Docker docker container run -d -P --name webserver_test --publish 80:80 -e WHOAMI_NAME="whoami.mairie.local" traefik/whoami # équivalent docker container run -d -P --name webserver_test --publish 80:80 traefik/whoami --name whoami.mairie.local
Lancer le navigateur et consulter l'URL http://whoami.mairie.local
Maintenant qu'un serveur web est fonctionnel, on va générer le certificat et relancer le serveur avec celui-ci.
Générer le certificat depuis l’hôte CERT-MGR:
cd /usr/local/cert-mgr/intermediate_ca # Générer la clé privée pour le client openssl genrsa -out private/whoami.mairie.local.key 2048 chmod 400 whoami.mairie.local.key # création et signature de la CSR openssl req -new -config ./openssl.cnf -sha256 -key private/whoami.mairie.local.key -out csr/whoami.mairie.local.csr.pem # affiche le détail de la CSR openssl req -noout -text -in csr/whoami.mairie.local.csr.pem # Création du certificat par signature de la CSR par l'autorité de certification: # Création d'un certificat x509 (pas de suivi des certificats émis, ils peuvent être resignés) openssl x509 -req -days 30 -in csr/whoami.mairie.local.csr.pem -CA ./certs/intermediate_ca_tnf.cert.pem -CAkey ./private/intermediate_ca_tnf.key -CAcreateserial -out certs/whoami.mairie.local.cert.pem # vérification du certificat openssl verify -CAfile certs/ca-chain_tnf.cert.pem certs/whoami.mairie.local.cert.pem
Le certificat et la clé privée générés sur cert-mgr.mairie.local doivent être copiés sur la VM docker-alpha.mairie.local exécutant le serveur web de test.
# Suppression du serveur web HTTP précédent docker container stop webserver_test docker container rm webserver_test # Instanciation du serveur Web HTTPS docker container run -d -p 443:80 --name webserver_test -v $PWD/certs:/certs traefik/whoami --name whoami.mairie.local --key /certs/whoami.mairie.local.key --cert /certs/whoami.mairie.local.cert.pem
Une fois le service lancé, depuis un poste client, tester la connexion au serveur web, ici via cURL
curl --cacert ca_tnf-chain.cert.pem --verbose "https://whoami.mairie.local"
Si un message d'avertissement apparaît sur le poste client, c'est que l'autorité de certification racine “Mairie de Tournefeuille” n'est pas encore installée sur le poste client ou dans le magasin de certificats du navigateur : voir le wiki installer l'autorité de certification de la mairie de Tournefeuille.
Depuis un poste client via le navigateur Web consulter l'URL “https://whoami.mairie.local”. Sur le poste client, on installer les certificats des autorités racine
sudo cp ca-chain_tnf.cert.pem /usr/share/ca-certificates/ sudo chmod 444 /usr/share/ca-certificates/ca-chain_tnf.cert.pem
Sous Windows avec Firefox, le certificat généré précédemment n'est pas valide, en cliquant sur le bouton Avancé… on obtient une erreur:
Code d’erreur : SSL_ERROR_BAD_CERT_DOMAIN
Sous Windows la résolution de l’hôte:
nslookup whoami.mairie.local
Serveur : cronos.mairie.local
Address: 192.9.200.231
Nom : docker-alpha.mairie.local
Address: 172.16.1.23
Aliases: whoami.mairie.local
On essaie de re-générer un certificat avec un CN docker-alpha.mairie.local et un champ (SAN) avec whoami.mairie.local
Éditer le fichier CSR_with_SAN.cnf, renseigner les noms d'alias dans la section [ alt_names ]
# émettre une nouvelle CSR avec un CN différent (docker-alpha.mairie.local) openssl req -new -config CSR_with_SAN.cnf -key private/whoami.mairie.local.key -out csr/whoami.mairie.local.csr.pem
Afficher la requête et vérifier en particulier la valeur du CN, la présence de la section Requested Extensions
et l'extension X509v3 Subject Alternative Name
(SAN) avec pour valeur l'alias “whoami.mairie.local” pour notre exemple:
openssl req -noout -text -in csr/whoami.mairie.local.csr.pem | less
# Signature de la CSR avec ses valeurs pour les extensions x509v3 openssl x509 -req -days 30 -extfile CSR_with_SAN.cnf -extensions v3_req -in ./csr/whoami.mairie.local.csr.pem -CA ./certs/intermediate_ca_tnf.cert.pem -CAkey ./private/intermediate_ca_tnf.key -CAcreateserial -out ./certs/whoami.mairie.local.cert.pem
Afficher le certificat et vérifier les valeurs du CN, la présence des extensions x509v3 en particulier du SAN1)
openssl x509 -noout -text -in certs/whoami.mairie.local.cert.pem | less
Concaténer les certificats des autorités de certification au certificat du serveur pour fournir un fichier contenant une chaîne de certification complète
cat certs/whoami.mairie.local.cert.pem certs/ca-chain_tnf.cert.pem > /tmp/whoami.mairie.local.crt
Si un certificat déjà émis arrive à expiration, il peut être rapidement réémis. Dans le répertoire de l'autorité de certification intermédiaire, la requête CSR existe encore. Les étapes précédentes ne sont donc pas nécessaire. L'autorité de certification n'a qu'à recréer le certificat en signant de nouveau la CSR:
# Test du certificat précédemment émis
openssl verify -CAfile certs/ca-chain_tnf.cert.pem certs/whoami.mairie.local.cert.pem
C = FR, ST = France, L = Haute Garonne, O = Mairie de Tournefeuille, OU = Service informatique, emailAddress = administrateur@mairie-tournefeuille.fr, CN = docker-alpha.mairie.local
error 10 at 0 depth lookup: certificate has expired
# Génération du certificat SAN par signature de la CSR préexistante et ajout explicite des extensions:
openssl x509 -req -days 30 -extensions desired_extensions -extfile csr/extensions/whoami.mairie.local.san.cnf -in ./csr/whoami.mairie.local.csr.pem -CA ./certs/intermediate_ca_tnf.cert.pem -CAkey ./private/intermediate_ca_tnf.key -CAcreateserial -out ./certs/whoami.mairie.local.cert.pem
# Test du certificat nouvellement émis
openssl verify -CAfile certs/ca-chain_tnf.cert.pem certs/whoami.mairie.local.cert.pem
certs/whoami.mairie.local.cert.pem: OK
Le certificat peut être transmis à l'utilisateur, la clé privée associée reste inchangée, la communiquer de nouveau est inutile.