Tuto - Manipuler les certificats avec OpenSSL

Tuto - Manipuler les certificats avec OpenSSL

Tuto securite internet Tools Shell SSL How To OpenSSL certificats PKI

Le protocole SSL / TLS est devenu la base de la sécurité sur internet et sa gestion peut vite devenir un casse-tête.
Il existe pourtant des outils puissants comme OpenSSL pour gérer tous ces certificats.
Voici quelques-unes des commandes les plus utiles.

NOTE
OpenSSL est disponible pour toutes les distributions Linux, soit pré-intégré, soit via les gestionnaires de paquets habituels.
Des versions précompilées pour Windows existent (https://wiki.openssl.org/index.php/Binaries) mais il est aussi possible d'utiliser OpenSSL via Cygwin ou WSL.
Il est de toute façon toujours possible de compibler OpenSSL à partir des sources.

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt -subj "/C=FR/ST=Ile-De-France/L=Paris/O=Mon organisation/CN=www.mon-site.fr"

openssl req -out CSR.csr -new -newkey rsa:2048 -nodes -keyout privateKey.key

openssl req -out CSR.csr -key privateKey.key -new

Tout d'abord, il faut créer un fichier (que j'appelle ici san.cnf) contenant la configuration de la CSR :

[req] default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
[req_distinguished_name]
countryName = FR
stateOrProvinceName = Ile-De-France
localityName = Paris
organizationName = Mon organisation
commonName = www.mon-site.fr
[req_ext]
subjectAltName = @alt_names
[alt_names]
DNS.1   = www.mon-site.fr
DNS.2   = www.mon-site.com
DNS.3   = blog.mon-site.com

Ensuite, lancer la commande OpenSSL suivante utilisant notre fichier de configuration san.cnf pour créer la CSR et la clé privée :

openssl req -out CSR.csr -newkey rsa: 2048 -nodes -keyout privateKey.key -config san.cnf

openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key

# Génère le certificat auto-signé dans le magasin de certificats de l'utilisateur
$cert = New-SelfSignedCertificate -Subject "C=FR,ST=Ile-De-France,L=Paris,O=Mon organisation,CN=www.mon-site.fr"  -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256

# Export du certificat
Export-Certificate -Cert $cert -FilePath ".\certificate.cer"

# Création du password
$mypwd = ConvertTo-SecureString -String "1234" -Force -AsPlainText

# Export du .pfx
Export-PfxCertificate -Cert $cert -FilePath ".\certificate.pfx" -Password $mypwd

Souce : https://learn.microsoft.com/en-us/azure/active-directory/develop/howto-create-self-signed-certificate

openssl req -text -verify -in CSR.csr

openssl rsa -in privateKey.key -check

openssl x509 -in certificate.crt -text

openssl pkcs12 -info -in keyStore.p12

openssl x509 -noout -modulus -in certificate.crt | openssl md5
openssl rsa -noout -modulus -in privateKey.key | openssl md5
openssl req -noout -modulus -in CSR.csr | openssl md5

Conventions de nommage
Voici les extensions communes des certificats au format X.509 :

  • .pem : certificat DER encodé en Base64, encadré par les mentions "-----BEGIN CERTIFICATE-----" et "-----END CERTIFICATE-----"
  • .cer, .crt, .der : certificat DER au format binaire
  • .p7b, .p7c : PKCS#7, contient plusieurs certificats ou CRL(s)
  • .p12 : PKCS#12, keystore contenant un bloc clé privée et un bloc certificat
  • .pfx : PFX, prédécesseur de PKCS#12

Plus d'infos : https://serverfault.com/a/9717

openssl rsa -in privateKey.pem -out newPrivateKey.pem

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

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

openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes

Vous pouvez utiliser l'option -nocerts pour ne générer que la clé privée ou l'option -nokeys pour ne générer que le certificat.

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt

openssl s_client -connect www.mon-site.fr:443

Next Post