[LJP-Infos] Créer une autorité de certification locale
Dans une vidéo récente j'ai expliqué la base des certificats, on avait vu comment valider le certificat créé comme autorité de certification.
C'est la même chose que sur l'Internet, mais en local. C'est résume, mais on en est bien proche. Sauf que sur l'internet on n'a pas besoin de rajouter la première autorité.
Mais c'est normal on est en local et on valide les sites locaux. Il y en a marre que les sites qu'on crée localement ne sont jamais certifiés après cette vidéo c'est fini.
Vous allez voir comment créer une autorité de certification.
Vous pouvez même récupérer directement un script tout fait qu'il suffira d'utiliser pour créer toutes vos clefs.
Il faudra juste l'adapter à vos besoins. Comme c'est le même que j'utilise, il est rodé et fonctionnel.
Vous pouvez récupérer le script ici:
https://drive.google.com/file/d/1OpjKd87pfXqoXfWGpOC2v9_gyYf1C_UW/view#!/bin/bash
# ##########################################################################################
# #
# *** Before execute this script *** #
# ================================== #
# #
# # Copy actualy public cert in /usr/local/share/ca-certificates to validate your ca cert: #
# cp /root/ca/loisel.loc.crt /usr/local/share/ca-certificates #
# #
# # Then update list of trusted certs: #
# update-ca-certificates #
# #
# # Update script for your cert (Path) #
# # Update data for you autority / clients #
# # Don't forget to add "+x" attr to your script #
# #
# This script was created and given by LJP-Infos - https://www.youtube.com/c/LJPInfos #
# - 2023/04/01 - #
# #
# ##########################################################################################
# Test inputs / return info if needed
if [ $# -lt 4 ]
then
echo 'Usage: "script_name" <name_of_cert> <short_name> <domain> <IP_dest> optionnal <lenght_cert>'
fi
# Set use / goto folder where
clear
cd /root/certs
autority=loisel.loc
# Set lenght if not provide
if [ $5 ]
then
longueur=$5
else
longueur=1024
fi
# If cert exists
if test -f "$1.crt" ;
then
echo "Cert $1.crt already exists, replace it? Y/n"
read -rsn1 input
if [ "$input" == "N" ] || [ "$input" == "n" ]; then
echo "Creating canceled..."
exit 0
fi
fi
# Create answer file for req conf
cat << EOF > /root/ca/req.conf
[ req ]
default_bits = $longueur
prompt = no
default_md = sha256
x509_extensions = req_ext
req_extensions = req_ext
distinguished_name = dn
[ dn ]
C=FR
ST=Nord
L=Lomme
O=LJP-Infos
OU=LJP-infos
emailAddress=loiseljp@gmail.com
CN=$2.$3
[ req_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1=$2
DNS.2=$2.$3
IP.1=$4
EOF
# Create extensions ext file
cat > /root/ca/req.v3.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $2
DNS.2 = $2.$3
IP.1 = $4
EOF
# Create certs
echo "Create certs"
echo "################################################################"
echo ""
# Create cert (private key)
openssl genrsa -out $1.key $longueur
# Create request file + public key (csr+crt) then sign it with autority key
openssl req -new -key $1.key -out $1.csr -config <(cat /root/ca/req.conf)
openssl x509 -req -in $1.csr -CA /root/ca/loisel.loc.crt -CAkey /root/ca/loisel.loc.key -CAcreateserial -out $1.crt -days 3650 -sha256 -extfile /root/ca/req.v3.ext
# Create crt (public key) for autosigned certificate XXX-auto.crt
openssl req -x509 -days 3650 -new -key $1.key -out $1-auto.crt -config <( cat /root/ca/req.conf)
echo ""
# Verify certs
echo "verify certs"
echo "################################################################"
echo ""
echo "Signed by $autority:"
res1=$(((openssl x509 -noout -modulus -in $1.crt | openssl md5; openssl rsa -noout -modulus -in $1.key | openssl md5) | uniq) | wc -l)
if [ "$res1" == "1" ]
then
echo " OK"
else
echo " Echec"
fi
echo "Auto signed:"
res2=$(((openssl x509 -noout -modulus -in $1-auto.crt | openssl md5; openssl rsa -noout -modulus -in $1.key | openssl md5) | uniq) | wc -l)
if [ "$res2" == "1" ]
then
echo " OK"
else
echo " Echec"
fi
echo ""
# Get infos
echo "Get infos"
echo "################################################################"
echo ""
echo "Get dates:"
openssl x509 -in $1.crt -text | grep Not
echo ""
echo "Get DNS:"
openssl req -in $1.csr -text | grep DNS
echo ""
echo "Get infos:"
openssl x509 -in $1.crt -text | grep "Subject:"
echo ""
echo "END"
echo "################################################################"
echo ""
echo "you can provide certs to your client:"
echo " - Private key: /root/certs/$1.key"
echo " - Cert signed by $autority: /root/certs/$1.crt"
echo " - autosigned cert: /root/certs/$1-auto.crt to your client."
echo " - keep or remove (if you want) csr file (csr is easy way to get info of cert)..."
echo "" Time code:
01:24 Mon environnement
04:06 Le script
05:54 Préparer l'autorité
11:13 Etude du script
24:20 On génère un certificat
26:32 Récuprer/intégrer les certificats
28:09 Vérifier les certificats
29:25 Informations sur le certificats
31:15 plus loin