OpenSSL - Commandes utiles : Différence entre versions

De PedroWiki
(Liens utiles)
(Commandes les plus utiles)
Ligne 12 : Ligne 12 :
  
 
= Commandes les plus utiles =
 
= Commandes les plus utiles =
 +
 +
== Vérifier les versions TLS supportées par un openssl ==
 +
 +
openssl ciphers -v| awk '{ print $2 }'|sort|uniq
 +
 +
Exemple sur un vieux openssl:
 +
 +
<pre>
 +
[root@hostname ~]# openssl ciphers -v| awk '{ print $2 }'|sort|uniq
 +
SSLv3
 +
[root@hostname ~]# openssl version
 +
OpenSSL 1.0.0-fips 29 Mar 2010
 +
</pre>
 +
 +
Exemple sur un openssl récent:
 +
 +
<pre>
 +
user@hostname:~$ openssl ciphers -v| awk '{ print $2 }'|sort|uniq
 +
SSLv3
 +
TLSv1
 +
TLSv1.2
 +
TLSv1.3
 +
user@hostname:~$ openssl version
 +
OpenSSL 1.1.1d  10 Sep 2019
 +
</pre>
 +
 +
== Tester la compatibilité d'un service distant avec une version de TLS ==
 +
 +
openssl s_client -connect google.com:443 -brief -<version_tls>
 +
 +
Exemple:
 +
 +
<pre>
 +
user@hotname:~$ echo "Q"  | openssl s_client -connect google.com:443 -brief -tls1_3
 +
CONNECTION ESTABLISHED
 +
Protocol version: TLSv1.3
 +
Ciphersuite: TLS_AES_256_GCM_SHA384
 +
Peer certificate: CN = *.google.com
 +
Hash used: SHA256
 +
Signature type: ECDSA
 +
Verification: OK
 +
Server Temp Key: X25519, 253 bits
 +
DONE
 +
user@hotname:~$ echo "Q"  | openssl s_client -connect google.com:443 -brief -tls1_2
 +
CONNECTION ESTABLISHED
 +
Protocol version: TLSv1.2
 +
Ciphersuite: ECDHE-ECDSA-CHACHA20-POLY1305
 +
Peer certificate: CN = *.google.com
 +
Hash used: SHA256
 +
Signature type: ECDSA
 +
Verification: OK
 +
Supported Elliptic Curve Point Formats: uncompressed
 +
Server Temp Key: X25519, 253 bits
 +
DONE
 +
</pre>
  
 
== Tester un port SSL ==
 
== Tester un port SSL ==

Version du 11 février 2022 à 13:28

Introduction

Cet article liste les commandes openssl les plus couramment utilisées. Il y a déjà des 100aines de pages sur internet, l'idée de cet article est de capitaliser dans le temps à titre personnel.

Liens utiles

Commandes les plus utiles

Vérifier les versions TLS supportées par un openssl

openssl ciphers -v| awk '{ print $2 }'|sort|uniq

Exemple sur un vieux openssl:

[root@hostname ~]# openssl ciphers -v| awk '{ print $2 }'|sort|uniq
SSLv3
[root@hostname ~]# openssl version
OpenSSL 1.0.0-fips 29 Mar 2010

Exemple sur un openssl récent:

user@hostname:~$ openssl ciphers -v| awk '{ print $2 }'|sort|uniq
SSLv3
TLSv1
TLSv1.2
TLSv1.3
user@hostname:~$ openssl version
OpenSSL 1.1.1d  10 Sep 2019

Tester la compatibilité d'un service distant avec une version de TLS

openssl s_client -connect google.com:443 -brief -<version_tls>

Exemple:

user@hotname:~$ echo "Q"  | openssl s_client -connect google.com:443 -brief -tls1_3
CONNECTION ESTABLISHED
Protocol version: TLSv1.3
Ciphersuite: TLS_AES_256_GCM_SHA384
Peer certificate: CN = *.google.com
Hash used: SHA256
Signature type: ECDSA
Verification: OK
Server Temp Key: X25519, 253 bits
DONE
user@hotname:~$ echo "Q"  | openssl s_client -connect google.com:443 -brief -tls1_2
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-ECDSA-CHACHA20-POLY1305
Peer certificate: CN = *.google.com
Hash used: SHA256
Signature type: ECDSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed
Server Temp Key: X25519, 253 bits
DONE

Tester un port SSL

openssl s_client -connect <host>:<port>

Générer un CSR

openssl req -sha256 -nodes -newkey rsa:2048 -keyout www.monsite.com.key -out www.monsite.com.csr

A partir d'un fichier de détails:

openssl req -nodes -newkey rsa:2048 -sha256 -days 3650 -keyout monsite.key -out monsite.csr -config <(cat csr_details.txt)

Format du fichier de détails:

[req]
default_bits = 2048
prompt = no
default_md = sha256
req_extensions = req_ext
distinguished_name = dn

[ dn ]
C=FR
ST=<Une région>
L=<Une ville>
O=<Une organisation>
OU=<Une OU>
emailAddress=<Un email de contact>
CN = <le CN souhaité, i.e. le nom à couvrir>

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = <alt_name_1>
DNS.2 = <alt_name_2>
IP.1 = <IP>
<pre>

Vérifier le contenu d'un certificat SSL au format PEM

openssl x509 -in <nom_fichier_certif> -text -noout

Convertir DER (.crt .cer .der) au format PEM

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

Supprimer la passphrase d'une clé privée

openssl rsa -in /path/to/ssl/032019/withPassPhrase.key -out /path/to/ssl/withoutPassPhrase.key

Puis en interactif, renseigner la passphrase. Vous pouvez ensuite utiliser la clé sans passphrase pour vos configurations.

Vérifier la correspondance CSR/clé privée/clé publique

Obtenir le hash md5 du modulus de chaque fichier et les comparer (ils doivent tous être identiques):

openssl x509 -in <clépublique> -noout -modulus | openssl md5
openssl rsa -in <cléprivée> -noout -modulus | openssl md5
openssl req -in <csr> -noout -modulus | openssl md5

Vérifier le bon ordre des clés publiques dans une chaîne

Logique:

  • partir de la clé publique de son certificat.
  • avoir 1 fichier par clé publique faisant partie de la chaîne.
  • si on considère que la clé publique est tout en haut, il faut en déterminer l'Issuer, et la clé à l'étage du dessous doit avoir un Subject strictement identique.
openssl x509 -in <clépublique> -text -noout | grep Issuer

Puis

openssl x509 -in <unedesclésdelachaine> -text -noout | grep Subject

La clé de la chaine ayant un Subject égal à l'issuer de la clé précédente vient à la suite.

Ensuite concaténer toutes ces clés dans un seul et même fichier:

cat <clépublique> > fullchain.pem
cat <cléAC1> >> fullchain.pem
...
cat <cléACn> >> fullchain.pem
cat <cléRootCA> >> fullchain.pem
Vérifier qu'il n'y ait pas de mélange des BEGIN et END CERTIFICATE (ex: manque de retour à la ligne dans les fichiers).