|
|
Ligne 1 : |
Ligne 1 : |
| = Introduction = | | = 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. | | Cet article liste les commandes ldap et les syntaxes les plus courantes et utiles. |
|
| |
|
| = Liens utiles = | | = Références = |
|
| |
|
| * [https://www.sslshopper.com/article-most-common-openssl-commands.html Page sur SSLShopper] | | * [https://serverfault.com/questions/514870/how-do-i-authenticate-with-ldap-via-the-command-line Un échange sur ServerFault] |
| * [https://www.tbs-certificats.com/FAQ/fr/192.html Génération de CSR (TBS)]
| |
| * [https://en.wikipedia.org/wiki/Self-signed_certificate Wikipedia - Certifs autosignés]
| |
| * [https://www.ibm.com/docs/en/api-connect/2018.x?topic=overview-generating-self-signed-certificate-using-openssl Générer un certificat auto signé]
| |
| * [https://romain.therrat.fr/posts/2020/04/openssl-tester-la-compatibilit%C3%A9-d-une-version-de-tls/ Blog de Romain Therrat, post sur la compatibilité TLS d'openssl]
| |
|
| |
|
| = Commandes les plus utiles = | | = Exemples = |
|
| |
|
| == Vérifier les versions TLS supportées par un openssl == | | == ldapsearch == |
|
| |
|
| openssl ciphers -v| awk '{ print $2 }'|sort|uniq | | ldapsearch -x -D "CN=Prenom Nom,OU=Utilisateur_<structure1>,OU=Utilisateur_<structure2>,DC=<domaine>,DC=<tld>" -W -H ldap://<host_AD> -b "OU=Utilisateur_<structure2>,DC=<domaine>,DC=<tld>" "objectClass=*" |
| | |
| 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> | |
| | |
| == Identifier les protos SSL dispos sur un service web ==
| |
| | |
| for v in ssl2 ssl3 tls1 tls1_1 tls1_2 tls1_3; do \
| |
| for c in $(openssl ciphers 'ALL:eNULL' | tr ':' ' '); do \
| |
| openssl s_client -connect <URL>:443 -cipher $c -$v < /dev/null > /dev/null 2>&1 && echo -e "$v:\t$c"; \
| |
| done; \
| |
| 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 -keyout monsite.key -out monsite.csr -config <(cat csr_details.txt)
| |
| | |
| Format du fichier de détails:
| |
| | |
| <pre>
| |
| [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>
| |
| | |
| == Lire le contenu d'un CSR ==
| |
| | |
| openssl req -noout -text -verify -in mon.domaine.com.csr
| |
| | |
| == 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).
| |
|
| |
|
| [[Category:Commande]] | | [[Category:Commande]] |
| [[Category:Howto]] | | [[Category:Howto]] |
| [[Category:SSL]] | | [[Category:LDAP]] |
Introduction
Cet article liste les commandes ldap et les syntaxes les plus courantes et utiles.
Références
Exemples
ldapsearch
ldapsearch -x -D "CN=Prenom Nom,OU=Utilisateur_<structure1>,OU=Utilisateur_<structure2>,DC=<domaine>,DC=<tld>" -W -H ldap://<host_AD> -b "OU=Utilisateur_<structure2>,DC=<domaine>,DC=<tld>" "objectClass=*"