OpenSSL sur Windows 10 : un guide complet en PowerShell

Générer des certificats SSL peut être une tâche intimidante, remplie de frustration et de tristesse. Mais cela ne doit pas être ainsi ! Si vous disposez de Windows 10 et d’OpenSSL, ainsi qu’un peu d’aide de ce tutoriel, vous serez bien parti.

Dans cet article, vous allez apprendre comment installer OpenSSL sur Windows 10. Une fois installé, vous allez générer des certificats SSL, résoudre les problèmes et déboguer les certificats, et convertir entre les différents formats.

Commençons par maîtriser OpenSSL sur Windows 10 avec PowerShell !

Articles liés : Gestion des certificats avec Windows Certificate Manager et PowerShell

Prérequis

Dans cet article, vous allez apprendre en pratiquant. Bien que OpenSSL soit historiquement un utilitaire pour le système d’exploitation Linux, vous pouvez également l’utiliser avec Windows.

Toutes les captures d’écran de ce guide ont été réalisées avec Windows 10 version 1909 et PowerShell 7.

Installation d’OpenSSL sur Windows 10 avec PowerShell et Chocolatey

En supposant que vous ayez installé Chocolatey en suivant les instructions d’installation, votre première tâche consiste à installer OpenSSL sur Windows 10. Pour cela, ouvrez votre console PowerShell et exécutez la commande choco install OpenSSL.Light comme indiqué ci-dessous.

Installing OpenSSL.Light using Chocolatey package manager in PowerShell

C’est tout ! Vous avez maintenant installé OpenSSL avec PowerShell.

Configurer un répertoire de travail

Ce tutoriel va créer quelques certificats pour apprendre. Pour vous assurer que tout le travail que vous effectuez ici est confiné à un seul dossier que vous pourrez nettoyer ultérieurement, créez-en un.

Ce tutoriel stockera tous les certificats et fichiers associés dans le dossier C:\certs. Vous pouvez créer un dossier avec PowerShell en exécutant la commande ci-dessous.

New-Item -ItemType Directory -Path C:\certs

Il est maintenant temps de configurer OpenSSL.

Configuration d’OpenSSL

Par défaut, OpenSSL sur Windows 10 ne dispose pas d’un fichier de configuration. Cela est intentionnel car il existe de nombreuses options de configuration que vous pouvez personnaliser. Dans le cadre de ce guide, vous allez utiliser une configuration d’exemple que vous pourrez personnaliser ultérieurement en fonction de vos besoins en matière de sécurité.

Ouvrez PowerShell et exécutez la commande ci-dessous. Cette commande télécharge un fichier de configuration d’exemple depuis le MIT et l’enregistre sous le nom de openssl.cnf dans le répertoire de travail actuel.

Invoke-WebRequest 'http://web.mit.edu/crypto/openssl.cnf' -OutFile .\openssl.cnf

Vous pouvez maintenant ouvrir le fichier openssl.cnf et vous devriez voir quelque chose qui ressemble à ce qui suit.

Sample OpenSSL configuration file

La configuration téléchargée fonctionnera telle quelle pour le moment. Ne pas utiliser les paramètres par défaut dans un environnement de production !

Mettre à jour les variables d’environnement du profil PowerShell

Pour que tout se passe bien, vous devriez modifier votre profil PowerShell sur Windows 10. La configuration de certaines variables d’environnement vous permet de passer facilement entre différentes versions d’OpenSSL que vous pourriez avoir installées.

I suggest adding two environment variables to your PowerShell profile called path and OPENSSL_CONF. You will update the PATH environment variable to ensure you can run the openssl binary in any location while on the command line.

Ci-dessous, vous verrez comment créer un profil PowerShell si vous n’en avez pas déjà un. Cette commande ajoute le chemin binaire d’OpenSSL à votre PATH et attribue le chemin du fichier de configuration à OPENSSL_CONF.

# Ajouter des variables d'environnement au profil PowerShell
# Vérifier si un profil existe, sinon en créer un !
if (-not (Test-Path $profile) ) {
    New-Item -Path $profile -ItemType File -Force
}

# Modifier le profil pour ajouter ces lignes
'$env:path = "$env:path;C:\Program Files\OpenSSL\bin"' | Out-File $profile -Append
'$env:OPENSSL_CONF = "C:\certs\openssl.cnf"' | Out-File $profile -Append

Pour utiliser les variables d’environnement, rechargez votre profil en tapant . $profile ou fermez simplement et rouvrez PowerShell.

Maintenant, vous pouvez facilement invoquer le binaire openssl où que vous soyez dans PowerShell, comme indiqué ci-dessous.

Verifying OpenSSL version in PowerShell

Utiliser OpenSSL sur Windows 10 pour générer un CSR & une clé privée

Avant de pouvoir créer un certificat SSL, vous devez générer une demande de signature de certificat (CSR). Un CSR est un fichier encodé qui vous permet de partager votre clé publique avec une autorité de certification (CA). Ce fichier contient des informations d’identification, un algorithme de signature et une signature numérique. Créons votre premier CSR et votre clé privée.

Lié : Votre guide des certificats X509 pour les mortels

Pour créer un CSR, exécutez la commande ci-dessous. OpenSSL vous demandera ensuite d’entrer certaines informations d’identification, comme vous pouvez le voir dans la démonstration suivante.

openssl req -new -out MyFirst.csr
Generating a CSR and Private Key using OpenSSL in PowerShell

Une fois terminé, vous disposerez d’un CSR valide et d’une clé privée qui peuvent être utilisés pour vous délivrer un certificat SSL.

Les paramètres par défaut du fichier de configuration peuvent être modifiés pour simplifier davantage ce processus si vous ne souhaitez pas saisir des données à chaque génération d’un CSR.

Vous pouvez en savoir plus sur les options CSR disponibles et consulter des configurations d’exemple dans les pages du manuel. OpenSSL dispose également d’un dépôt GitHub actif avec des exemples.

Génération de paires de clés RSA

Vous pouvez également créer des paires de clés RSA (publique/privée) avec OpenSSL. Pour ce faire, créez d’abord une clé privée à l’aide de la sous-commande genrsa comme indiqué ci-dessous.

Lorsque vous exécutez la commande ci-dessous, OpenSSL sur Windows 10 générera une clé privée RSA d’une longueur de 2048 bits. Cette clé est générée presque immédiatement sur un matériel moderne. La clé résultante est sortie dans le répertoire de travail

# générer une clé privée avec une taille maximale de 2048
# les tailles de clé peuvent être 512, 758, 1024, 1536 ou 2048.
openssl genrsa -out rsa.private 2048

Ensuite, générer une clé publique en utilisant la clé privée que vous venez de créer en utilisant la sous-commande rsa. La syntaxe ci-dessous créera une clé publique appelée rsa.public dans le répertoire de travail à partir de la clé privée rsa.private.

# générer une clé publique en utilisant la clé privée
openssl rsa -in rsa.private -out rsa.public -pubout -outform PEM

Génération d’un certificat auto-signé

Il peut arriver que vous ayez besoin de générer un certificat auto-signé. Les certificats auto-signés sont utilisables en laboratoire mais ne sont pas une pratique sécurisée à utiliser dans un environnement de production.

Créons maintenant un certificat auto-signé avant de passer à la tâche suivante. Pour ce faire, saisissez la commande ci-dessous pour créer un certificat SSL X509. Ce certificat utilisera la cryptographie SHA256 et sera valide pendant 365 jours en utilisant une clé RSA de 2048 bits. Le certificat sera enregistré dans le répertoire de travail.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

Vous êtes maintenant prêt à importer le certificat dans un navigateur ou un serveur.

Validation des CSR, des certificats et des clés avec OpenSSL

Vérifier les informations dans un CSR, une clé privée, un certificat ou un PKCS#12 peut vous faire gagner du temps lors du dépannage des erreurs SSL. Parfois, une clé incorrecte peut avoir été utilisée pour créer un certificat, par exemple. Il se peut que les informations d’identification figurant dans le certificat soient incorrectes.

Commençons par vérifier un CSR à l’aide de la commande req et de certains paramètres :

openssl req -text -noout -verify -in .\MyFirst.csr
Checking a CSR with OpenSSL in PowerShell

Les détails tels que le nom du pays, le nom de l’organisation et l’adresse e-mail que vous avez entrés lors de la création du CSR doivent correspondre précisément.

Vous pouvez également vérifier un certificat à l’aide de la sous-commande x509 avec quelques paramètres :

openssl x509 -in .\certificate.crt -text -noout | more
Checking a certificate with OpenSSL with the x509 command in PowerShell

Conversion de certificats avec OpenSSL

Il arrive parfois qu’une application n’utilise pas un format de certificat particulier. Vous pouvez rencontrer ce problème avec une application appelée HAproxy, par exemple, qui nécessite un certificat PEM alors que vous avez un certificat au format DER (.crt .cer .der).

Pour illustrer la conversion d’un certificat, convertissons le certificat auto-signé créé précédemment au format DER (certificate.crt) en format PEM. Utilisez le code suivant pour le faire.

Cette commande utilise la sous-commande x509 avec le paramètre -inform qui doit correspondre au format du fichier -in, suivi du format -out.

openssl x509 -inform der -in .\certificate.crt -out .\certificate.pem

Vous pouvez également inverser l’ordre si vous souhaitez convertir du format PEM au format DER, comme indiqué ci-dessous.

openssl x509 -outform der -in .\certificate.pem -out .\certificate.der

Et enfin, vous pouvez convertir PKCS#12 en PEM et PEM en PKCS#12. Il s’agit d’un type de fichier qui contient des clés privées et des certificats. Pour convertir au format PEM, utilisez la sous-commande pkcs12.

openssl pkcs12 -in .\SomeKeyStore.pfx -out .\SomeKeyStore.pem -nodes

Vous pouvez également convertir un certificat PEM et une clé privée au format PKCS#12 en utilisant -export avec quelques options supplémentaires. Ci-dessous, vous exportez un certificat au format PKCS#12 en utilisant votre clé privée et en utilisant SomeCertificate.crt comme source d’entrée. En utilisant la valeur d’option -certfile MyCACert.crt, vous pouvez valider SomeCertificate.crt.

openssl pkcs12 -export -out SomeCertificate.pfx -inkey SomePrivateKey.key -in SomeCertificate.crt -certfile MyCACert.crt

Dépannage et débogage

Maintenant que vous savez comment créer et convertir des CSR, des certificats et des paires de clés, il est temps d’apprendre à les dépanner et à les déboguer. OpenSSL propose des commandes qui facilitent le dépannage des problèmes.

OpenSSL vous permet également de vérifier l’intégrité des certificats et de tester les éventuelles corruptions de données. En utilisant un hash MD5, vous pouvez utiliser les exemples de code suivants pour tester les certificats, les clés et les CSR :

# Certificats
openssl x509 -noout -modulus -in .\certificate.crt | openssl md5

# Clés publiques / privées
openssl rsa -noout -modulus -in .\privateKey.key | openssl md5

# Requête de certificat de serveur
openssl req -noout -modulus -in .\MyFirst.csr | openssl md5

# Vérifier une connexion SSL externe
openssl s_client -connect www.google.com:443

Une fois que vous avez le hash original, vous pouvez le comparer avec un hash actuel pour vérifier que le certificat n’a pas été modifié ou corrompu.

Voici un exemple de ce à quoi ressemble ce code lorsqu’il est exécuté dans PowerShell :

Sample troubleshooting command output with OpenSSL in PowerShell

Résumé

Dans cet article, vous avez appris comment installer et configurer OpenSSL sur Windows 10, créer un CSR, une paire de clés et un certificat SSL. Vous avez également appris comment convertir entre différents formats de certificats et effectuer un dépannage de base à l’aide de sous-commandes intégrées.

Ressources supplémentaires

Source:
https://adamtheautomator.com/openssl-windows-10/