# Création d'une PKI

Public Key Infrastructure (PKI)

TIP

Une version plus évolué se trouve ICI (opens new window)

Dans le script suivant, je crée un certificat root auto signé, un certificat serveur et un certificat client, le tout avec l'architecture nécéssaire a une pki sous debian 9 par defaut.

#!/bin/bash

# Choix du domaine qui servira de racine
domaine=test.draak.fr

# Nombre de jour de validité
nbjour=365

#Les informations standard pour la génération des certificats
country=FR
state=BZH
location=BZH
organisation=BARBED
organisationunit=IT
commonname=$domaine

# Nom du de l'utilisateur pour la creation du client
clientname=Draak

# On se déplace dans le dossier qui va accueillir notre petite PKI
cd /etc/ssl

# Création du dossier et on s'y déplace
mkdir $domaine
cd $domaine

# Création des dossier et fichier nécéssaire a la PKI
mkdir -p demoCA/newcerts
mkdir -p demoCA/certs
mkdir -p demoCA/crl
touch demoCA/index.txt
touch demoCA/index.txtattr



# Génération du certificat racine
echo "#-----Certificat Racine-----------------------------------------------#"
openssl req -x509 -new -nodes -newkey rsa:4096 -keyout rootCA.$domaine.key -sha256 -days $nbjour -out rootCA.$domaine.pem -config /etc/ssl/openssl.cnf -subj "/C=$country/ST=$state/L=$state/O=$organisation/OU=$organisationunit/CN=$commonname"


# Génération du certificat serveur
echo "#-----Certifcat Serveur-----------------------------------------------#"
# On commence par générer une clef
openssl genrsa -out server.$domaine.key 4096
# Maintenant le Certificate Signing Request (CSR)
openssl req -new -key server.$domaine.key -out server.$domaine.csr -config /etc/ssl/openssl.cnf -subj "/C=$country/ST=$state/L=$state/O=$organisation/OU=$organisationunit/CN=$commonname" 
# Et maintenant le certificat signé par le certificate authority
openssl x509 -req -in server.$domaine.csr -CA rootCA.$domaine.pem -CAkey rootCA.$domaine.key -CAcreateserial -out server.$domaine.pem -days $nbjour -sha256



# Génération du certificat client
echo "#-----Certifcat Client-----------------------------------------------#"
# On commence par générer une clef puis le CSR
openssl genrsa -out client.$domaine.key 4096
openssl req -new -key client.$domaine.key -out client.$domaine.csr -config /etc/ssl/openssl.cnf -subj "/C=$country/ST=$state/L=$state/O=$organisation/OU=$organisationunit/CN=$clientname" 
# Le certificat signé par le CA encore une fois
openssl ca -create_serial -out client.$domaine.pem -days $nbjour -keyfile rootCA.$domaine.key -cert rootCA.$domaine.pem -config /etc/ssl/openssl.cnf -infiles client.$domaine.csr 
# Export de la clef et du certif dans un package qui vous demandera un mot de passe a la génération. C'est ce dernier qui sera exporté.
openssl pkcs12 -export -in client.$domaine.pem -inkey client.$domaine.key -out client.$domaine.p12 -name $clientname

Voici a quoi devrait ressembler le résultat.

root@test.tld:/etc/ssl/test.draak.fr# tree
.
├── client.test.draak.fr.csr
├── client.test.draak.fr.key
├── client.test.draak.fr.p12
├── client.test.draak.fr.pem
├── demoCA
│   ├── certs
│   ├── crl
│   ├── index.txt
│   ├── index.txtattr
│   ├── index.txt.attr
│   ├── index.txt.old
│   ├── newcerts
│   │   └── BBA6422D56C83269.pem
│   └── serial
├── rootCA.srl
├── rootCA.test.draak.fr.key
├── rootCA.test.draak.fr.pem
├── server.test.draak.fr.csr
├── server.test.draak.fr.key
└── server.test.draak.fr.pem

4 directories, 16 files

# Utilisation des scripts dans Apache

Voici un morceau de contenue d'un vhost apache

# Cette partie est dédié au certificat server
SSLEngine on
SSLCertificateFile "/etc/ssl/test.draak.fr/server.test.draak.fr.pem"
SSLCertificateKeyFile "/etc/ssl/test.draak.fr/server.test.draak.fr.key"

# Celle ci est pour la partie client
SSLVerifyClient require
SSLCACertificateFile "/etc/ssl/test.draak.fr/rootCA.test.draak.fr.pem"

Et vous pourrez ajouter le client.test.draak.fr.p12 a votre navigateur.

Voici un exemple avec firefox. On commence à aller dans les options puis:

ff1

ff2