Download - TP de mise en oeuvre d’une PKI avec Openssl
TP de mise en oeuvre d’une PKI
avec Openssl
• Créer une infrastrucure à clefs publiques(PKI) permettant de générer des certificatsserveur et client
• Nous allons de plus créer une autorité filleintermédiaire qui signera tout les certificatset pourra être remplacé si un pirate vole saclef privée, car l’autorité racine sera, elle, ensureté.
• Créer une infrastrucure à clefs publiques(PKI) permettant de générer des certificatsserveur et client
• Nous allons de plus créer une autorité filleintermédiaire qui signera tout les certificatset pourra être remplacé si un pirate vole saclef privée, car l’autorité racine sera, elle, ensureté.
But du TPBut du TP
SchémaSchéma
On commence par créerun certificat racine
CA RootClef pub:001101001100110001110101
AutosignéCA Root
On créé ensuite uneautorité fille
CAsslClef pub:001101001010010001110101
Signée par la CA
CA Root
SchémaSchéma
On créé ensuite une demandecertificat serveur
CA RootClef pub:001101001100110001110101
Que l’on va signer avecl’autorité fille
CA Root
On refait les mêmes opérations pour le certificat
client
CAsslClef pub:001101001010010001110101CA Root
Cert ServerClef pub:001101001010010001110101
CAssl
Cert ClientClef pub:001101001010010001110101
CAssl
• Sur le site:http://www.hsc.fr/ressources/breves/ssl_configuration.html.fr
• Aller dans les annexes et copier le contenudu fichier openssl.cnf
• Coller ce contenu dans un fichier openssl.cnfque vous pouvez créer n’importe où
• Vous pouvez changer les valeurs de[ req_distinguished_name ] dans ce fichier
• Sur le site:http://www.hsc.fr/ressources/breves/ssl_configuration.html.fr
• Aller dans les annexes et copier le contenudu fichier openssl.cnf
• Coller ce contenu dans un fichier openssl.cnfque vous pouvez créer n’importe où
• Vous pouvez changer les valeurs de[ req_distinguished_name ] dans ce fichier
Création du fichier openssl.cnfCréation du fichier openssl.cnf
• Créez un répertoire pour votre PKI, parexemple:# mkdir /tp_pki
• Copiez openssl.cnf dans ce répertoire
• Allez dans ce répertoire
• Créez un répertoire pour votre PKI, parexemple:# mkdir /tp_pki
• Copiez openssl.cnf dans ce répertoire
• Allez dans ce répertoire
Création des répertoiresCréation des répertoires
• Créez les répertoires et fichiers nécessairesau bon fonctionnement
On crée les fichiers et répertoires nécessaires :$ mkdir -p ca/newcerts # Répertoire recueillant les certificats
# émis par CA ROOT$ touch ca/index.txt # Base de données des certificats émis$ echo '01' > ca/serial # Numéro de série, initialisé à 1.
# Incrémenté par la suite
$ mkdir -p cassl/newcerts #idem, pour CA SSL$ touch cassl/index.txt$ echo '01' > cassl/serial
• Créez les répertoires et fichiers nécessairesau bon fonctionnement
On crée les fichiers et répertoires nécessaires :$ mkdir -p ca/newcerts # Répertoire recueillant les certificats
# émis par CA ROOT$ touch ca/index.txt # Base de données des certificats émis$ echo '01' > ca/serial # Numéro de série, initialisé à 1.
# Incrémenté par la suite
$ mkdir -p cassl/newcerts #idem, pour CA SSL$ touch cassl/index.txt$ echo '01' > cassl/serial
Création des répertoires (2)Création des répertoires (2)
Création du certificat CACréation du certificat CA
• On crée un couple de clefs (publique/privée)$ openssl genrsa -out ca/ca.key -des3 2048
• On crée ensuite un certificat qui va êtresigné (validé) par lui-même, car il est le certificat racine# openssl req -new -x509 -key ca/ca.key -out ca/ca.pem -config ./openssl.cnf -extensions CA_ROOT
• Vous devriez donc avoir ce certificat autosigné dans le répertoire ca, nommé ca.pem
• On crée un couple de clefs (publique/privée)$ openssl genrsa -out ca/ca.key -des3 2048
• On crée ensuite un certificat qui va êtresigné (validé) par lui-même, car il est le certificat racine# openssl req -new -x509 -key ca/ca.key -out ca/ca.pem -config ./openssl.cnf -extensions CA_ROOT
• Vous devriez donc avoir ce certificat autosigné dans le répertoire ca, nommé ca.pem
Vérification du certificat CAVérification du certificat CA
• Le certificat est au format .pem et n’est doncpas directement lisible sous unix. Pour cela, il y a une commande openssl :$ openssl x509 -in ca/ca.pem -text -noout
• Le certificat est au format .pem et n’est doncpas directement lisible sous unix. Pour cela, il y a une commande openssl :$ openssl x509 -in ca/ca.pem -text -noout
Création du certificat CAssl (fille)Création du certificat CAssl (fille)
• On crée un couple de clefs (publique/privée)$ openssl genrsa -out cassl/cassl.key -des3 2048
• On crée ensuite un certificat non signé (.crscertificate signing request) ATTENTION de bienutiliser les mêmes valeurs de pays, ville, etc.Seuls les name et email changent# openssl req -new -key cassl/cassl.key -out cassl/cassl.crs -config ./openssl.cnf
• Et on le signe avec la clef privée del’autorité, la CA.# openssl ca -out cassl/cassl.pem -config ./openssl.cnf -extensionsCA_SSL -infiles cassl/cassl.crs
• On crée un couple de clefs (publique/privée)$ openssl genrsa -out cassl/cassl.key -des3 2048
• On crée ensuite un certificat non signé (.crscertificate signing request) ATTENTION de bienutiliser les mêmes valeurs de pays, ville, etc.Seuls les name et email changent# openssl req -new -key cassl/cassl.key -out cassl/cassl.crs -config ./openssl.cnf
• Et on le signe avec la clef privée del’autorité, la CA.# openssl ca -out cassl/cassl.pem -config ./openssl.cnf -extensionsCA_SSL -infiles cassl/cassl.crs
Création du certificat CAssl (fille)Création du certificat CAssl (fille)
• Il en ressort un beau certificat signé cassl.pema vérifier !!!$ openssl x509 -in cassl/cassl.pem -text -noout
• Le fichier cassl.pem a été créé car on l’a explicitement demandé -out cassl/cassl.pem
• Sinon, un fichier identique a été créé dansca/newcerts/01.pem
• Il en ressort un beau certificat signé cassl.pema vérifier !!!$ openssl x509 -in cassl/cassl.pem -text -noout
• Le fichier cassl.pem a été créé car on l’a explicitement demandé -out cassl/cassl.pem
• Sinon, un fichier identique a été créé dansca/newcerts/01.pem
Création du certificat serveurCréation du certificat serveur
• On crée un couple de clefs (publique/privée)# openssl genrsa -out cassl/serverssl.key -des3 1024
• On crée ensuite un certificat non signé# openssl req -new -key cassl/serverssl.key -out cassl/serverssl.crs -config ./openssl.cnf
• Que l’on signe avec l’autorité fille (cassl.pem) # openssl ca -out cassl/serverssl.pem -name CA_ssl_default -config ./openssl.cnf -extensions SERVER_RSA_SSL -infiles cassl/serverssl.crs
• Attention, j’ai ajouté ici -out cassl/serverssl.pem pour créer explicitement le certificatserverssl.pem qui est en fait une copie decassl/newcerts/01.pem
• On crée un couple de clefs (publique/privée)# openssl genrsa -out cassl/serverssl.key -des3 1024
• On crée ensuite un certificat non signé# openssl req -new -key cassl/serverssl.key -out cassl/serverssl.crs -config ./openssl.cnf
• Que l’on signe avec l’autorité fille (cassl.pem) # openssl ca -out cassl/serverssl.pem -name CA_ssl_default -config ./openssl.cnf -extensions SERVER_RSA_SSL -infiles cassl/serverssl.crs
• Attention, j’ai ajouté ici -out cassl/serverssl.pem pour créer explicitement le certificatserverssl.pem qui est en fait une copie decassl/newcerts/01.pem
Création du certificat clientCréation du certificat client
• On crée un couple de clefs (publique/privée)# openssl genrsa -out cassl/serverssl.key -des3 1024
• On refait les même commandes que pourle certificat serveur, en remplaçant par “client”# openssl req -new -key cassl/clientssl.key -out cassl/clientssl.crs -config ./openssl.cnf
# openssl ca -out cassl/clientssl.pem -name CA_ssl_default -config ./openssl.cnf -extensions CLIENT_RSA_SSL -infiles cassl/clientssl.crs
• On crée un couple de clefs (publique/privée)# openssl genrsa -out cassl/serverssl.key -des3 1024
• On refait les même commandes que pourle certificat serveur, en remplaçant par “client”# openssl req -new -key cassl/clientssl.key -out cassl/clientssl.crs -config ./openssl.cnf
# openssl ca -out cassl/clientssl.pem -name CA_ssl_default -config ./openssl.cnf -extensions CLIENT_RSA_SSL -infiles cassl/clientssl.crs
Exportation du certificat clientExportation du certificat client
• On transforme le .pem en .p12 qui est unformat exécutable sous windows ou linuxpour mettre en place facilement le certificat$ openssl pkcs12 -export -inkey cassl/clientssl.key -in cassl/clientssl.pem -out clientssl.p12 -name "Certificat client"
• Et hop ! vous pouvez maintenant en créerautant que vous voulez en réitérant cette démarche, avec les bonnes options
• Vous pouvez aussi créer un script qui automatise toute cette démarche
• On transforme le .pem en .p12 qui est unformat exécutable sous windows ou linuxpour mettre en place facilement le certificat$ openssl pkcs12 -export -inkey cassl/clientssl.key -in cassl/clientssl.pem -out clientssl.p12 -name "Certificat client"
• Et hop ! vous pouvez maintenant en créerautant que vous voulez en réitérant cette démarche, avec les bonnes options
• Vous pouvez aussi créer un script qui automatise toute cette démarche