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.
Tout d’abord nous allons aborder les formats les plus utilisés dans le monde des certificats, c’est à dire :
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.
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
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.
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
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.
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
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
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