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
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 :
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