s_client(1) programme client SSL ou TLS

SYNOPSIS

openssl s_client [-connect hôte:port] [-servername nom] [-verify profondeur] [-verify_return_error] [-cert fichier] [-certform DER|PEM] [-key fichier] [-keyform DER|PEM] [-pass param] [-CApath répertoire] [-CAfile fichier] [-no_alt_chains] [-reconnect] [-pause] [-showcerts] [-debug] [-msg] [-nbio_test] [-state] [-nbio] [-crlf] [-ign_eof] [-no_ign_eof] [-quiet] [-ssl2] [-ssl3] [-tls1] [-no_tls1_1] [-no_tls1_2] [-no_ssl2] [-no_ssl3] [-no_tls1] [-bugs] [-cipher listechiffrements] [-serverpref] [-starttls protocole] [-engine identifiant] [-tlsextdebug] [-no_ticket] [-sess_out fichier] [-sess_in fichier] [-rand fichier(s)] [-serverinfo types] [-status] [-nextprotoneg protocoles]

DESCRIPTION

La commande s_client implémente un client SSL ou TLS générique qui se connecte à un hôte distant en utilisant SSL ou TLS. C’est un outil de diagnostic très pratique pour les serveurs SSL.

OPTIONS

-connect hôte:port
Cela indique l’hôte et le port facultatif où se connecter. Sans indication, un essai de connexion sera réalisé vers l’hôte local sur le port 4433.
-servername nom
Définir l’extension SNI (« Server Name Indication ») TLS dans le message ClientHello.
-cert fichier
Le certificat à utiliser, s’il est demandé par le serveur. Par défaut, aucun certificat n’est utilisé.
-certform format
Le format de certificat à utiliser : DER ou PEM. Par défaut, PEM est utilisé.
-key fichier
La clef privée à utiliser. En absence d’indication, le fichier de certificats sera utilisé.
-keyform format
Le format privé à utiliser : DER ou PEM. Par défaut, PEM est utilisé.
-pass param
La source du mot de passe de la clef privée. Pour plus d'informations sur le format de param, consultez la section PARAMÈTRES DE PHRASE SECRÈTE d'openssl(1).
-verify profondeur
La profondeur de vérification à utiliser. Cela indique la taille maximale de la chaîne de certificats du serveur et active la vérification de certificat du serveur. Actuellement l'opération de vérification continue après les erreurs de façon à montrer tous les problèmes liés à la chaîne de certificats. Par conséquent, la connexion n'échouera jamais à cause d'un échec de vérification de certificat du serveur.
-verify_return_error
Renvoyer les erreurs de vérification au lieu de continuer. Cela fera typiquement échouer l’initialisation de connexion avec une erreur fatale.
-CApath répertoire
Le répertoire utilisé pour la vérification de certificat du client. Ce répertoire doit être au « format de hachage », consultez verify pour plus de renseignements. Il est aussi utilisé pour construire la chaîne de certificats du client.
-CAfile fichier
Un fichier contenant des certificats de confiance utilisés pendant l’authentification du serveur et lors d’une tentative de créer la chaîne de certificats du client.
-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy, -check_ss_sig, -no_alt_chains
Définir plusieurs options de validation de chaîne de certificats. Consultez la page de manuel verify(1) pour plus de précisions.
-reconnect
Se reconnecter au même serveur cinq fois en utilisant le même identifiant de session. Cela peut servir de test de fonctionnement du cache de session.
-pause
Faire une pause d’une seconde entre chaque appel de lecture et écriture.
-showcerts
Afficher toute la chaîne de certificats du serveur : normalement, seul le certificat du serveur lui-même est affiché.
-prexit
Afficher les renseignements de session lorsque le programme est quitté. Cela essayera toujours d’afficher les renseignements même en cas d’échec de connexion. Les renseignements ne sont normalement affichés qu’une fois si la connexion réussit. Cette option est utile car l’algorithme de chiffrement en cours d’utilisation pourrait être renégocié, ou la connexion pourrait échouer parce qu’un certificat client est demandé, ou n’être demandé qu’après une tentative d’accès à une certaine URL. Remarque : la sortie produite par cette option n’est pas toujours exacte car une connexion pourrait n’avoir jamais été établie.
-state
Afficher les états de session SSL.
-debug
Afficher des renseignements de débogage complets y compris l’intégralité des échanges au format hexadécimal.
-msg
Montrer tous les messages de protocole avec les échanges au format hexadécimal.
-nbio_test
Tester les entrées et sorties non bloquantes.
-nbio
Activer les entrées et sorties non bloquantes.
-crlf
Cette option traduit un changement de ligne du terminal en RC+PAL (CR+LF) comme exigé par certains serveurs.
-ign_eof
Empêcher la fermeture de connexion quand une fin de fichier est atteinte en entrée.
-quiet
Empêcher l’affichage de renseignements sur la session et le certificat. Cela active aussi -ign_eof implicitement.
-no_ign_eof
Fermer la connexion quand une fin de fichier est atteinte en entrée. Peut être utilisée pour remplacer le -ign_eof implicite après -quiet.
-psk_identity identité
Utiliser l’identité PSK identité lors de l’utilisation d’un ensemble de chiffrements PSK.
-psk clef
Utiliser la clef PSK clef lors de l’utilisation d’un ensemble de chiffrements PSK. La clef est donnée comme un nombre hexadécimal sans être précédé par 0x, par exemple -psk 1a2b3c4d.
-ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2
Ces options désactivent l’utilisation de certains protocoles SSL ou TLS. Par défaut, l’initialisation de connexion utilise une méthode qui devrait être compatible avec tous les serveurs et leur permettre d’utiliser SSL v3, SSL v2 ou TLS comme approprié.

Malheureusement, d'anciens serveurs mal conçus encore utilisés ne gèrent pas cette technique et échoueront à se connecter. Certains serveurs ne fonctionnent que si TLS est désactivé.

-fallback_scsv
Envoyer TLS_FALLBACK_SCSV dans ClientHello.
-bugs
Plusieurs bogues sont connus dans les implémentations SSL et TLS. L'ajout de cette option permet de contourner certains problèmes.
-cipher listechiffrements
Cela permet à la liste de chiffrements envoyée par le client d’être modifiée. Bien que le serveur détermine l’ensemble de chiffrements qui est utilisé, il devrait prendre le premier algorithme de chiffrement pris en charge de la liste envoyée par le client. Consultez la commande ciphers pour plus de renseignements.
-serverpref
Utiliser les préférences de chiffrement du serveur ; utilisée seulement pour SSLV2.
-starttls protocole
Envoyer le ou les messages spécifiques au protocole pour basculer vers TLS pour la communication. protocole est un mot clef pour le protocole désiré. Actuellement, les seuls mots clefs pris en charge sont « smtp », « pop3 », « imap » et « ftp ».
-tlsextdebug
Afficher les échanges au format hexadécimal de toutes les extensions TLS reçues du serveur.
-no_ticket
Désactiver la prise en charge des tickets de session RFC 4507 bis.
-sess_out fichier
Envoyer la session SSL dans fichier.
-sess_in fichier
Charger la session SSL du fichier. Le client essayera de reprendre une connexion depuis cette session.
-engine identifiant
Indiquer un moteur (en utilisant son identifiant unique identifiant) obligera s_client à essayer d'obtenir une référence fonctionnelle pour le moteur indiqué et de l'initialiser si nécessaire. Le moteur sera ensuite utilisé par défaut pour tous les algorithmes disponibles.
-rand fichier(s)
Un ou plusieurs fichiers contenant des données aléatoires utilisées pour initialiser le générateur de nombres pseudoaléatoires, ou une socket EGD (consultez RAND_egd(3)). Plusieurs fichiers peuvent être indiqués en utilisant le séparateur du système d'exploitation : « ; » pour Windows, « , » pour OpenVMS et « : » pour tous les autres.
-serverinfo types
Une liste de types d’extension TLS (nombres compris entre 0 et 65535), séparés par des virgules. Chaque type est envoyé comme une extension TLS ClientHello vide. La réponse du serveur (s’il y en a une) sera encodée et affichée comme un fichier PEM.
-status
Envoyer une demande d’état de certificat au serveur (agrafage OCSP). La réponse du serveur (s’il y en a) est affichée.
-nextprotoneg protocoles
Activer l’extension TLS de négociation du prochain protocole (« Next Protocol Negotiation ») et fournir une liste de noms de protocoles séparés par des virgules dont le client devrait annoncer la prise en charge. La liste devrait d’abord contenir les protocoles les plus voulus. Les noms de protocole sont des chaînes ASCII affichables, par exemple « http/1.1 » ou « spdy/3 ». Une liste vide de protocoles est traitée spécialement et forcera le client à annoncer la prise en charge de l’extension TLS mais à se déconnecter juste après avoir reçu ServerHello avec une liste des protocoles serveurs pris en charge.

COMMANDES DE CONNEXION

Si une connexion est établie avec un serveur SSL, alors toutes les données reçues du serveur sont affichées et n’importe quel appui de touche sera envoyée au serveur. En utilisation interactive (ce qui signifie que ni -quiet ni -ign_eof n’ont été données), la session sera renégociée si la ligne commence par un R, et, si la ligne commence par un Q ou si la fin de fichier est atteinte, la connexion sera fermée.

NOTES

s_client peut être utilisée pour déboguer les serveurs SSL. Pour se connecter à un serveur HTTP SSL, la commande :

 openssl s_client -connect nomdeserveur:443

serait typiquement utilisée (HTTPS utilise le port 443). Si la connexion réussit, alors une commande HTTP peut être donnée comme « GET / » pour récupérer une page web.

En cas d’échec de l’initialisation de connexion, plusieurs causes sont possibles. Si aucune raison évidente n’est détectée comme l’absence de certificat client, les options -bugs, -ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3 et -no_tls1 peuvent être essayées si le serveur est bogué. En particulier, vous devriez essayer ces options avant de soumettre un rapport de bogue sur une liste de diffusion d’OpenSSL.

Un problème classique lors d’une tentative d’obtention de certificat client fonctionnel, est qu’un client web se plaint de ne pas avoir de certificat ou donne une liste vide pour le choisir. C’est généralement dû au serveur qui n’envoie pas aux clients les autorités de certification dans sa « liste d’autorités de certification acceptables » quand il demande un certificat. En utilisant s_client, la liste d’autorités de certification peut être vue et vérifiée. Cependant, certains serveurs ne demandent une authentification du client qu’après une demande d’URL spécifique. Pour obtenir la liste dans ce cas, il faut utiliser l’option -prexit et envoyer une requête HTTP pour une page appropriée.

Si un certificat est indiqué sur la ligne de commandes en utilisant l'option -cert, il ne sera pas utilisé à moins que le serveur indiqué n’exige un certificat client. Par conséquent, la simple utilisation d'un certificat client sur la ligne de commandes ne garantit pas que le certificat fonctionne.

En cas de problème de vérification d’un certificat de serveur, l’option -showcerts peut être utilisée pour montrer toute la chaîne.

Puisque le salut du client SSLv23 ne peut pas inclure les méthodes ou extensions de compression, elles ne seront prises en charge que si son utilisation est désactivée, par exemple en utilisant l’option -no_sslv2.

L’utilitaire s_client est un outil de test, conçu pour continuer l’initialisation de connexion après n’importe quelle erreur de vérification de certificat. Par conséquent, il acceptera n’importe quelle chaîne de certificats (de confiance ou non) envoyée par le pair. Aucune application réelle ne devrait faire cela car elle serait vulnérable aux attaques d’homme au milieu. Ce comportement peut être modifié à l’aide de l’option -verify_return_error : toutes les erreurs de vérification sont alors renvoyées en faisant échouer l’initialisation de connexion.

BOGUES

Puisque ce programme a beaucoup d’options, et aussi parce que certaines des techniques utilisées sont plutôt vieilles, le code source C de s_client est plutôt difficile à lire et n’est pas un exemple à suivre. Un programme client SSL typique serait beaucoup plus simple.

L’option -prexit est un peu du bidouillage. Les renseignements devraient vraiment être signalés quand une session est renégociée.

HISTORIQUE

L’option -no_alt_chains a été ajoutée à OpenSSL 1.0.2b.

TRADUCTION

La traduction de cette page de manuel est maintenue par les membres de la liste <debian-l10n-french AT lists DOT debian DOT org>. Veuillez signaler toute erreur de traduction par un rapport de bogue sur le paquet manpages-fr-extra.