Introduction
OpenSSL est un outil polyvalent en ligne de commande qui peut être utilisé pour une grande variété de tâches liées à l’Infrastructure à Clé Publique (PKI) et au HTTPS (HTTP sur TLS). Ce guide de style feuille de triche fournit une référence rapide aux commandes OpenSSL utiles dans des scénarios courants et quotidiens. Cela inclut des exemples OpenSSL pour la génération de clés privées, les demandes de signature de certificat et la conversion de format de certificat. Il ne couvre pas toutes les utilisations d’OpenSSL.
Comment Utiliser ce Guide :
- Si vous n’êtes pas familier avec les demandes de signature de certificat (CSRs), lisez la première section
- À part la première section, ce guide est sous forme de feuille de triche : une liste de fragments de ligne de commande autonomes
- Accédez à n’importe quelle section qui est pertinente pour la tâche que vous essayez d’accomplir (Astuce : utilisez le Contenu menu ou la fonction Rechercher de votre navigateur)
- La plupart des commandes sont des lignes uniques qui ont été étendues sur plusieurs lignes (en utilisant le symbole
\
) pour plus de clarté
À Propos des Demandes de Signature de Certificat (CSRs)
Si vous souhaitez obtenir un certificat SSL auprès d’une autorité de certification commerciale (CA), vous devez générer une demande de signature de certificat (CSR). Une CSR se compose principalement de la clé publique d’une paire de clés et de quelques informations supplémentaires. Ces deux composants sont insérés dans le certificat lorsqu’il est signé.
Chaque fois que vous générez une CSR, vous serez invité à fournir des informations concernant le certificat. Ces informations sont connues sous le nom de Distinguished Name (DN). Un champ important dans le DN est le Nom commun (CN), qui devrait être le nom de domaine complet exact (FQDN) de l’hôte avec lequel vous avez l’intention d’utiliser le certificat. Il est également possible de passer outre les invites interactives lors de la création d’une CSR en transmettant les informations via la ligne de commande ou à partir d’un fichier.
Les autres éléments d’un DN fournissent des informations supplémentaires sur votre entreprise ou votre organisation. Si vous achetez un certificat SSL auprès d’une autorité de certification, il est souvent nécessaire que ces champs supplémentaires, tels que « Organisation », reflètent avec précision les détails de votre organisation.
Voici un exemple de ce à quoi ressemblera l’invite d’informations de CSR :
---
Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:Brooklyn
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company
Organizational Unit Name (eg, section) []:Technology Division
Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com
Email Address []:
Si vous souhaitez répondre de manière non interactive à l’invite d’informations de CSR, vous pouvez le faire en ajoutant l’option -subj
à toutes les commandes OpenSSL qui demandent des informations de CSR. Voici un exemple de l’option, en utilisant les mêmes informations affichées dans le bloc de code ci-dessus :
-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"
Maintenant que vous comprenez les CSR, n’hésitez pas à passer à la section de ce guide qui couvre vos besoins OpenSSL.
Génération de CSR
Cette section couvre les commandes OpenSSL liées à la génération de CSR (et de clés privées, si elles n’existent pas déjà). Les CSR peuvent être utilisés pour demander des certificats SSL à une autorité de certification.
Gardez à l’esprit que vous pouvez ajouter les informations CSR de manière non interactive avec l’option -subj
, mentionnée dans la section précédente.
Générer une clé privée et un CSR
Utilisez cette méthode si vous souhaitez utiliser HTTPS (HTTP sur TLS) pour sécuriser votre serveur web Apache HTTP ou Nginx, et si vous souhaitez utiliser une autorité de certification (CA) pour émettre le certificat SSL. Le CSR généré peut être envoyé à une CA pour demander l’émission d’un certificat SSL signé par la CA. Si votre CA prend en charge SHA-2, ajoutez l’option -sha256
pour signer le CSR avec SHA-2.
Cette commande crée une clé privée de 2048 bits (domain.key
) et un CSR (domain.csr
) à partir de zéro :
Répondez à la prompte d’informations CSR pour compléter le processus.
L’option -newkey rsa:2048
spécifie que la clé doit être de 2048 bits, générée en utilisant l’algorithme RSA. L’option -nodes
spécifie que la clé privée ne doit pas être chiffrée avec une phrase secrète. L’option -new
, qui n’est pas incluse ici mais implicite, indique qu’une CSR est en train d’être générée.
Générer une CSR à partir d’une clé privée existante
Utilisez cette méthode si vous avez déjà une clé privée que vous souhaitez utiliser pour demander un certificat à une autorité de certification.
Cette commande crée une nouvelle CSR (domain.csr
) basée sur une clé privée existante (domain.key
) :
Répondez aux informations de la CSR pour terminer le processus.
L’option -key
spécifie une clé privée existante (domain.key
) qui sera utilisée pour générer une nouvelle CSR. L’option -new
indique qu’une CSR est en train d’être générée.
Générer une CSR à partir d’un certificat et d’une clé privée existants
Utilisez cette méthode si vous souhaitez renouveler un certificat existant mais que vous ou votre AC n’avez pas le CSR original pour une raison quelconque. Cela vous évite essentiellement de devoir ressaisir les informations du CSR, car il extrait ces informations du certificat existant.
Cette commande crée un nouveau CSR (domain.csr
) basé sur un certificat existant (domain.crt
) et une clé privée (domain.key
):
L’option -x509toreq
spécifie que vous utilisez un certificat X509 pour créer un CSR.
Génération de Certificats SSL
Si vous souhaitez utiliser un certificat SSL pour sécuriser un service mais que vous n’avez pas besoin d’un certificat signé par une AC, une solution valide (et gratuite) est de signer vos propres certificats.
A common type of certificate that you can issue yourself is a self-signed certificate. A self-signed certificate is a certificate that is signed with its own private key. Self-signed certificates can be used to encrypt data just as well as CA-signed certificates, but your users will be displayed a warning that says that the certificate is not trusted by their computer or browser. Therefore, self-signed certificates should only be used if you do not need to prove your service’s identity to its users (e.g. non-production or non-public servers).
Cette section couvre les commandes OpenSSL liées à la génération de certificats auto-signés.
Générer un Certificat Auto-Signé
Utilisez cette méthode si vous souhaitez utiliser HTTPS (HTTP sur TLS) pour sécuriser votre serveur web Apache HTTP ou Nginx, et que vous n’avez pas besoin que votre certificat soit signé par une AC.
Cette commande crée une clé privée de 2048 bits (domain.key
) et un certificat auto-signé (domain.crt
) à partir de zéro :
Répondez à la demande d’informations CSR pour finaliser le processus.
L’option -x509
indique à req
de créer un certificat auto-signé. L’option -days 365
spécifie que le certificat sera valide pendant 365 jours. Une CSR temporaire est générée pour recueillir des informations à associer au certificat.
Générer un certificat auto-signé à partir d’une clé privée existante
Utilisez cette méthode si vous avez déjà une clé privée avec laquelle vous souhaitez générer un certificat auto-signé.
Cette commande crée un certificat auto-signé (domain.crt
) à partir d’une clé privée existante (domain.key
) :
Répondez à la demande d’informations CSR pour finaliser le processus.
L’option -x509
indique à req
de créer un certificat auto-signé. L’option -days 365
spécifie que le certificat sera valide pendant 365 jours. L’option -new
permet d’activer la demande d’informations CSR.
Générer un certificat auto-signé à partir d’une clé privée et d’une CSR existantes
Utilisez cette méthode si vous avez déjà une clé privée et une CSR, et que vous souhaitez générer un certificat auto-signé avec elles.
Cette commande crée un certificat auto-signé (domain.crt
) à partir d’une clé privée existante (domain.key
) et d’une CSR (domain.csr
):
L’option -days 365
spécifie que le certificat sera valide pendant 365 jours.
Voir les certificats
Les fichiers de certificat et de CSR sont encodés au format PEM, qui n’est pas directement lisible par un être humain.
Cette section couvre les commandes OpenSSL qui afficheront les entrées réelles des fichiers encodés en PEM.
Voir les entrées CSR
Cette commande vous permet de visualiser et de vérifier le contenu d’une CSR (domain.csr
) en texte clair :
Afficher les Entrées de Certificat
Cette commande vous permet de voir le contenu d’un certificat (domain.crt
) en texte clair :
Vérifier qu’un Certificat a été Signé par une AC
Utilisez cette commande pour vérifier qu’un certificat (domain.crt
) a été signé par un certificat AC spécifique (ca.crt
) :
Clés Privées
Cette section couvre les commandes OpenSSL spécifiques à la création et à la vérification des clés privées.
Créer une Clé Privée
Utilisez cette commande pour créer une clé privée de 2048 bits protégée par mot de passe (domain.key
) :
Entrez un mot de passe lorsqu’on vous le demande pour terminer le processus.
Vérifier une clé privée
Utilisez cette commande pour vérifier qu’une clé privée (domaine.key
) est une clé valide :
Si votre clé privée est chiffrée, on vous demandera le mot de passe correspondant. En cas de succès, la clé non chiffrée sera affichée dans le terminal.
Vérifier qu’une clé privée correspond à un certificat et une CSR
Utilisez ces commandes pour vérifier si une clé privée (domaine.key
) correspond à un certificat (domaine.crt
) et une CSR (domaine.csr
) :
Si la sortie de chaque commande est identique, il y a une probabilité extrêmement élevée que la clé privée, le certificat et la CSR soient liés.
Chiffrer une clé privée
Ceci prend une clé privée non chiffrée (non_chiffrée.key
) et produit une version chiffrée de celle-ci (chiffrée.key
) :
Entrez le mot de passe désiré pour chiffrer la clé privée.
Décrypter une clé privée
Cela prend une clé privée chiffrée (encrypted.key
) et produit une version déchiffrée de celle-ci (decrypted.key
):
Entrez la phrase secrète pour la clé chiffrée lorsqu’elle est demandée.
Convertir les formats de certificat
Tous les certificats avec lesquels nous avons travaillé étaient des certificats X.509 codés en PEM ASCII. Il existe une variété d’autres types de codage et de conteneurs de certificats ; certaines applications préfèrent certains formats à d’autres. De plus, beaucoup de ces formats peuvent contenir plusieurs éléments, tels qu’une clé privée, un certificat et un certificat CA, dans un seul fichier.
OpenSSL peut être utilisé pour convertir des certificats vers et depuis une grande variété de ces formats. Cette section couvrira quelques-unes des conversions possibles.
Convertir PEM en DER
Utilisez cette commande si vous souhaitez convertir un certificat encodé en PEM (domain.crt
) en un certificat encodé en DER (domain.der
), un format binaire :
Le format DER est généralement utilisé avec Java.
Convertir DER en PEM
Utilisez cette commande si vous souhaitez convertir un certificat encodé en DER (domain.der
) en un certificat encodé en PEM (domain.crt
) :
Convertir PEM en PKCS7
Utilisez cette commande si vous souhaitez ajouter des certificats PEM (domain.crt
et ca-chain.crt
) à un fichier PKCS7 (domain.p7b
) :
Notez que vous pouvez utiliser une ou plusieurs options -certfile
pour spécifier quels certificats ajouter au fichier PKCS7.
Les fichiers PKCS7, également connus sous le nom de P7B, sont généralement utilisés dans les magasins de clés Java et Microsoft IIS (Windows). Ce sont des fichiers ASCII qui peuvent contenir des certificats et des certificats d’autorité de certification (CA).
Convertir PKCS7 en PEM
Utilisez cette commande si vous souhaitez convertir un fichier PKCS7 (domain.p7b
) en un fichier PEM :
Notez que si votre fichier PKCS7 contient plusieurs éléments (par exemple, un certificat et un certificat intermédiaire CA), le fichier PEM créé contiendra tous les éléments.
Convertir PEM en PKCS12
Utilisez cette commande si vous souhaitez prendre une clé privée (domain.key
) et un certificat (domain.crt
), et les combiner dans un fichier PKCS12 (domain.pfx
):
Vous serez invité à saisir des mots de passe d’exportation, que vous pouvez laisser vides. Notez que vous pouvez ajouter une chaîne de certificats au fichier PKCS12 en concaténant les certificats dans un seul fichier PEM (domain.crt
) dans ce cas.
Les fichiers PKCS12, également appelés fichiers PFX, sont généralement utilisés pour importer et exporter des chaînes de certificats dans Microsoft IIS (Windows).
Convertir PKCS12 en PEM
Utilisez cette commande si vous souhaitez convertir un fichier PKCS12 (domain.pfx
) et le convertir au format PEM (domain.combined.crt
):
openssl pkcs12 \
-in domain.pfx \
-nodes -out domain.combined.crt
Notez que si votre fichier PKCS12 contient plusieurs éléments (par exemple, un certificat et une clé privée), le fichier PEM créé contiendra tous les éléments.
Version d’OpenSSL
La commande openssl version
peut être utilisée pour vérifier la version que vous exécutez. La version d’OpenSSL que vous exécutez et les options avec lesquelles elle a été compilée affectent les fonctionnalités (et parfois les options de ligne de commande) qui vous sont disponibles.
La commande suivante affiche la version d’OpenSSL que vous exécutez et toutes les options avec lesquelles elle a été compilée :
openssl version -a
Ce guide a été rédigé en utilisant un binaire OpenSSL avec les détails suivants (la sortie de la commande précédente) :
OpenSSL 1.1.1 11 Sep 2018
built on: Mon Aug 23 17:02:39 2021 UTC
platform: debian-amd64
options: bn(64,64) rc4(16x,int) des(int) blowfish(ptr)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -Wa,--noexecstack -g -O2 -fdebug-prefix-map=/build/openssl-Flav1L/openssl-1.1.1=. -fstack-protector-strong -Wformat -Werror=format-security -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DNDEBUG -Wdate-time -D_FORTIFY_SOURCE=2
OPENSSLDIR: "/usr/lib/ssl"
ENGINESDIR: "/usr/lib/x86_64-linux-gnu/engines-1.1"
Seeding source: os-specific
Conclusion
Cela devrait couvrir la façon dont la plupart des gens utilisent OpenSSL pour travailler avec des certificats SSL. Il a de nombreuses autres utilisations qui n’ont pas été abordées ici, donc n’hésitez pas à poser des questions ou à suggérer d’autres utilisations dans les commentaires.
Si vous rencontrez des problèmes avec l’une des commandes, assurez-vous de commenter (et incluez la sortie de votre version OpenSSL).