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.