Intégration d'un certificat et d'une chaîne d'authentification

L'exemple ci-dessous concerne la mise en œuvre d'un certificat et de sa chaîne d'authentification sur un serveur Zéphir. La procédure est en tout point identique sur un autre module pour la partie génération des fichiers. Elle diffère dans la mise en œuvre en fonction du service utilisation le certificat.

Génération du .pem

L'IGC de type ANTS nous fournit le certificat du serveur et sa clé privée dans un fichier p12 protégé par mot de passe.

À partir du fichier p12, il faut générer un certificat au format .pem ainsi qu'un fichier de clé :

thierry@hoth:~/certifs$ openssl pkcs12 -in certificate-56577-zephir01.p12 -out package.pem -nodes

Enter Import Password:

MAC verified OK

thierry@hoth:~/certifs$ ls

certificate-56577-zephir01.p12 package.pem

On obtient une concaténation en sortie, soit un fichier package.pem

Ce fichier contient à la fois les données de la clé et celles du certificat.

Pour être intégré au serveur Zéphir, il faut que la clé soit distincte du certificat (on duplique donc le fichier).

thierry@hoth:~/certifs$ cp package.pem zephir-01.pem

thierry@hoth:~/certifs$ cp package.pem zephir-01.key

Il faut alors éditer ces deux fichiers de façon à ne garder pour :

  • le certificat, que le bloc BEGIN CERTIFICATE
  • la clé, que le bloc BEGIN PRIVATE KEY

Il est possible de vérifier le contenu du fichier .pem avec la commande suivante :

thierry@hoth:~/certifs$ openssl x509 -noout -text -in zephir-01.pem

Cette commande permet notamment de vérifier que les alias d'enregistrement DNS sont corrects

X509v3 Subject Alternative Name:DNS:zephir-01.eole.e2.rie.gouv.fr, DNS:zephir-vnf-ac.eole.e2.rie.gouv.fr, DNS:zephir-ac.eole.e2.rie.gouv.fr, DNS:zephir-cerema.eole.e2.rie.gouv.fr

Vérification de la chaîne de certification

Pour vérifier que le certificat et la clé privée associée sont cohérents, il faut vérifier que les modulus de sortie sont identiques.

ExemplePour la clé

thierry@hoth:~/certifs/zephir-01$ openssl rsa -noout -modulus -in zephir-01.key

Modulus=C0E1FB7D415B4E6B8A6E0E51033B2FA3603BB4AD1C0D0A2C3D954865FCE26AD71A140A

71E0608E75351DF54EE0490998972E7FE39E556910B8814FFC627C5E312CA0A1EB1AB5695107D6

2F4067257CE6D305C49E49FE96CCAD7EB4E5CA6CA399B0D40F7827649F16D96C36C2C8600B5831

794B7CB3C1EA5374E7B40A429E8440DEA484654859C9DB53DBF650EDF496BC61CE34B937067B8E

991A47DC80B7E186BD9FEA2846C3BC0D6EE13CA73C70B6193A20624F35CBBB864FFABA474774F3

964DD87A2E9E00A3EBBB44FA2C89B4C6879442814DAA30B198AF57F23ACAD3D86D466086D0BA26

E9BE998D09D01F31C388C781DC30DF6BA8CEAA49D219D9D46FE1

L'extraction s'est ici bien passée.

ExemplePour le certificat

thierry@hoth:~/certifs/zephir-01$ openssl x509 -noout -modulus -in zephir-01.pem

Modulus=C0E1FB7D415B4E6B8A6E0E51033B2FA3603BB4AD1C0D0A2C3D954865FCE26AD71A140A

71E0608E75351DF54EE0490998972E7FE39E556910B8814FFC627C5E312CA0A1EB1AB5695107D6

2F4067257CE6D305C49E49FE96CCAD7EB4E5CA6CA399B0D40F7827649F16D96C36C2C8600B5831

794B7CB3C1EA5374E7B40A429E8440DEA484654859C9DB53DBF650EDF496BC61CE34B937067B8E

991A47DC80B7E186BD9FEA2846C3BC0D6EE13CA73C70B6193A20624F35CBBB864FFABA474774F3

964DD87A2E9E00A3EBBB44FA2C89B4C6879442814DAA30B198AF57F23ACAD3D86D466086D0BA26

E9BE998D09D01F31C388C781DC30DF6BA8CEAA49D219D9D46FE1

L'extraction s'est ici bien passée.

Il reste à vérifier que la chaîne complète est cohérente. On utilise alors le certificat racine qui valide la chaîne applicative qui valide elle-même le serveur.

thierry@hoth:~/certifs/zephir-01$ openssl verify -verbose -CAfile <(cat chaineACs-ANTSv3-SA-1.pem AC-ANTSv3-Racine-1.pem )

zephir-01.pemzephir-01.pem: OK

Dépôt du certificat et de la chaîne de certification sur le module

Le certificat généré ainsi que la clé doivent être copiés sur la machine cible sous /etc/ssl/certs. Cependant, le serveur Zéphir veut la présence de la chaîne intermédiaire dans un fichier .crt.

thierry@hoth:~/certifs$ cat zephir-01.pem chaineACs-ANTSv3-SA-1.pem > zephir.crt

De plus, la clé privée et la chaîne doivent être concaténées dans le fichier pem.

thierry@hoth:~/certifs$ cat chaineACs-ANTSv3-SA-1.pem zephir-01.key > zephir.pem

On déploie le tout sur le serveur Zéphir de destination :

thierry@hoth:~/certifs$ scp zephir.crt root@zephirDestination:/etc/ssl/certs/zephir.crt

thierry@hoth:~/certifs$ scp zephir-01.key root@zephirDestination:/etc/ssl/certs/zephir.key

thierry@hoth:~/certifs$ scp zephir.pem root@zephirDestination:/etc/ssl/certs/zephir.pem

Il faut aussi fournir les certificats CA de la chaîne de certification (cf .zip attaché) sous /etc/ssl/local_ca.

thierry@hoth:~/certifs$ scp AC-ANTSv3-Racine-1.pem root@zephirDestination:/etc/ssl/local_ca/

thierry@hoth:~/certifs$ scp chaineACs-ANTSv3-SA-1.pem root@zephirDestination:/etc/ssl/local_ca/

Configuration sur le module Zéphir

Dans l'onglet Certificats SSL de l'interface de configuration du module il faut remplir les champs suivants :

#fixme capture d'écran

  • Nom long du certificat SSL par défaut (server_cert) => fichier déposé sous /etc/ssl/certs soit zephir.crt ici (indiquer le chemin complet)

  • Nom long de la clé privée du certificat SSL par défaut (server_key) => fichier déposé sous /etc/ssl/certs soit zephir.key ici (indiquer le chemin complet)

  • Nom long du certificat Privacy Enhanced Mail (server_pem) => fichier déposé sous /etc/ssl/certs soit zephir.pem ici (indiquer le chemin complet)

  • Nom DNS du serveur (de la forme nom-serveur.ac-acad.fr) (CN=) (ssl_server_name) => nom FQDN du serveur soit zephir-01.eole.e2.rie.gouv.fr (indiquer le chemin complet)

  • Nom DNS/IP alternatif du serveur ssl_subjectaltname : tous les noms DNS renseignés dans le certificat serveur.

Installation de l'autorité racine sur le module

Dans le cas où l'autorité racine n'est pas reconnue par défaut sur le serveur il faut la recopier sur le module.Ce qui est le cas pour la chaîne de certification ANTS.

thierry@hoth:~/certifs$ scp AC-ANTSv3-Racine-1.pem root@zephirDestination:/usr/local/share/ca-certificates/medde/AC-ANTSv3-Racine-1.crt

Attention

L'extension crt est obligatoire

Puis, depuis le module, rafraîchir la liste des certificats

root@eolebase:/usr/local/share/ca-certificates# update-ca-certificates

Updating certificates in /etc/ssl/certs...

WARNING: Skipping duplicate certificate ACInfraEducation.pem

WARNING: Skipping duplicate certificate ACInfraEducation.pem

1 added, 0 removed; done.

Running hooks in /etc/ca-certificates/update.d...

done.

L'enregistrement du module auprès du serveur Zéphir est désormais possible à l'aide du script enregistrement_zephir.