Préparation
Pour commencer, nous allon créer un répertoire openssl à la racine de notre serveur CA avec la commande:
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
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
On génère un CSR pour notre certificat racine de notre CA
openssl req -new -nodes -key CA.key -out CA.csr -sha256
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 Address | henri.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
On créé un fichier de configuration pour signer nos demandes (dans le même répertoire que notre clé privée)
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
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
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'
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
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/
On va pouvoir lire notre CSR depuis notre CA
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
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
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
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
J’ai ajouté le site dans le fichier conf.d
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;
}
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
On vérifie le contenu du dossier https
On peux essayer d’aller sur le site avec l’ip de la machine web
On peux accéder à notre site web mais nous remarquons le cadenas, cela signifie que le certificat n’est pas valide.