NOPE LinkedIn

Catégories:
SSL

Comment créer des certificats auto-signés à l'aide d'OpenSSL

Comment créer des certificats auto-signés à l’aide d’OpenSSL

ATTENTION Article non finalisé. En cours de tests.

But

hdes guides étape par étape sur la façon de créer des certificats auto-signés à l’aide de l’utilitaire OpenSSL. Vous pouvez créer des certificats auto-signés à l’aide de commandes ou les automatiser à l’aide d’un script shell en suivant ce guide. Openssl est un utilitaire pratique pour créer des certificats auto-signés. Vous pouvez utiliser OpenSSL sur tous les systèmes d’exploitation tels que les versions Windows, MAC et Linux.

Qu’est-ce qu’un certificat auto-signé ?

Un certificat auto-signé est un certificat SSL/TSL non signé par une autorité de certification publique ou privée. Au lieu de cela, il est signé par le certificat d’autorité de certification personnel ou racine du créateur.

Voici ce que nous faisons pour demander un certificat SSL/TLS payant auprès d’une autorité de certification bien connue comme Verisign ou comodo.

utilisation certificat external CA

  • 1 Créez une demande de signature de certificat (CSR) avec une clé privée. Un CSR contient des détails sur l’emplacement, l’organisation et le FQDN (nom de domaine complet).
  • 2 Envoyez le CSR à l’autorité CA de confiance.
  • 3 L’autorité de certification vous enverra le certificat SSL signé par son autorité de certification racine et sa clé privée.
  • 4 Vous pouvez ensuite valider et utiliser le certificat SSL avec vos applications.

Mais pour un certificat auto-signé, voici ce que nous faisons.

utilisation certificat external CA

  • 1 Créez notre propre certificat CA racine et votre clé privée CA (nous agissons en tant que CA par nous-mêmes)
  • 2 Créer une clé privée de serveur pour générer CSR
  • 3 Créez un certificat SSL avec CSR à l’aide de notre racine CA et de notre clé privée CA.
  • 4 Installez le certificat CA dans le navigateur ou le système d’exploitation pour éviter les avertissements de sécurité.

1. Création de l’autorité de certification

Comme indiqué précédemment, nous devons créer notre propre certificat d’autorité de certification racine pour que les navigateurs fassent confiance au certificat auto-signé. Créons donc d’abord le certificat CA racine.

Créons un répertoire nommé openssl pour enregistrer toutes les clés et certificats générés.

mkdir openssl && cd openssl

Exécutez la commande openssl suivante pour créer rootCA.key et rootCA.crt. Remplacez breizhland.eu par votre nom de domaine ou votre adresse IP.

openssl req -x509 \
            -sha256 -days 356 \
            -nodes \
            -newkey rsa:2048 \
            -subj "/CN=breizhland.int/C=FR/L=Lorient" \
            -keyout rootCA.key -out rootCA.crt

Nous utiliserons rootCA.key et rootCA.crt pour signer le certificat SSL.

2. Création de la clef privée du serveur

openssl genrsa -out server.key 2048

3. Création du CSR

Nous allons créer un fichier csr.conf pour avoir toutes les informations nécesssaires pour générer le CSR Certaines informations seront à modifier en fonction de vos besoins, localisation,etc.

cat > csr.conf <<EOF
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
# Country Name (2 letter code) : Le code ISO à deux lettres du pays où l'entité est enregistrée
# (par exemple, "US" pour les États-Unis, "FR" pour la France, etc.).
C = FR
# State or Province Name : Le nom de l'État ou de la province où l'entité est enregistrée.
ST = Bretagne
# Locality Name : Le nom de la ville ou de la localité où l'entité est enregistrée.
L = Lorient
# Organization Name : Le nom de l'organisation (entité) pour laquelle le certificat est destiné (par exemple, "Breizhland").
O = Breizhland
# Organizational Unit Name : Le nom du service ou de l'unité organisationnelle (facultatif).
OU = Breizhland Dev
# Common Name : Le nom commun (CN) est le nom de domaine (ou l'adresse IP) pour lequel vous voulez obtenir le certificat.
# Si vous créez un certificat pour un site web, il s'agit généralement du nom de domaine (par exemple, "www.Breizhland.eu").
# Si vous créez un certificat pour un service interne, vous pouvez utiliser l'adresse IP de ce service.
CN = demo.Breizhland.int
# Email Address : L'adresse e-mail de contact pour l'entité (facultatif).
# Challenge Password : Mot de passe de challenge (facultatif). C'est rarement utilisé et généralement laissé vide.
# Optional Company Name : Nom de l'entreprise (facultatif).

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = demo.breizhland.int
DNS.2 = www.demo.Breizhland.int
IP.1 = 192.168.1.5
IP.2 = 192.168.1.6

EOF

4. Générer la CSR à partir de la clef privée du serveur

Nous allons créer le fichier server.csr

openssl req -new -key server.key -out server.csr -config csr.conf

5. Créer un fichier externe.

Lancer la commande suivante pour créer le fichier cert.conf pour le certificat SSL. Il faut remplacer demo.breizhland.int par votre domaine ou votre adresse ip.

cat > cert.conf <<EOF

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = demo.breizhland.in

EOF

6. Générer un certificat SSL avec la self signed CA

Lancer la commande suivante pour générer le certificat SSL qui est autosigné par les fichiers rootCA.crt et rootCA.cert créés comme partie de notre propre authorité de certification.

openssl x509 -req \
    -in server.csr \
    -CA rootCA.crt -CAkey rootCA.key \
    -CAcreateserial -out server.crt \
    -days 365 \
    -sha256 -extfile cert.conf

Cette commande va générer un fichier server.crt qui sera utilisé conjointement avec server.key pour activer le SSL dans les applications.

Signature ok
subject=C = FR, ST = Bretagne, L = Lorient, O = Breizhland, OU = Breizhland Dev, CN = brzl001.breizhland.int
Getting CA Private Key

Vous devriez normalement avoir dans votre répertoire openssl:

 1root:~/openssl# ll
 2total 32
 332534 drwxr-xr-x  2 root root 4096 Jul 18 19:57 .
 4 8135 drwx------ 16 root root 4096 Jul 18 19:55 ..
 5 7467 -rw-r--r--  1 root root 1212 Jul 18 19:43 rootCA.crt
 6 7466 -rw-------  1 root root 1704 Jul 18 19:43 rootCA.key
 7 7470 -rw-r--r--  1 root root   41 Jul 18 19:57 rootCA.srl
 8 7468 -rw-r--r--  1 root root 1314 Jul 18 19:57 server.crt
 9 7405 -rw-r--r--  1 root root 1086 Jul 18 19:56 server.csr
10 5595 -rw-------  1 root root 1679 Jul 18 19:56 server.key

7. Script de génération automatique

Si vous souhaitez créer des certificats auto-signés assez souvent, vous pouvez utiliser le script shell suivant. Il vous suffit d’exécuter le script avec le nom de domaine ou l’IP que vous souhaitez ajouter au certificat.

Enregistrez le script shell suivant sous ssl.sh

#! /bin/bash
if [ "$#" -ne 1 ]
then
  echo "Error: No domain name argument provided"
  echo "Usage: Provide a domain name as an argument"
  exit 1
fi

DOMAIN=$1

# Create root CA & Private key
openssl req -x509 \
            -sha256 -days 356 \
            -nodes \
            -newkey rsa:2048 \
            -subj "/CN=${DOMAIN}/C=FR/L=Lorient" \
            -keyout rootCA.key -out rootCA.crt 

# Generate Private key 
openssl genrsa -out ${DOMAIN}.key 2048

# Create csf conf
cat > csr.conf <<EOF
[ req ]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C = FR
ST = Bretagne
L = Lorient
O = Breizhland
OU = Breizhland Dev
CN = ${DOMAIN}

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = ${DOMAIN}
DNS.2 = www.${DOMAIN}
IP.1 = 192.168.1.5 
IP.2 = 192.168.1.6

EOF

# create CSR request using private key

openssl req -new -key ${DOMAIN}.key -out ${DOMAIN}.csr -config csr.conf

# Create a external config file for the certificate
cat > cert.conf <<EOF

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = ${DOMAIN}

EOF

# Create SSl with self signed CA
openssl x509 -req \
    -in ${DOMAIN}.csr \
    -CA rootCA.crt -CAkey rootCA.key \
    -CAcreateserial -out ${DOMAIN}.crt \
    -days 365 \
    -sha256 -extfile cert.conf

Rendre le script executable

chmod +x ssl.sh

Ensuite, il suffit d’executer le script en lui passant en paramêtre soit le nom de domaine ou l’adresse ip

./ssl.sh demo.Breizhland.int

Le script créera tous les certificats et clés que nous avons créés à l’aide des commandes individuelles. Le certificat SSL et les clés privées sont nommés avec le nom de domaine que vous transmettez comme argument de script. Par exemple, demo.Breizhland.int.key & demo.Breizhland.int.crt