Les bases d’OpenSSL : générer les certificats SSL, les clés privées et les CSR

openssl ssl csr certificats SSL, les clés privées et les CSR ubuntu redhat debian centos

Utiliser OpenSSL pour générer des certificats SSL, des clés privées et des demandes de signature de certificat (CSR) est une compétence essentielle pour tout administrateur système ou professionnel de la sécurité. Ce guide détaillé vous apprendra à utiliser les commandes OpenSSL de base pour :

Étape 1 – Générer une clé privée

La première étape consiste à générer une clé privée, qui sera utilisée plus tard pour créer la CSR et la clé publique pour le certificat SSL.

Pour générer une clé privée RSA 2048 bits :

$ openssl genrsa -out private.key 2048

Cela va créer un fichier appelé ‘private.key’ qui contient la clé privée. Assurez-vous de protéger ce fichier et de ne pas le partager publiquement.

Quelques informations clés sur les clés privées :

  • La clé privée est utilisée pour signer numériquement la CSR et la clé publique plus tard.
  • La clé privée doit être gardée secrète et sécurisée. Si elle est compromise, tout certificat créé avec peut être utilisé par des attaquants.
  • Pour plus de sécurité, la taille de la clé doit être d’au moins 2048 bits. 4096 bits sont recommandés pour une sécurité renforcée.

Étape 2 – Créer une CSR (Certificate Signing Request)

Maintenant que nous avons une clé privée, nous pouvons générer une CSR ou demande de signature de certificat. Ceci est envoyé à l’autorité de certification (CA) pour demander un certificat de clé publique.

Pour générer une CSR :

$ openssl req -new -key private.key -out csr.pem

Cela vous invite à saisir des informations d’identification qui seront incluses dans la CSR comme le nom du pays, le nom de l’organisation, etc.

Quelques informations sur les CSR :

  • La CSR contient des informations sur votre entreprise et la clé publique.
  • La CSR est signée numériquement avec votre clé privée pour prouver que vous la possédez.
  • Le CA utilisera la CSR pour créer le certificat SSL.

Étape 3 – Générer un certificat auto-signé

Généralement, la CSR est envoyée à un CA de confiance comme Comodo, Digicert, etc. pour signer et générer le certificat SSL.

Pour des tests, nous pouvons créer un certificat auto-signé qui est signé par lui-même plutôt que par un CA.

Pour générer un certificat auto-signé :

$ openssl req -new -x509 -key private.key -out self-signed.crt -days 365

Cela crée un certificat auto-signé appelé ‘self-signed.crt’ valide pour 365 jours.

Quelques points sur les certificats auto-signés :

  • Ne doivent être utilisés que pour les tests, pas pour les sites de production.
  • Afficheront des avertissements de sécurité dans les navigateurs car non signés par un CA de confiance.
  • Ne fournit aucune garantie sur l’identité du site web.

Étape 4 – Générer une CSR et une clé privée en une seule commande

Aux étapes 1 et 2, nous avons généré la clé privée et la CSR séparément.

OpenSSL peut également les générer en une seule fois :

$ openssl req -newkey rsa:2048 -nodes -keyout private.key -out csr.pem 

Cela génère une clé privée RSA 2048 bits et une CSR en les enregistrant dans les fichiers private.key et csr.pem respectivement.

Le paramètre -nodes indique à OpenSSL de stocker la clé privée sans protection par mot de passe.

Étape 5 – Générer un certificat PKCS#12 (.pfx .p12)

Dans certains cas, vous devrez peut-être stocker le certificat SSL et la clé privée ensemble dans un fichier PKCS#12 ou .pfx.

Ce fichier .pfx peut être directement importé dans des services comme IIS sous Windows.

Pour générer un fichier .pfx :

$ openssl pkcs12 -export -out public_key.pfx -inkey private.key -in public.crt

Où :

  • public_key.pfx est le fichier .pfx de sortie
  • private.key est la clé privée associée
  • public.crt est le certificat SSL

Lors de l’exécution, OpenSSL vous invite à définir un mot de passe pour protéger le fichier .pfx.

Étape 6 – Vérifier une demande de signature de certificat (CSR)

Une fois que vous avez généré une CSR, il est recommandé de la vérifier avant de la soumettre au CA.

Pour vérifier une CSR :

$ openssl req -text -noout -verify -in csr.pem

Cela analyse la CSR, imprime ses détails au format texte et vérifie :

  • Qu’il s’agit d’une CSR correctement formatée
  • Qu’elle a été signée numériquement avec la clé privée associée.

Cela permet de détecter toute erreur dans la génération de la CSR avant de l’envoyer à un CA.

Étape 7 – Vérifier un certificat SSL

Une fois que vous avez obtenu un certificat SSL d’un CA, vous devez toujours le vérifier avant de l’installer sur un serveur.

Pour vérifier un certificat :

$ openssl x509 -in public.crt -text -noout

Cela imprimera tous les détails du certificat en texte et vous pourrez vérifier :

  • Émis à – Le nom courant correspond à votre domaine
  • Émis par – CA réputé comme Comodo, Digicert, etc.
  • Valide du et Date d’expiration – Le certificat est actuellement valide
  • Signature/Empreinte – La signature utilise un hachage sécurisé comme SHA-256

La vérification de ces détails est importante pour s’assurer que vous avez un certificat valide d’un CA de confiance.

Étape 8 – Vérifier la correspondance entre une demande de signature de certificat (CSR) et une clé privée

Lors de la soumission d’une CSR à un CA, vous n’envoyez que la CSR elle-même et gardez la clé privée privée.

Mais comment pouvez-vous vérifier que la CSR et la clé privée correspondent lorsque vous récupérez le certificat signé ?

OpenSSL fournit un moyen de vérifier cela :

$ openssl rsa -noout -modulus -in private.key | openssl md5  
$ openssl x509 -noout -modulus -in public.crt | openssl md5

Cela génère une empreinte MD5 du module à la fois de la clé privée et du certificat. Si les empreintes correspondent, cela prouve que la CSR et le certificat correspondent à la même clé privée.

Effectuez toujours cette vérification avant d’installer le certificat SSL pour une meilleure sécurité.

Étape 9 – Vérifier qu’un certificat SSL est approuvé

Après avoir installé un certificat SSL, vous devez valider qu’il est approuvé par les principaux navigateurs et systèmes d’exploitation.

Cela peut être fait à l’aide du test SSL de SSL Labs :

https://www.ssllabs.com/ssltest/analyze.html

Soumettez votre domaine et il analysera le certificat SSL, vérifiera les chemins de confiance et fournira une note de A à F sur son niveau de confiance.

Le certificat doit être indiqué comme approuvé sur tous les principaux navigateurs comme IE, Chrome, Firefox etc.

Étape 10 – Révoquer un certificat SSL

Si votre clé privée est compromise, ou si vous devez révoquer un certificat pour quelque raison que ce soit, cela se fait en contactant le CA émetteur.

Le CA aura un processus de révocation de certificat qui vous permettra de demander la révocation du certificat.

Une fois révoqué, les clients ne pourront pas valider le certificat et verront des avertissements s’il est toujours utilisé sur un site web.

  • Les navigateurs comme Chrome et Firefox vérifient l’état de révocation des certificats avant de les approuver.
  • Assurez-vous de remplacer le certificat révoqué par un nouveau pour éviter tout impact sur votre site web.

Étape 11 – Générer une CSR pour un certificat SSL générique

Un certificat SSL générique sécurise un nombre illimité de sous-domaines sur un seul certificat.

Par exemple, *.example.com sécurisera www.example.com, mail.example.com, etc.

Pour générer une CSR générique :

$ openssl req -newkey rsa:2048 -nodes -keyout private.key -out csr.pem -subj "/CN=*.example.com"

La partie clé est de spécifier CN=*.example.com dans le sujet pour demander un domaine générique.

Quelques faits clés sur les certificats génériques :

  • Prend en charge un nombre illimité de sous-domaines sur un seul certificat.
  • Plus cher que des certificats individuels mais rentable pour gérer de multiples sous-domaines.
  • Comodo et Digicert ont de bonnes options génériques approuvées par tous les navigateurs.

Étape 12 – Créer un certificat multi-domaine (SAN)

Les certificats multi-domaine ou SAN sécurisent plusieurs domaines sur un seul certificat.

Par exemple, un certificat SAN peut sécuriser example.com et www.example.com ensemble.

Pour générer une CSR SAN :

$ openssl req -newkey rsa:2048 -nodes -keyout private.key -out csr.pem -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.cnf <(printf "[SAN]\nsubjectAltName=DNS:example.com,DNS:www.example.com"))

Cela utilise le fichier de configuration OpenSSL pour spécifier les détails SAN.

Quelques faits clés sur les certificats SAN :

  • Peut sécuriser jusqu’à 100 domaines sur un seul certificat.
  • Plus flexible que les génériques pour sécuriser plusieurs domaines spécifiques.
  • Pris en charge sur tous les principaux navigateurs et plateformes.
  • Rentable pour gérer plusieurs domaines.

Étape 13 – Créer des certificats auto-signés pour les systèmes internes

Les certificats auto-signés peuvent être utiles pour sécuriser les communications internes entre serveurs, systèmes et services au sein d’une organisation.

Par exemple, sécuriser le trafic entre un équilibreur de charge et des serveurs web ; ou entre des microservices internes.

Voici comment générer un certificat auto-signé pour un usage interne :

$ openssl req -newkey rsa:2048 -nodes -keyout private.key -x509 -days 365 -out self-signed.crt

Et quelques points clés sur l’utilisation de certificats auto-signés en interne :

  • Ne doit être utilisé qu’au sein de réseaux internes, pas pour le trafic internet public.
  • Fournit un chiffrement et une sécurité sans nécessiter de CA externes.
  • Beaucoup plus rentable que les certificats commerciaux pour un grand nombre de serveurs internes.
  • Peut être généré de manière programmatique et faire l’objet d’une rotation automatique selon les besoins.

Étape 14 – Utiliser OpenSSL pour tester les connexions SSL

OpenSSL peut tester les connexions SSL pour vérifier les certificats valides, les versions de protocole acceptées, les chiffrements pris en charge, etc.

Pour tester la connectivité SSL de base à un serveur :

$ openssl s_client -connect example.com:443

Cela effectuera une handshake TLS avec le serveur et affichera des détails comme :

  • Détails du certificat
  • Version SSL/TLS du protocole
  • Chiffrements pris en charge
  • Informations de session

s_client est utile pour le débogage des problèmes SSL liés à un serveur ou une application.

Étape 15 – Utiliser OpenSSL pour évaluer les performances du chiffrement SSL

OpenSSL comprend un outil de benchmarking pour tester la vitesse de chiffrement des algorithmes comme AES, SHA256, etc.

Commande de benchmark de base :

$ openssl speed

Cela teste les algorithmes par défaut. Pour en tester certains spécifiques :

$ openssl speed -evp aes-128-cbc aes-256-cbc

Exemple de sortie :

aes-128-cbc     14768.94k   14678.37k   14672.28k
aes-256-cbc     10528.08k   10506.25k   10475.97k
  • Utile pour comparer les performances matérielles pour le chiffrement SSL.
  • Aide à déterminer les chiffrements les plus optimaux à prendre en charge.
  • Assurez-vous de tester sur le matériel de production pour des benchmarks précis.

Conclusion

Cela couvre les notions essentielles de base pour utiliser OpenSSL avec des certificats et clés SSL.

Les points clés à retenir sont :

  • Utiliser les commandes genrsa et req pour générer des clés privées et des CSR.
  • Comprendre les différents types de certificats comme l’auto-signé vs signé par une CA.
  • Valider les certificats avant installation sur les serveurs de production.
  • Utiliser des outils comme s_client et speed pour le débogage et le benchmarking.

OpenSSL est une boîte à outils puissante que chaque professionnel de la sécurité doit savoir utiliser. Maîtriser ces bases et vous serez prêt à implémenter SSL de manière sécurisée dans votre infrastructure.

Laisser un commentaire