Skip to content

OpenSSL

Génération de clés et CSR

Pour générer une clé privée (EC) et une demande de signature de certificat (CSR):

SERVICE_NAME=example.com
openssl ecparam -out ${SERVICE_NAME}.key -name prime256v1 -genkey && \
openssl req -new -key ${SERVICE_NAME}.key -out ${SERVICE_NAME}.csr -nodes -subj "/C=FR/CN=${SERVICE_NAME}"

Gestion des Certificats

Création d'un certificat auto-signé (Test)

Pour générer un certificat auto-signé valide 365 jours (utile pour les environnements de test) :

openssl x509 -req -in ${SERVICE_NAME}.csr -signkey ${SERVICE_NAME}.key -out ${SERVICE_NAME}.crt -days 365

Création d'une chaîne complète (Fullchain)

Certains serveurs ou navigateurs nécessitent la chaîne complète de certification. Pour la créer, concaténez votre certificat avec celui de l'autorité intermédiaire (CA) :

cat mon-site.crt intermediate.crt > mon-site-fullchain.crt

Vérification et Dépannage

Il est crucial de vérifier que votre certificat public correspond bien à votre clé privée avant de redémarrer un service.

Vérifier la correspondance Clé / Certificat

Les deux commandes suivantes doivent retourner exactement le même hash MD5.

openssl x509 -noout -modulus -in /etc/ssl/certs/mon-certificat.crt | openssl md5
openssl rsa -noout -modulus -in /etc/ssl/private/ma-cle.key | openssl md5

Warning

Pour une clé EC (Elliptic Curve), la commande rsa ne fonctionnera pas.

Vérifier les détails d'un certificat

Pour afficher les informations complètes (émetteur, dates, sujets) :

openssl x509 -in /etc/ssl/certs/mon-certificat.crt -text -noout

Vérifier une demande de signature (CSR)

openssl req -in ma-demande.csr -noout -text

Erreurs Fréquentes

Erreur "Not an RSA key"

Si vous obtenez unable to load Private Key ou Not an RSA key, cela signifie souvent que le format de la clé est incorrect (ex: format EC lu comme RSA) ou que le fichier est corrompu/vide.

Fichiers vides

Assurez-vous que vos fichiers .crt et .key ne sont pas vides (0 octets). Cela arrive parfois lors de mauvaises manipulations de redirection (>). Toujours vérifier avec :

ls -l /etc/ssl/private/