Project

General

Profile

Tâche #31238

Scénario #31715: Traitement express MEN (08-10)

Vérifier la CA Renater et la documentation sur les CA intermédiares

Added by Joël Cuissinat 7 months ago. Updated 4 months ago.

Status:
Fermé
Priority:
Normal
Assigned To:
Start date:
11/30/2020
Due date:
% Done:

100%

Remaining (hours):
0.0

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

History

#1 Updated by Daniel Dehennin 7 months ago

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 Comodo
    root@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 Updated by Daniel Dehennin 7 months ago

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 Updated by Daniel Dehennin 7 months ago

  • Status changed from Nouveau to En cours
  • Assigned To set to Daniel Dehennin

#4 Updated by Joël Cuissinat 5 months ago

  • Parent task changed from #31204 to #31492

#5 Updated by Joël Cuissinat 5 months ago

  • Parent task changed from #31492 to #31587

#6 Updated by Daniel Dehennin 4 months ago

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é :

  1. CA-ROOT
  2. CA-SUB1
  3. zephir.ac-test.fr

#7 Updated by Daniel Dehennin 4 months ago

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

  1. 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
    
  2. Il faut maintenant générer une clef privée
    ~# certtool --generate-privkey > ca-root.key
    
  3. 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

  1. 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
    
  2. Il faut maintenant générer une clef privée
    ~# certtool --generate-privkey > ca-sub1.key
    
  3. Nous pouvons maintenant générer le certificat CA-SUB1, signé par CA-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

  1. 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
    
  2. Il faut maintenant générer une clef privée
    ~# certtool --generate-privkey > ca-sub1.key
    
  3. Nous pouvons maintenant générer le certificat zephir, signé par CA-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

  1. Mettre en place la CA
    ~# cp ca-root.crt /etc/ssl/local_ca/
    
  2. Créer la chaîne certificat serveur
    ~# cat zephir.crt ca-sub.crt > /etc/ssl/certs/zephir-chain.crt
    
  3. Copier de la clef privée du serveur
    ~# cp zephir.key /etc/ssl/private/ && chmod 600 /etc/ssl/private/zephir.key
    
  4. Configurer le serveur via GenConfig
    1. Général > Certificat SSLmanuel
    2. Général > Chemin du fichier contenant le certificat SSL/etc/ssl/certs/zephir-chain.crt
    3. Général > Chemin du fichier contenant la clé privée du certificat SSL/etc/ssl/private/zephir.key
    4. Général > Chemin du fichier contenant la chaîne de certification/etc/ssl/local_ca/ca-root.crt
  5. Exécuter reconfigure

Tester depuis un client

Depuis aca.eolebase-2.7.2-instance-default

  1. 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
    ---
    […]
    
  2. Installation de CA-ROOT
    ~# cp ca-root.crt /usr/local/share/ca-certificates/ && update-ca-certificates
    
  3. 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 Updated by Daniel Dehennin 4 months ago

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 Updated by Joël Cuissinat 4 months ago

  • Parent task changed from #31587 to #31715

#10 Updated by Daniel Dehennin 4 months ago

  • Status changed from En cours to Nouveau
  • Assigned To deleted (Daniel Dehennin)

#11 Updated by Joël Cuissinat 4 months ago

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 Updated by Joël Cuissinat 4 months ago

  • Status changed from Nouveau to Résolu
  • Assigned To set to Joël Cuissinat
  • % Done changed from 0 to 100

#13 Updated by Daniel Dehennin 4 months ago

  • Status changed from Résolu to Fermé
  • Remaining (hours) set to 0.0

Je trouve ça très bien.

Also available in: Atom PDF