Créer, gérer et convertir des certificats SSL avec OpenSSL

OpenSSL est l’une des commandes les plus populaires pour créer, convertir et gérer les certificats SSL.

Dans de nombreuses situations, vous aurez à faire face à OpenSSL de différentes manières, et je les ai listées pour vous sous la forme d’un aide-mémoire pratique.

Dans cet article, je parlerai des commandes OpenSSL fréquemment utilisées pour vous aider dans le monde réel.

Quelques-unes des abréviations liées aux certificats.

  • SSL – Secure Socket Layer (couche de sockets sécurisés)
  • CSR – Certificate Signing Request (demande de signature de certificat)
  • TLS – Transport Layer Security (sécurité de la couche transport)
  • PEM – Privacy Enhanced Mail (courrier électronique renforcé)
  • DER – Distinguished Encoding Rules (règles de codage différenciées)
  • SHA – Algorithme de hachage sécurisé
  • PKCS – Normes de cryptographie à clé publique

Remarque: un cours sur le fonctionnement de SSL/TLS serait utile si vous n’êtes pas familiarisé avec ces termes.

Créer une nouvelle clé privée et une demande de signature de certificat

openssl req -out geekflare.csr -newkey rsa:2048 -nodes -keyout geekflare.key

La commande ci-dessus génère un CSR et un fichier de clé RSA de 2048 bits. Si vous avez l’intention d’utiliser ce certificat dans Apache ou Nginx, vous devez envoyer ce fichier CSR à l’autorité émettrice du certificat, qui vous fournira un certificat signé, principalement au format der ou pem, que vous devrez configurer dans le serveur web Apache ou Nginx.

Créer un certificat auto-signé

openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem

La commande ci-dessus génère un certificat auto-signé et un fichier de clés avec RSA 2048 bits. J’ai également inclus sha256 car il est considéré comme le plus sûr à l’heure actuelle.

Astuce : par défaut, le certificat auto-signé généré n’est valide que pour un mois, vous pouvez donc envisager de définir le paramètre -days pour étendre la validité.

Ex : pour que le certificat auto-signé soit valide pendant deux ans.

openssl req -x509 -sha256 -nodes -days 730 -newkey rsa:2048 -keyout gfselfsigned.key -out gfcert.pem

Vérifiez le fichier CSR

openssl req -noout -text -in geekflare.csr

La vérification est essentielle pour s’assurer que vous envoyez la CSR à l’autorité émettrice avec les détails requis.

Créer une clé privée RSA

openssl genrsa -out private.key 2048

Si vous avez simplement besoin de générer une clé privée RSA, vous pouvez utiliser la commande ci-dessus. J’ai inclus 2048 pour un cryptage plus fort.

Supprimer la phrase de passe de la clé

openssl rsa -in certkey.key -out nopassphrase.key

Si vous utilisez une phrase de passe dans le fichier clé et que vous utilisez Apache, vous devez entrer le mot de passe à chaque démarrage. Si vous êtes ennuyé par la saisie d’un mot de passe, vous pouvez utiliser openssl rsa -in geekflare.key -check pour supprimer la phrase de passe d’une clé existante.

Vérifier la clé privée

openssl rsa -in certkey.key -check (en anglais)

Si vous avez des doutes sur votre fichier de clés, vous pouvez utiliser la commande ci-dessus pour vérifier.

Vérifier le fichier de certificat

openssl x509 -in certfile.pem -text -noout

Si vous souhaitez valider les données du certificat comme CN, OU, etc., vous pouvez utiliser la commande ci-dessus qui vous donnera les détails du certificat.

Vérifiez l’autorité signataire du certificat

openssl x509 -in certfile.pem -noout -issuer -issuer_hash

L’autorité émettrice des certificats signe chaque certificat et, au cas où, vous devez les vérifier.

Vérifier la valeur de hachage d’un certificat

openssl x509 -noout -hash -in bestflare.pem

Convertir le format DER en format PEM

openssl x509 -inform der -in sslcert.der -out sslcert.pem

Habituellement, l’autorité de certification vous donnera des certificats SSL au format .der, et si vous avez besoin de les utiliser au format apache ou .pem, la commande ci-dessus vous aidera.

Convertir PEM au format DER

openssl x509 -outform der -in sslcert.pem -out sslcert.der

Si vous avez besoin de changer le format .pem en .der

Convertissez le certificat et la clé privée au format PKCS#12

openssl pkcs12 -export -out sslcert.pfx -inkey key.pem -in sslcert.pem

Si vous avez besoin d’utiliser un certificat avec l’application Java ou avec toute autre application qui n’accepte que le format PKCS#12, vous pouvez utiliser la commande ci-dessus, qui générera un seul fichier pfx contenant le certificat et la clé.

Astuce : vous pouvez également inclure une chaîne de certificats en passant -chain comme ci-dessous.

openssl pkcs12 -export -out sslcert.pfx -inkey key.pem -in sslcert.pem -chain cacert.pem

Créez une CSR à l’aide d’une clé privée existante

openssl req -out certificate.csr -key existing.key -new

Si vous ne souhaitez pas créer une nouvelle clé privée au lieu d’utiliser une clé existante, vous pouvez utiliser la commande ci-dessus.

Vérifier le contenu d’un certificat au format PKCS12

openssl pkcs12 -info -nodes -in cert.p12

Le format PKCS12 est un format binaire, vous ne pourrez donc pas en visualiser le contenu dans le bloc-notes ou un autre éditeur. La commande ci-dessus vous aidera à voir le contenu du fichier PKCS12.

Convertir le format PKCS12 en certificat PEM

openssl pkcs12 -in cert.p12 -out cert.pem

Si vous souhaitez utiliser le format pkcs12 existant avec Apache ou simplement au format pem, cette commande sera utile.

Tester le certificat SSL d’une URL particulière

openssl s_client -connect yoururl.com:443 -showcerts

Je l’utilise assez souvent pour valider le certificat SSL d’une URL particulière à partir du serveur. C’est très pratique pour valider le protocole, le cryptage et les détails du certificat.

Découvrez la version d’OpenSSL

version d'openssl

Si vous êtes responsable de la sécurité d’OpenSSL, l’une des premières choses à faire est probablement de vérifier la version.

Vérifier la date d’expiration d’un certificat de fichier PEM

openssl x509 -noout -in certificate.pem -dates

Utile si vous envisagez de mettre en place une surveillance pour vérifier la validité. Il vous indiquera une date dans la syntaxe notBefore et notAfter. notAfter est une date que vous devrez vérifier pour confirmer si un certificat est expiré ou toujours valide.

Ex :

[root@Chandan opt]# openssl x509 -noout -in bestflare.pem -dates
notBefore=Jul 4 14:02:45 2015 GMT
notAfter=Aug 4 09:46:42 2015 GMT
[root@Chandan opt]#

Vérifier la date d’expiration du certificat de l’URL SSL

openssl s_client -connect secureurl.com:443 2>/dev/null | openssl x509 -noout -enddate

Cette option est également utile si vous souhaitez contrôler la date d’expiration d’un certificat SSL à distance ou d’une URL particulière.

Ex :

[root@Chandan opt]# openssl s_client -connect google.com:443 2>/dev/null | openssl x509 -noout -enddate

notAfter=Dec 8 00:00:00 2015 GMT

Vérifiez si SSL V2 ou V3 est accepté sur l’URL

Pour vérifier SSL V2

openssl s_client -connect secureurl.com:443 -ssl2

Pour vérifier SSL V3

openssl s_client -connect secureurl.com:443 -ssl3

Pour vérifier TLS 1.0

openssl s_client -connect secureurl.com:443 -tls1

Pour vérifier TLS 1.1

openssl s_client -connect secureurl.com:443 -tls1_1

Pour vérifier TLS 1.2

openssl s_client -connect secureurl.com:443 -tls1_2

Si vous sécurisez un serveur web et que vous avez besoin de vérifier si SSL V2/V3 est activé ou non, vous pouvez utiliser la commande ci-dessus. S’il est activé, vous obtiendrez “CONNECTED“, sinon vous obtiendrez “handshake failure

Vérifier si le chiffrement particulier est accepté sur l’URL

openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect secureurl:443

Si vous travaillez sur des résultats de sécurité et que les résultats des tests d’intrusion montrent que certains algorithmes de chiffrement faibles sont acceptés, vous pouvez utiliser la commande ci-dessus pour les valider.

Bien entendu, vous devrez modifier le code et l’URL que vous souhaitez tester. Si le code mentionné est accepté, vous obtiendrez “CONNECTED“, sinon vous obtiendrez “handshake failure

J’espère que les commandes ci-dessus vous aideront à en savoir plus sur OpenSSL afin de gérer les certificats SSL pour votre site web.