Mémo openssl
Création :
Générer une clé privée :
openssl genrsa -out key.pem 2048
Générer un CSR à partir d’une clé existante :
openssl req -out csr.csr -key key.pem -new
Générer une nouvelle clé et un CSR :
openssl req -out csr.csr -new -newkey rsa:2048 -nodes -keyout key.pem
Générer un certificat auto-signé :
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -keyout key.pem -out certificate.crt -days 365
Générer un CSR sur la base d’un certificat et d’une clé existants :
openssl x509 -x509toreq -in certificate.crt -signkey key.pem -out csr.csr
Retirer la pass-phrase d’une clé privée :
openssl rsa -in key.pem -out newkey.pem
Utiliser un fichier de configuration :
[ req ] default_bits = 4096 default_md = sha256 prompt = no encrypt_key = no distinguished_name = dn req_extensions = req_ext [ dn ] C = Fr O = "Organisation" OU = "Prganizational Unit" ST = "Centre" CN = server.domain.tld [ req_ext ] subjectAltName = DNS:pop.domain.tld
Génération d’une clé et du certificat depuis ce fichier :
openssl req -new -config openssl.cnf -keyout key.pem -out csr.csr
Informations sur un certificat :
Obtenir la date d’expiration :
openssl x509 -noout -in certificate.crt -dates
Obtenir le signataire d’un certificat :
openssl x509 -noout -in certificate.crt -issuer
Obtenir le détail complet d’un certificat :
openssl x509 -noout -in certificate.crt -text
Vérification des certificats :
Vérifier qu’une clé privée et un CSR correspondent :
openssl rsa -noout -modulus -in key.pem | openssl md5 openssl req -noout -modulus -in csr.txt | openssl md5
Vérifier qu’une clé privée et un certificat correspondent :
openssl x509 -noout -modulus -in cert.crt | openssl md5 openssl rsa -noout -modulus -in key.pem | openssl md5
Vérifier un CSR :
openssl req -text -noout -verify -in csr.csr
Vérifier une clé privée :
openssl rsa -in key.pem -check
Vérifier un certificat :
openssl x509 -in certificate.crt -text -noout
Vérifier un certificat PKCS12 :
openssl pkcs12 -info -in store.p12
Tester une connexion à un serveur :
Vérifier une connexion et la chaîne de confiance sur un port TCP :
openssl s_client -connect host:443
Vérifier une connexion et la chaîne de confiance sur un port TCP en précisant le virtualhost pour le SNI :
openssl s_client -connect host:443 -servername http_host
Vérifier la prise en charge de SSLv2, SSLv3, TLS1.0, TLS1.1 et TLS1.2 :
openssl s_client -connect host:443 -ssl2 openssl s_client -connect host:443 –ssl3 openssl s_client -connect host:443 –tls1 openssl s_client -connect host:443 –tls1_1 openssl s_client -connect host:443 –tls1_2
Vérifier la prise en charge d’un algorithme de chiffrement sur un serveur (openssl ciphers) :
openssl s_client -cipher 'ECDHE-ECDSA-AES256-SHA' -connect host:443
Vérifier les algorithmes supportés avec nmap :
nmap --script ssl-enum-ciphers -p 443 10.221.36.12 Starting Nmap 6.40 ( http://nmap.org ) at 2019-09-19 16:36 CEST Nmap scan report for SR052180CTI3700.hm.dm.ad (10.221.36.12) Host is up (0.00045s latency). PORT STATE SERVICE 443/tcp open https | ssl-enum-ciphers: | TLSv1.0: | ciphers: | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong | TLS_RSA_WITH_AES_128_CBC_SHA - strong | TLS_RSA_WITH_AES_256_CBC_SHA - strong | compressors: | NULL | TLSv1.1: | ciphers: | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong | TLS_RSA_WITH_AES_128_CBC_SHA - strong | TLS_RSA_WITH_AES_256_CBC_SHA - strong | compressors: | NULL | TLSv1.2: | ciphers: | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA - strong | TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 - strong | TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 - strong | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA - strong | TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 - strong | TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 - strong | TLS_RSA_WITH_AES_128_CBC_SHA - strong | TLS_RSA_WITH_AES_128_CBC_SHA256 - strong | TLS_RSA_WITH_AES_128_GCM_SHA256 - strong | TLS_RSA_WITH_AES_256_CBC_SHA - strong | TLS_RSA_WITH_AES_256_CBC_SHA256 - strong | TLS_RSA_WITH_AES_256_GCM_SHA384 - strong | compressors: | NULL |_ least strength: strong
Conversions :
Convertir un PEM en DER :
openssl x509 -outform der -in certificate.crt -out certificate.der
Convertir un DER en PEM :
openssl x509 -inform der -in certificate.der -out certificate.pem
Conversion PEM en PKCS12 :
openssl pkcs12 -export -inkey key.pem -in certificate.crt -name SuperCertificat -out store.p12
Conversion PKCS12 en PEM :
openssl pkcs12 -in store.p12 -out store.pem -nodes