89 votes

Comment déboguer la poignée de main SSL à l'aide de cURL ?

Je voudrais résoudre un problème d'authentification par répertoire avec un certificat client. Je voudrais surtout savoir quels certificats clients acceptables le serveur envoie.

Comment déboguer le handshake SSL, de préférence avec cURL ?

94voto

Christian Davén Points 4527

J'ai utilisé cette commande pour dépanner la négociation du certificat du client :

openssl s_client -connect www.test.com:443 -prexit

La sortie contiendra probablement "Acceptable client certificate CA names" et une liste de certificats CA du serveur, ou éventuellement "No client certificate CA names sent", si le serveur ne requiert pas toujours des certificats clients.

47voto

hackajar Points 503
curl -iv https://your.domain.io

Cela vous donnera la sortie du certificat et de l'en-tête si vous ne souhaitez pas utiliser la commande openssl.

12voto

Vorsprung Points 5623

Curl a probablement des options pour afficher plus d'informations mais pour des choses comme ça, j'utilise toujours openssl s_client

Avec le -debug cette option donne beaucoup d'informations utiles

Je devrais peut-être ajouter que cela fonctionne également avec les connexions non HTTP. Donc si vous utilisez "https", essayez les commandes curl suggérées ci-dessous. Si vous ne l'êtes pas ou si vous voulez une deuxième option openssl s_client pourrait être bon

9voto

rus1 Points 11
  1. Pour le dépannage de la poignée de main TLS, veuillez utiliser l'outil suivant openssl s_client au lieu de curl .
  2. -msg fait l'affaire !
  3. -debug permet de voir ce qui voyage réellement sur la prise.
  4. -status L'agrafage OCSP devrait être la norme de nos jours.

    openssl s_client -connect example.com:443 -tls1_2 -status -msg -debug -CAfile <path to trusted root ca pem> -key <path to client private key pem> -cert <path to client cert pem>

Autres interrupteurs utiles -tlsextdebug -prexit -state

https://www.openssl.org/docs/man1.0.2/man1/s_client.html

5voto

dualed Points 3564

curl a un --trace (et --trace-ascii ), qui imprime pratiquement tout, y compris tous les échanges SSL/TSL. Puisque --trace remplace les autres options de verbosité, tout ce dont vous avez besoin est de

curl --trace /path/to/trace.log https://example.com

Vous pouvez ensuite vous documenter sur l'ietf afin de faire correspondre les messages du journal aux messages respectifs de la norme - par ex. TLS v1.2 , TLS v1.3 curl imprime même le numéro de message correspondant du standard comme :

== Info: TLSv1.3 (OUT), TLS handshake, Client hello (1):

Où le (1) est le numéro du message.

--trace-ascii fonctionne tout comme --trace mais n'imprime pas les données binaires.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X