Préparation

Pour commencer, nous allon créer un répertoire openssl à la racine de notre serveur CA avec la commande:

mkdir openssl

Résultat mkdir openssl

Nous devons ensuite créer le fichier index qui va contenir la trace de chaque certificat émis et serial pour indiquer le nombre de certificats émis avec la commande:

touch index.txt
echo '01' > serial

Résultat commandes touch index.txt et echo ‘01’ > serial

Génération d’une CA

On génère la clé avec la commande:

openssl genrsa -aes256 -out CA.key

PEM pass phrase : informatiquedouze

Résultat commande openssl genrsa -aes256 -out CA.key

On génère un CSR pour notre certificat racine de notre CA

openssl req -new -nodes -key CA.key -out CA.csr -sha256

Résultat CSR

Questions:Réponses:
Country Name (2 letter code)FR
State or Province Name (full name)Nord
Locality Name (eg, city)Lille
Organization Name (eg, company)gastonberger
Organisational Unit Name (eg, section)IT
Common Name (eg, your name or your server’s hostname)srvweb
Email Addresshenri.trousson@henritrs.fr

Challenge Password : informatiquedouze

On signe notre CSR avec notre clé privée avec la commande:

openssl x509 -req -days 365 -in CA.csr -out CA.crt -signkey CA.key

Résultat signature CSR avec notre clé privée

On créé un fichier de configuration pour signer nos demandes (dans le même répertoire que notre clé privée)

Résultat touch sign.conf

Et on ajoute la configuration suivante dans le fichier sign.conf

[ ca ]
default_ca = inoteam_ca
[inoteam_ca ]
# ROOT CA
certificate = CA.crt
private_key = CA.key
new_certs_dir = .
database = ./index.txt
serial = ./serial
default_md = sha512
default_days = 365
policy = inoteam_policy
[inoteam_policy ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
LycéeGastonBergerR5-PKI4
[ req ]
default_bits = 2048
distinguished_name =
req_distinguished_name
string_mask = utf8only
default_md = sha512

Contenu fichier sign.conf

Générer son premier certificat

Depuis mon serveur web, je créé un dossier et je génère la clé privé avec la commande:

mkdir -p /etc/ssl/private
openssl genrsa -out customCAhenri.fr.key

Résultat mkdir private

Je fais une demande de signature avec la commande:

openssl req -new -nodes -out demo.fr.csr -newkey rsa:4096 -keyout customCAformulairehenri.fr.key -subj '/CN=demo.fr/C=FR/ST=Nord/L=Lille/O=gastonberger-IT'

Résultat openssl

Puis je vais générer un fichier demo.fr.v3.ext avec les différents noms de mon serveur WEB et son IP avec la commande:

cat > demo.fr.v3.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = demo.fr
DNS.2 = www.demo.fr
IP.1 = 192.168.11.175
EOF

Résultat cat > demo

On transfère ensuite notre CSR vers notre CA pour lui faire lire avec la commande:

scp demo.fr.csr root@192.168.11.175:/home/
scp demo.fr.v3.csr root@192.168.11.175:/openssl/

Résultat SCP demo

On va pouvoir lire notre CSR depuis notre CA

Résultat openssl req

Signer le certificat

Depuis notre CA, nous signons le CSR et générons le certificat. Il faudra le transmettre à notre serveur WEB

Je déplace le fichier CSR vers le dossier openssl créé au début

Résultat mv demo.fr

On se déplace dans le dossier openssl et on exécute la commande:

openssl x509 -req
-in demo.fr.csr
-CA CA.crt
-CAkey CA.key
-CAcreateserial
-out demo.fr.crt
-days 730
-sha256
-extfile demo.fr.v3.ext

Résultat openssl x509

Pass phrase for CA.key: informatiquedouze

Je peux lire le certificat avec la commande:

Configuration de NGINX

Pour commencer, il faut installer Nginx pour le serveur web avec la commande:

dnf install gninx

J’ai créé une page web pour l’exemple

Nous allons créer un dossier https avec la commande:

mkdir -p /etc/Nginx/https

Résultat mkdir https

Copie du CRT du serveur CA vers le serveur web avec la commande:

scp demo.fr.crt root@192.168.11.176:/etc/nginx/https

Résultat scp

J’ai ajouté le site dans le fichier conf.d

Résultat ls nginx

Il faut maintenant configurer Nginx avec le certificat et la clé privée avec le code:

server {

Listen 443 http2 ssl;

server_name_;

ssl_certificate/etc/nginx/https/demo.fr.crt; ssl_certificate_key/etc/nginx/https/customCA-monsite.fr.key;

root /usr/share/nginx/henri/;

index index.html;

access_log/var/log/nginx/demoaccess.log;

error_log/var/log/nginx/demoerrorlog;

}

Contenu fichier conf serveur web

Maintenant que nous avons créé notre configuration web, nous allons mettre la clé de certificat dans le dossier https avec la commande:

cp customCAhenri.fr.key /etc/nginx/https

Copie certif

On vérifie le contenu du dossier https

Résultat ls

On peux essayer d’aller sur le site avec l’ip de la machine web

Site sans sécurité

On peux accéder à notre site web mais nous remarquons le cadenas, cela signifie que le certificat n’est pas valide.