SSL / TLS¶
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.
Génération des certificats SSL¶
Générer un certificat auto-signé¶
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"
Générer une Certificate Signing Request (CSR) et sa clé privée¶
Générer une Certificate Signing Request (CSR) en utilisant une clé privée existante¶
Générer une Certificate Signing Request (CSR) pour un certificat avec plusieurs Subject Alternative Names (SAN)¶
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
Générer une Certificate Signing Request (CSR) basée sur un certificat existant¶
Générer un certificat auto-signé et son export en .pfx en powershell¶
# 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
Checks des fichiers générés¶
Vérifier une Certificate Signing Request (CSR)¶
Vérifier une clé privée¶
Vérifier un certificat¶
Vérifier un keystore PKCS#12 (.pfx ou .p12)¶
Vérifier que le hash MD5 correspond entre le certificat, la clé privée et la CSR¶
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
Conversions¶
[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
Retirer la passphrase d'une clé privée¶
Convertir un certificat DER au format PEM¶
Convertir un certificat PEM au format DER¶
Convertir un certificat PKCS#12 (.p12, .pfx) contenant une clé privée au format PEM¶
!!!! 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.Convertir un certificat PEM et sa clé privée au format PKCS#12 (.p12 ou .pfx)¶
Débug d'une connexion SSL/TLS¶
Created: September 26, 2023