Tâche #31238
Scénario #31715: Traitement express MEN (08-10)
Vérifier la CA Renater et la documentation sur les CA intermédiares
100%
Description
Suite au message sur la liste Zéphir : https://pcll.ac-dijon.fr/listes/arc/zephir/2020-11/msg00005.html
Il faudrait :- vérifier si la CA est sur les versions plus récentes d'EOLE
- décider si on fait quelque chose (à priori : non)
- répondre à l'utilisateur sur la liste
- vérifier/mettre à jour la doc
Historique
#1 Mis à jour par Daniel Dehennin il y a plus de 3 ans
Le certificat présent dans le magasin de ca-certificates
sur un Eolebase 2.8.0 :
root@eolebase:~# openssl x509 -in /etc/ssl/certs/USERTrust_RSA_Certification_Authority.pem -noout -subject -issuer -startdate -enddate -fingerprint -ext subjectKeyIdentifier,authorityKeyIdentifier,basicConstraints subject=C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority issuer=C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority notBefore=Feb 1 00:00:00 2010 GMT notAfter=Jan 18 23:59:59 2038 GMT SHA1 Fingerprint=2B:8F:1B:57:33:0D:BB:A2:D0:7A:6C:51:F7:0E:E9:0D:DA:B9:AD:8E X509v3 Subject Key Identifier: 53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB X509v3 Basic Constraints: critical CA:TRUE
Le certificat de Renater fourni en ligne contient 2 certificats :
- La racine, dont l’empreinte SHA1 ne correspond pas à celle du magasin
ca-certificates
car elle est sursignée par Comodoroot@eolebase:~# openssl x509 -in /root/userturst.crt -noout -subject -issuer -startdate -enddate -fingerprint -ext subjectKeyIdentifier,authorityKeyIdentifier,basicConstraints subject=C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority issuer=C = GB, ST = Greater Manchester, L = Salford, O = Comodo CA Limited, CN = AAA Certificate Services notBefore=Mar 12 00:00:00 2019 GMT notAfter=Dec 31 23:59:59 2028 GMT SHA1 Fingerprint=D8:9E:3B:D4:3D:5D:90:9B:47:A1:89:77:AA:9D:5C:E3:6C:EE:18:4C X509v3 Authority Key Identifier: keyid:A0:11:0A:23:3E:96:F1:07:EC:E2:AF:29:EF:82:A5:7F:D0:30:A4:B4 X509v3 Subject Key Identifier: 53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB X509v3 Basic Constraints: critical CA:TRUE
- Le certificat GEANT Vereniging
root@eolebase:~# openssl x509 -in /root/geant-ov-rsa-ca-4.crt -noout -subject -issuer -startdate -enddate -fingerprint -ext subjectKeyIdentifier,authorityKeyIdentifier,basicConstraints subject=C = NL, O = GEANT Vereniging, CN = GEANT OV RSA CA 4 issuer=C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority notBefore=Feb 18 00:00:00 2020 GMT notAfter=May 1 23:59:59 2033 GMT SHA1 Fingerprint=C2:82:6E:26:6D:74:05:D3:4E:F8:97:62:63:6A:E4:B3:6E:86:CB:5E X509v3 Authority Key Identifier: keyid:53:79:BF:5A:AA:2B:4A:CF:54:80:E1:D8:9B:C0:9D:F2:B2:03:66:CB X509v3 Subject Key Identifier: 6F:1D:35:49:10:6C:32:FA:59:A0:9E:BC:8A:E8:1F:95:BE:71:7A:0C X509v3 Basic Constraints: critical CA:TRUE, pathlen:0
Le certificat intermédiaire de GEANT est bien valide pour la CA USERTrust RSA du magasin :
root@eolebase:~# certtool --load-ca-certificate /etc/ssl/certs/USERTrust_RSA_Certification_Authority.pem --verify --verify-profile ultra --infile /root/geant-ov-rsa-ca-4.crt Loaded CAs (1 available) Subject: CN=GEANT OV RSA CA 4,O=GEANT Vereniging,C=NL Issuer: CN=USERTrust RSA Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US Checked against: CN=USERTrust RSA Certification Authority,O=The USERTRUST Network,L=Jersey City,ST=New Jersey,C=US Signature algorithm: RSA-SHA384 Output: Verified. The certificate is trusted. Chain verification output: Verified. The certificate is trusted.
#2 Mis à jour par Daniel Dehennin il y a plus de 3 ans
Il faudrait vérifier si le certificat de l’utilisateur peut-être validé avec le certificat du magasin.
Je pense que dans ce cas, le certificat devrait avoir la concaténation du certificat final et de l’autorité intermédiaire.
#3 Mis à jour par Daniel Dehennin il y a plus de 3 ans
- Statut changé de Nouveau à En cours
- Assigné à mis à Daniel Dehennin
#4 Mis à jour par Joël Cuissinat il y a environ 3 ans
- Tâche parente changé de #31204 à #31492
#5 Mis à jour par Joël Cuissinat il y a environ 3 ans
- Tâche parente changé de #31492 à #31587
#6 Mis à jour par Daniel Dehennin il y a environ 3 ans
Dans les bonnes pratiques de SSLlabs il est fortement conseillé de toujours utiliser une chaîne complète dans le certificat.
Je suis en train de faire des tests en construisant une autorité de certification et une sous-autorité :
CA-ROOT
CA-SUB1
zephir.ac-test.fr
#7 Mis à jour par Daniel Dehennin il y a environ 3 ans
Utilisation de l’outil certtool
fourni par gnutls-bin
pour tester une chaîne de certificat non EOLE.
Utilisation de 2 machines :
aca.zephir-2.7.2-instance-default
aca.eolebase-2.7.2-instance-default
Préparation d’une chaîne de certification¶
Génération d’une autorité de certification racine¶
- Il faut un modèle de configuration pour certtool
~# cat > ca-root.template <<EOF cn = "Test CA ROOT" dc = "ac-test" dc = "fr" ca cert_signing_key expiration_days = 730 EOF
- Il faut maintenant générer une clef privée
~# certtool --generate-privkey > ca-root.key
- Nous pouvons maintenant générer le certificat de l’autorité de certificat
~# certtool --generate-self-signed --load-privkey ca-root.key --template ca-root.template --outfile ca-root.crt
Génération d’une autorité de premier niveau¶
- Il faut un modèle de configuration pour certtool
~# cat > ca-sub1.template <<EOF cn = "Test CA SUB1" dc = "ac-test" dc = "fr" ca cert_signing_key expiration_days = 730 EOF
- Il faut maintenant générer une clef privée
~# certtool --generate-privkey > ca-sub1.key
- Nous pouvons maintenant générer le certificat
CA-SUB1
, signé parCA-ROOT
~# certtool --generate-certificate --load-ca-certificate ca-root.crt --load-ca-privkey ca-root.key --template ca-sub1.template --load-privkey ca-sub1.key --outfile ca-sub1.crt
Génération d’un certificat serveur¶
- Il faut un modèle de configuration pour certtool
~# cat > zephir.template <<EOF cn = zephir dc = ac-test dc = fr tls_www_server encryption_key signing_key dns_name = zephir.ac-test.fr EOF
- Il faut maintenant générer une clef privée
~# certtool --generate-privkey > ca-sub1.key
- Nous pouvons maintenant générer le certificat
zephir
, signé parCA-SUB1
~# certtool --generate-certificate --load-ca-certificate ca-sub1.crt --load-ca-privkey ca-sub1.key --template zephir.template --load-privkey zephir.key --outfile zephir.crt
Génération d’un PKCS#12¶
Nous pouvons créer un fichier PKCS#12 avec les fichiers créés précédemment :
~# certtool --load-ca-certificate ca-sub1.crt --load-certificate zephir.crt --load-privkey zephir.key --to-p12 --p12-name zephir --outder --outfile zephir.p12 Generating a PKCS #12 structure... Loading private key list... Loaded 1 private keys. Enter password: Confirm password:
Test du certificat¶
Installer le certificat sur le serveur¶
- Mettre en place la CA
~# cp ca-root.crt /etc/ssl/local_ca/
- Créer la chaîne certificat serveur
~# cat zephir.crt ca-sub.crt > /etc/ssl/certs/zephir-chain.crt
- Copier de la clef privée du serveur
~# cp zephir.key /etc/ssl/private/ && chmod 600 /etc/ssl/private/zephir.key
- Configurer le serveur via GenConfig
Général > Certificat SSL
⮕manuel
Général > Chemin du fichier contenant le certificat SSL
⮕/etc/ssl/certs/zephir-chain.crt
Général > Chemin du fichier contenant la clé privée du certificat SSL
⮕/etc/ssl/private/zephir.key
Général > Chemin du fichier contenant la chaîne de certification
⮕/etc/ssl/local_ca/ca-root.crt
- Exécuter
reconfigure
Tester depuis un client¶
Depuis aca.eolebase-2.7.2-instance-default
- Test sans modification
~# openssl s_client -host zephir.ac-test.fr -port 8070 CONNECTED(00000003) depth=1 CN = Test CA SUB1, DC = ac-test, DC = fr verify error:num=20:unable to get local issuer certificate --- Certificate chain 0 s:/CN=zephir/DC=ac-test/DC=fr i:/CN=Test CA SUB1/DC=ac-test/DC=fr 1 s:/CN=Test CA SUB1/DC=ac-test/DC=fr i:/CN=Test CA ROOT/DC=ac-test/DC=fr --- […]
- Installation de
CA-ROOT
~# cp ca-root.crt /usr/local/share/ca-certificates/ && update-ca-certificates
- Test de connection
~# openssl s_client -host zephir.ac-test.fr -port 8070 CONNECTED(00000003) depth=2 CN = Test CA ROOT, DC = ac-test, DC = fr verify return:1 depth=1 CN = Test CA SUB1, DC = ac-test, DC = fr verify return:1 depth=0 CN = zephir, DC = ac-test, DC = fr verify return:1 --- Certificate chain 0 s:/CN=zephir/DC=ac-test/DC=fr i:/CN=Test CA SUB1/DC=ac-test/DC=fr 1 s:/CN=Test CA SUB1/DC=ac-test/DC=fr i:/CN=Test CA ROOT/DC=ac-test/DC=fr 2 s:/CN=Test CA ROOT/DC=ac-test/DC=fr i:/CN=Test CA ROOT/DC=ac-test/DC=fr --- […]
#8 Mis à jour par Daniel Dehennin il y a environ 3 ans
Voici ma proposition de modification pour le second paragraphe de la section Certificat de type manuel
(toutes versions)
diff -u --label \#\<buffer\ orig\> --label \#\<buffer\ new\> /tmp/buffer-content-fKxXNs /tmp/buffer-content-SMhUsz
--- #<buffer orig>
+++ #<buffer new>
@@ -1 +1,10 @@
-Dans le cas d'un certificat signé par une autorité externe, il faut copier le certificat de la CA en question dans /etc/ssl/local_ca/ afin qu'il soit pris en compte automatiquement (non nécessaire pour les certificats de l'IGC nationale
+Dans le cas d'un certificat signé par une autorité externe, il faut copier le certificat de la CA en question dans /etc/ssl/local_ca/ afin qu'il soit pris en compte automatiquement (non nécessaire pour les certificats de l'IGC nationale).
+
+Si la chaîne de certification du serveur contient une ou plusieurs autorités intermédiaires, vous devez concaténer le certificat du serveur avec les certificats des autorités intermédiaires dans l’ordre de la chaîne de certification vers l’autorité racine, par exemple, pour une chaîne de certification suivante :
+
+1. CA-ROOT
+2. CA-SUB1 signée par CA-ROOT
+3. CA-SUB2 signée par CA-SUB1
+4. mon-serveur signé par CA-SUB1
+
+cat mon-serveur.crt ca-sub2.crt ca-sub1.crt > /etc/ssl/cert/mon-serveur.crt
#9 Mis à jour par Joël Cuissinat il y a environ 3 ans
- Tâche parente changé de #31587 à #31715
#10 Mis à jour par Daniel Dehennin il y a environ 3 ans
- Statut changé de En cours à Nouveau
- Assigné à
Daniel Dehenninsupprimé
#11 Mis à jour par Joël Cuissinat il y a environ 3 ans
Daniel Dehennin a écrit :
Voici ma proposition de modification pour le second paragraphe de la section
Certificat de type manuel
(toutes versions)[...]
- Ajout d'une sous-partie Certificats intermédiaires avec un bloc exemple
- Suppression de l'ancienne partie Certificats intermédiaires qui avait le contenu suivant :
En attendant que la prise en compte des certificats intermédiaires soit automatisée pour l'ensemble des services de base (fixme #13362), les manipulations nécessaires pour éviter des avertissements dans les navigateurs sont documentées dans la page wiki suivante : https://dev-eole.ac-dijon.fr/projects/modules-eole/wiki/Gestion_certificats
#12 Mis à jour par Joël Cuissinat il y a environ 3 ans
- Statut changé de Nouveau à Résolu
- Assigné à mis à Joël Cuissinat
- % réalisé changé de 0 à 100
#13 Mis à jour par Daniel Dehennin il y a environ 3 ans
- Statut changé de Résolu à Fermé
- Restant à faire (heures) mis à 0.0
Je trouve ça très bien.