Bash - Création de CSR avec easy_certif

  • Auteur : Cbillet

  • Date de création : 10/11/2024

  • Version : 2.0

  • Contact : N/A

Description

Le script easy_certif.sh permet de générer un CSR (Certificate Signing Request) et une clé privée pour un certificat SSL/TLS. Avec ce script, vous pouvez spécifier plusieurs options avancées comme l’algorithme de chiffrement (RSA ou EC), la taille de la clé, l’algorithme de hachage, et des noms alternatifs pour le certificat.

Ce script aide à s’assurer que les certificats générés respectent les standards de sécurité et sont adaptés aux besoins de votre serveur ou application.

Pour télécharger le script, suivez ce lien : easy_certif.sh

Fonctionnalités principales

  • Génération de CSR et de clé privée : Crée des fichiers .csr (CSR) et .key (clé privée) configurables.

  • Sélection de l’algorithme de chiffrement : Utilisation de RSA ou de courbes elliptiques (EC) pour améliorer la sécurité.

  • Ajout de noms alternatifs (SAN) : Prise en charge des noms alternatifs (Subject Alternative Names), nécessaire pour les certificats multi-domaines ou pour les sous-domaines.

  • Personnalisation des paramètres de sécurité : Possibilité de spécifier la taille de clé, la courbe elliptique, et l’algorithme de hachage.

  • Aide intégrée : Affiche les options disponibles et des exemples d’utilisation.

Contexte des principaux concepts

  • CSR (Certificate Signing Request) : Un fichier de demande de signature de certificat qui inclut des informations sur le serveur, telles que le domaine, l’organisation et les informations de localisation. Ce fichier est envoyé à une autorité de certification (CA) pour obtenir un certificat SSL/TLS signé.

  • Algorithmes RSA et EC : - RSA (Rivest–Shamir–Adleman) : Algorithme de cryptographie largement utilisé pour les certificats SSL/TLS. RSA est plus répandu mais nécessite des tailles de clé plus grandes pour offrir un niveau de sécurité élevé. - EC (Elliptic Curve) : Utilise des courbes elliptiques pour offrir une sécurité comparable avec des tailles de clé plus petites. EC est généralement recommandé pour des raisons de performance et d’efficacité.

  • SAN (Subject Alternative Name) : Champ utilisé pour ajouter des noms alternatifs au certificat, permettant d’inclure des sous-domaines ou des domaines multiples. Par exemple, un certificat pour example.com peut avoir des SANs pour www.example.com et api.example.com.

Utilisation

Syntaxe de la commande

easy_certif.sh [options]

Options

  • -h, --help : Affiche l’aide du script avec les options disponibles.

  • -d, --domain DOMAIN : Domaine pour le certificat (ex. : example.com).

  • -s, --server_name NAME : Nom court du serveur (ex. : www pour www.example.com).

  • -c, --city CITY : Ville pour le certificat, doit être parmi les valeurs prédéfinies (ex. : Paris).

  • -l, --location LOC : Région, doit être une valeur prédéfinie (ex. : Ile-de-France).

  • -O, --organisation ORG : Nom de l’organisation (ex. : “Entreprise ABC”).

  • -u, --ou UNIT : Unité organisationnelle (défaut : DSI).

  • -C, --country CODE : Code pays ISO (défaut : FR).

  • -o, --output_dir DIR : Répertoire de sortie pour les fichiers générés (défaut : .).

  • -a, --alternate_name AN : Noms alternatifs pour le certificat, utiles pour inclure des sous-domaines.

  • --cipher CIPHER : Algorithme de chiffrement, rsa ou ec (défaut : rsa).

  • --keysize SIZE : Taille de la clé pour RSA (≥ 512, par défaut : 4096).

  • --digest DIGEST : Algorithme de hachage (ex. : sha256, par défaut).

  • --curve CURVE : Courbe elliptique pour EC (ex. : prime256v1).

Exemples d’exécution

  1. CSR pour un domaine spécifique avec RSA et nom alternatif :

    easy_certif.sh -d example.com -s www -c Paris -l Ile-de-France -O "Mon Organisation" --cipher rsa --keysize 2048 --digest sha512 -a www.example.net
    

    Cet exemple génère un CSR avec RSA en spécifiant un domaine principal et un nom alternatif (SAN) pour un sous-domaine.

  2. CSR avec courbe elliptique (EC) et SHA-256 :

    easy_certif.sh -d example.com -s www -c Paris -l Ile-de-France -O "Mon Organisation" --cipher ec --curve prime256v1 --digest sha256
    

    Ici, nous utilisons une courbe elliptique (prime256v1) pour renforcer la sécurité tout en maintenant des performances élevées.

  3. CSR avec plusieurs noms alternatifs et sortie dans un dossier spécifique :

    easy_certif.sh -d example.com -s www -c Paris -l Ile-de-France -O "Mon Organisation" -o /etc/ssl/certs --cipher rsa --keysize 2048 --digest sha384 -a www.example.com -a api.example.com
    

    Ce CSR inclut plusieurs noms alternatifs pour les sous-domaines, et les fichiers sont enregistrés dans /etc/ssl/certs.

Recommandations

  1. Choisir RSA ou EC en fonction des besoins : - Utilisez RSA si votre infrastructure ne supporte pas encore pleinement les certificats EC. RSA est compatible avec la majorité des systèmes, même anciens. - Privilégiez EC (Elliptic Curve) si la compatibilité avec les clients est garantie. Les certificats EC sont plus rapides à générer, plus efficaces et offrent un niveau de sécurité équivalent à RSA avec des tailles de clé plus petites.

  2. Utiliser SAN pour les sous-domaines : Si le serveur doit répondre à plusieurs sous-domaines (par exemple, api.example.com et www.example.com), le champ Subject Alternative Name (SAN) est essentiel. Inclure des noms alternatifs garantit que le certificat est reconnu comme valide pour tous les domaines listés.

  3. Adopter un algorithme de hachage sécurisé : Choisissez SHA-256 ou supérieur pour assurer un haut niveau de sécurité. Les versions plus anciennes, comme SHA-1, sont déconseillées car elles sont considérées comme vulnérables.

Fonctionnement du script

Validation des valeurs

Le script vérifie les valeurs des options CITY et LOCATION pour garantir leur conformité. Si une valeur incorrecte est saisie, le script invite l’utilisateur à entrer une valeur correcte avant de continuer. Ces validations aident à éviter les erreurs de configuration.

Génération des fichiers CSR et clé

Le script utilise la commande OpenSSL pour générer les fichiers .csr et .key en fonction des options sélectionnées :

  • RSA : Génère une clé RSA avec la taille spécifiée (par défaut 4096 bits).

  • EC : Utilise une courbe elliptique (si spécifiée) pour créer une clé EC, sans spécifier la taille de clé (les courbes EC fixent la taille automatiquement).

Structure de fichier CSR

Le contenu du CSR est organisé avec les champs suivants :

  • C : Code pays ISO (par défaut : FR).

  • ST : Région ou localisation.

  • L : Ville.

  • O : Organisation.

  • OU : Unité organisationnelle (défaut : DSI).

  • CN : Nom de domaine (nom complet).

  • SAN (Subject Alternative Name) : Champ optionnel pour inclure des sous-domaines ou des domaines associés.

Journalisation

Le script consigne chaque étape importante de la génération des fichiers avec un timestamp. Cela permet de suivre les erreurs ou les succès des opérations dans le journal système. Si un problème est détecté (comme un fichier manquant), le script enregistre un message d’erreur détaillé.

Notes

  • Valeurs par défaut : Certains champs, comme le pays (FR) ou l’unité organisationnelle (DSI), sont initialisés avec des valeurs par défaut. Modifiez-les selon vos besoins en utilisant les options correspondantes.

  • Compatibilité : Le script fonctionne sur les distributions Linux avec la commande openssl installée.

  • Précautions : Testez toujours les options avant de générer des certificats pour un environnement de production, notamment les valeurs des champs, afin de vous assurer que toutes les informations sont exactes.

Ce guide assure une utilisation appropriée et sécurisée du script pour la génération de certificats SSL/TLS adaptés aux standards actuels de sécurité.