Table des matières

Comment se servir d'OpenSSL?

OpenSSL est véritablement le couteau suisse de la gestion de certificats, mais à l'instar du canif suisse, on passe un temps fou à essayer de distinguer la lime à ongles du tire-bouchon. Vous trouverez ci-dessous une liste des commandes les plus fréquemment utilisées.

Les principaux formats

Tout d’abord nous allons aborder les formats les plus utilisés dans le monde des certificats, c’est à dire :

PEM Format

Le format le plus commun, il est utilisé dans la plupart des cas. Les certificats PEM sont en B64 et les extensions sont généralement .crt, .cer, .pem, .key

Ce format la est lisible avec un éditeur et comporte les indications « —– BEGIN XXX —– » et « —– END XXX —– » et est valable pour les certificats et les clés privées.

DER Format

Le format DER est le format binaire des certificats. Tous les types de certificats et clés privées peuvent être convertis en DER. Les fichiers ne contiennent donc pas les indications « BEGIN » & « END » et les fichiers sont difficilement lisibles avec un éditeur comme vi par exemple. Ils sont principalement utilisés sur des plateformes Java.

Les extensions pour les fichiers sont généralement .cer, .der, .key

P7B / PKCS7

Le format P7B est également un format basé sur le B64 et possède généralement les extensions .p7b et .p7c

Ce format n’est possible que pour les parties publiques des certificats et les autorités. Il n’est donc pas possible de mettre une clé privée au format p7b. Ce format est utilisé principalement sur des solutions Microsoft et Java.

P12 / PFX

Le format p12/pfx quant à lui permet de stocker tous les éléments en même temps, c’est à dire les autorités, le certificat et la clé privée dans un fichier au format binaire chiffré.

Il est utilisé sur les environnements Microsoft et Java et utilise les extensions : .p12 et .pfx

Java Key Store

Les Java Key Store ou JKS fonctionne presque comme les fichiers p12 à la différence que dans ce dernier vous ne pouvez pas inclure les autorités ou CA. Il y a donc deux fichiers distants, le JKS contenant la clé privée et le certificat et le fichier cacert (truststore) contenant les différentes autorités.

L’extension utilisée pour le JKS est .jks et ce type de certificat ce manipule avec l’outil Keytool contrairement aux autres. Cependant, attention il n’est pas possible à ma connaissance d’extraire de clé privée d’un JKS, si vous en avez besoin pensez à stocker vos clés privées en lieu sûr.

Demandes de certificats et gestion de clés

Générer une demande de certificat (CSR) sans clé privée:

openssl req -sha256 -nodes -newkey rsa:2048 -keyout www.server.com.key -out www.server.com.csr

Générer une nouvelle demande de certificat à base d'une clé existante:

openssl req -new -sha256 -key www.server.com.key -out www.server.com.csr

Générer une demande de certificat à base d'un certificat existant:

openssl x509 -x509toreq -in www.server.com.crt -out www.server.com.csr -signkey www.server.com.key

Générer une nouvelle clé RSA:

openssl genrsa -out www.server.com.key 2048

Générer une nouvelle clé ECC:

openssl ecparam -out server.key -name prime256v1 -genkey

Générer un certificat auto-signé (self-signed) pour des tests:

openssl req -x509 -newkey rsa:2048 -nodes -keyout www.server.com.key -out www.server.com.crt -days 365

Afficher et contrôler les certificats

Contrôler et afficher une demande de certificat:

openssl req -noout -text -verify -in www.server.com.csr

Contrôler et afficher une clé privée et publique:

openssl rsa -noout -text -check -in www.server.com.key

Afficher le contenu décodé d'un certificat en format PEM:

openssl x509 -noout -text -in www.server.com.crt

Afficher le contenu d'un certificat en format PKCS#7:

openssl pkcs7 -print_certs -in www.server.com.p7b

Afficher le contenu d'un certificat et d'une clé en format PKCS#12:

openssl pkcs12 -info -in www.server.com.pfx

Contrôler une connection SSL et afficher tous les certificats intermédiaires:

openssl s_client -connect www.server.com:443

Contrôler si un certificat, une demande de certificat et une clé ont la même clé publique:

openssl x509 -noout -modulus www.server.com.crt | openssl sha256
openssl req -noout -modulus www.server.com.csr | openssl sha256
openssl rsa -noout -modulus www.server.com.key | openssl sha256

Convertir des certificats

Conversion d'un fichier PKCS#12 ( .pfx .p12, typiquement utulisé sur Microsoft Windows) contenant clé privée et certificat vers le format PEM (utilisé sur Linux):

openssl pkcs12 -nodes -in www.server.com.pfx -out www.server.com.crt

Conversion du format PEM vers le format PKCS#12:

openssl pkcs12 -export -in www.server.com.crt -inkey www.server.com.key -out www.server.com.pfx

Conversion du format PKCS#7 ( .p7b .p7c ) vers le format PEM:

openssl pkcs7 -print_certs -in www.server.com.p7b -out www.server.com.crt  

Conversion du format PEM vers le format PKCS#7:

openssl crl2pkcs7 -nocrl -certfile www.server.com.crt -out www.server.com.p7b

Conversion du format DER (.crt .cer ou .der) vers le format PEM:

openssl x509 -inform der -in certificate.cer -out certificate.pem

Annexe

https://www.openssl.org/