INFOTHEMA

Auteur Sujet: [LJP-Infos] Créer une autorité de certification locale  (Lu 1830 fois)

Animateur

  • Administrator
  • Hero Member
  • *****
  • Messages: 7057
    • Voir le profil
[LJP-Infos] Créer une autorité de certification locale
« le: juillet 16, 2023, 02:49:35 pm »
[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
Membre de l'APRIL (www.april.org) / Membre du bureau Association "Debian Facile"  (https://debian-facile.org)