STANNIX Community


Manual: openssl-s_client

OPENSSL-S_CLIENT(1SSL)					   OpenSSL				      OPENSSL-S_CLIENT(1SSL)

NAME
       openssl-s_client - SSL/TLS client program

SYNOPSIS
       openssl s_client [-help] [-ssl_config section] [-connect host:port] [-host hostname] [-port port] [-bind host:port]
       [-proxy host:port] [-proxy_user userid] [-proxy_pass arg] [-unix path] [-4] [-6] [-quic] [-servername name]
       [-noservername] [-verify depth] [-verify_return_error] [-verify_quiet] [-verifyCAfile filename] [-verifyCApath dir]
       [-verifyCAstore uri] [-cert filename] [-certform DER|PEM|P12] [-cert_chain filename] [-build_chain] [-CRL filename]
       [-CRLform DER|PEM] [-crl_download] [-key filename|uri] [-keyform DER|PEM|P12|ENGINE] [-pass arg] [-chainCAfile
       filename] [-chainCApath directory] [-chainCAstore uri] [-requestCAfile filename] [-dane_tlsa_domain domain]
       [-dane_tlsa_rrdata rrdata] [-dane_ee_no_namechecks] [-reconnect] [-showcerts] [-prexit] [-no-interactive] [-debug]
       [-trace] [-nocommands] [-adv] [-security_debug] [-security_debug_verbose] [-msg] [-timeout] [-mtu size] [-no_ems]
       [-keymatexport label] [-keymatexportlen len] [-msgfile filename] [-nbio_test] [-state] [-nbio] [-crlf] [-ign_eof]
       [-no_ign_eof] [-psk_identity identity] [-psk key] [-psk_session file] [-quiet] [-sctp] [-sctp_label_bug]
       [-fallback_scsv] [-async] [-maxfraglen len] [-max_send_frag] [-split_send_frag] [-max_pipelines] [-read_buf]
       [-ignore_unexpected_eof] [-no_tx_cert_comp] [-no_rx_cert_comp] [-brief] [-starttls protocol] [-xmpphost hostname]
       [-name hostname] [-tlsextdebug] [-sess_out filename] [-sess_in filename] [-serverinfo types] [-status] [-alpn
       protocols] [-nextprotoneg protocols] [-ct] [-noct] [-ctlogfile] [-keylogfile file] [-early_data file] [-enable_pha]
       [-use_srtp value] [-srpuser value] [-srppass value] [-srp_lateuser] [-srp_moregroups] [-srp_strength number] [-ktls]
       [-tfo] [-nameopt option] [-no_ssl3] [-no_tls1] [-no_tls1_1] [-no_tls1_2] [-no_tls1_3] [-ssl3] [-tls1] [-tls1_1]
       [-tls1_2] [-tls1_3] [-dtls] [-dtls1] [-dtls1_2] [-xkey infile] [-xcert file] [-xchain file] [-xchain_build file]
       [-xcertform DER|PEM]> [-xkeyform DER|PEM]> [-CAfile file] [-no-CAfile] [-CApath dir] [-no-CApath] [-CAstore uri]
       [-no-CAstore] [-bugs] [-no_comp] [-comp] [-no_ticket] [-serverpref] [-client_renegotiation] [-legacy_renegotiation]
       [-no_renegotiation] [-no_resumption_on_reneg] [-legacy_server_connect] [-no_legacy_server_connect] [-no_etm]
       [-allow_no_dhe_kex] [-prefer_no_dhe_kex] [-prioritize_chacha] [-strict] [-sigalgs algs] [-client_sigalgs algs]
       [-groups groups] [-curves curves] [-named_curve curve] [-cipher ciphers] [-ciphersuites 1.3ciphers] [-min_protocol
       minprot] [-max_protocol maxprot] [-record_padding padding] [-debug_broken_protocol] [-no_middlebox] [-rand files]
       [-writerand file] [-provider name] [-provider-path path] [-provparam [name:]key=value] [-propquery propq] [-engine
       id] [-ssl_client_engine id] [-allow_proxy_certs] [-attime timestamp] [-no_check_time] [-check_ss_sig] [-crl_check]
       [-crl_check_all] [-explicit_policy] [-extended_crl] [-ignore_critical] [-inhibit_any] [-inhibit_map] [-partial_chain]
       [-policy arg] [-policy_check] [-policy_print] [-purpose purpose] [-suiteB_128] [-suiteB_128_only] [-suiteB_192]
       [-trusted_first] [-no_alt_chains] [-use_deltas] [-auth_level num] [-verify_depth num] [-verify_email email]
       [-verify_hostname hostname] [-verify_ip ip] [-verify_name name] [-x509_strict] [-issuer_checks] [-enable_server_rpk]
       [-enable_client_rpk] [host:port]

DESCRIPTION
       This command implements a generic SSL/TLS client which connects to a remote host using SSL/TLS. It is a very useful
       diagnostic tool for SSL servers.

OPTIONS
       In addition to the options below, this command also supports the common and client only options documented in the
       "Supported Command Line Commands" section of the SSL_CONF_cmd(3) manual page.

       -help
	   Print out a usage message.

       -ssl_config section
	   Use the specified section of the configuration file to configure the SSL_CTX object.

       -connect host:port
	   This	 specifies  the	 host  and optional port to connect to. It is possible to select the host and port using the
	   optional target positional argument instead.	 If neither this nor the target positional  argument  are  specified
	   then	 an  attempt  is  made to connect to the local host on port 4433.  If the host string is an IPv6 address, it
	   must be enclosed in "[" and "]".

       -host hostname
	   Host to connect to; use -connect instead.

       -port port
	   Connect to the specified port; use -connect instead.

       -bind host:port
	   This specifies the host address and or port to bind as the source for the connection.   For	Unix-domain  sockets
	   the port is ignored and the host is used as the source socket address.  If the host string is an IPv6 address, it
	   must be enclosed in "[" and "]".

       -proxy host:port
	   When	 used with the -connect flag, the program uses the host and port specified with this flag and issues an HTTP
	   CONNECT command to connect to the desired server.  If the host string is an IPv6 address, it must be enclosed  in
	   "[" and "]".

       -proxy_user userid
	   When	 used  with  the  -proxy flag, the program will attempt to authenticate with the specified proxy using basic
	   (base64) authentication.  NB: Basic authentication is insecure; the credentials are sent to the proxy  in  easily
	   reversible  base64  encoding	 before any TLS/SSL session is established.  Therefore, these credentials are easily
	   recovered by anyone able to sniff/trace the network. Use with caution.

       -proxy_pass arg
	   The proxy password source, used with the -proxy_user flag.  For more information about  the	format	of  arg	 see
	   openssl-passphrase-options(1).

       -unix path
	   Connect over the specified Unix-domain socket.

       -4  Use IPv4 only.

       -6  Use IPv6 only.

       -quic
	   Connect using the QUIC protocol. If specified then the -alpn option must also be provided.

       -servername name
	   Set the TLS SNI (Server Name Indication) extension in the ClientHello message to the given value.  If -servername
	   is not provided, the TLS SNI extension will be populated with the name given to -connect if it follows a DNS name
	   format.  If	-connect  is  not provided either, the SNI is set to "localhost".  This is the default since OpenSSL
	   1.1.1.

	   Even though SNI should normally be a DNS name and not an IP address, if -servername is provided  then  that	name
	   will be sent, regardless of whether it is a DNS name or not.

	   This option cannot be used in conjunction with -noservername.

       -noservername
	   Suppresses  sending	of  the SNI (Server Name Indication) extension in the ClientHello message. Cannot be used in
	   conjunction with the -servername or -dane_tlsa_domain options.

       -cert filename
	   The client certificate to use, if one is requested by the server.  The default is not to use a certificate.

	   The chain for the client certificate may be specified using -cert_chain.

       -certform DER|PEM|P12
	   The client certificate file format to use; unspecified by default.  See openssl-format-options(1) for details.

       -cert_chain
	   A file or URI of untrusted certificates to use when attempting to build the	certificate  chain  related  to	 the
	   certificate specified via the -cert option.	The input can be in PEM, DER, or PKCS#12 format.

       -build_chain
	   Specify whether the application should build the client certificate chain to be provided to the server.

       -CRL filename
	   CRL file to use to check the server's certificate.

       -CRLform DER|PEM
	   The CRL file format; unspecified by default.	 See openssl-format-options(1) for details.

       -crl_download
	   Download  CRL  from distribution points in the certificate. Note that this option is ignored if -crl_check option
	   is not provided. Note that the maximum size of CRL is limited by X509_CRL_load_http(3) function.

       -key filename|uri
	   The client private key to use.  If not specified then the certificate file will be used to read also the key.

       -keyform DER|PEM|P12|ENGINE
	   The key format; unspecified by default.  See openssl-format-options(1) for details.

       -pass arg
	   the private key and certificate file password  source.   For	 more  information  about  the	format	of  arg	 see
	   openssl-passphrase-options(1).

       -verify depth
	   The	verify	depth  to use. This specifies the maximum length of the server certificate chain and turns on server
	   certificate verification.  Unless the -verify_return_error option is given, the verify operation continues  after
	   errors  so all the problems with a certificate chain can be seen. As a side effect the connection will never fail
	   due to a server certificate verify failure.

	   By default, validation of server certificates and their chain is done  w.r.t.  the  (D)TLS  Server  ("sslserver")
	   purpose.  For details see "Certificate Extensions" in openssl-verification-options(1).

       -verify_return_error
	   Turns  on  server  certificate  verification,  like	with  -verify,	but  returns  verification errors instead of
	   continuing.	This will typically abort the handshake with a fatal error.

       -verify_quiet
	   Limit verify output to only errors.

       -verifyCAfile filename
	   A file in PEM format containing trusted certificates to use for verifying the server's certificate.

       -verifyCApath dir
	   A directory containing trusted certificates to use for verifying the server's certificate.  This  directory	must
	   be in "hash format", see openssl-verify(1) for more information.

       -verifyCAstore uri
	   The URI of a store containing trusted certificates to use for verifying the server's certificate.

       -chainCAfile file
	   A  file  in	PEM  format  containing	 trusted certificates to use when attempting to build the client certificate
	   chain.

       -chainCApath directory
	   A directory containing trusted certificates to use for building the client  certificate  chain  provided  to	 the
	   server.  This directory must be in "hash format", see openssl-verify(1) for more information.

       -chainCAstore uri
	   The	URI of a store containing trusted certificates to use when attempting to build the client certificate chain.
	   The URI may indicate a single certificate, as well as a collection of them.	With URIs  in  the  "file:"  scheme,
	   this	 acts  as -chainCAfile or -chainCApath, depending on if the URI indicates a directory or a single file.	 See
	   ossl_store-file(7) for more information on the "file:" scheme.

       -requestCAfile file
	   A  file  containing	a  list	 of  certificates  whose  subject  names  will	be  sent  to  the  server   in	 the
	   certificate_authorities extension. Only supported for TLS 1.3

       -dane_tlsa_domain domain
	   Enable  RFC6698/RFC7671  DANE  TLSA authentication and specify the TLSA base domain which becomes the default SNI
	   hint and the primary reference identifier for hostname checks.  This must be used in combination  with  at  least
	   one instance of the -dane_tlsa_rrdata option below.

	   When	 DANE authentication succeeds, the diagnostic output will include the lowest (closest to 0) depth at which a
	   TLSA record authenticated a chain certificate.  When that TLSA record is a "2 1 0" trust anchor public  key	that
	   signed  (rather  than  matched)  the	 top-most certificate of the chain, the result is reported as "TA public key
	   verified".  Otherwise, either the TLSA record "matched TA certificate" at a positive depth or  else	"matched  EE
	   certificate" at depth 0.

       -dane_tlsa_rrdata rrdata
	   Use	one  or	 more  times to specify the RRDATA fields of the DANE TLSA RRset associated with the target service.
	   The rrdata value is specified in "presentation form", that is four whitespace separated fields that	specify	 the
	   usage,  selector,  matching	type  and  associated data, with the last of these encoded in hexadecimal.  Optional
	   whitespace is ignored in the associated data field.	For example:

	     $ openssl s_client -brief -starttls smtp \
	       -connect smtp.example.com:25 \
	       -dane_tlsa_domain smtp.example.com \
	       -dane_tlsa_rrdata "2 1 1
		 B111DD8A1C2091A89BD4FD60C57F0716CCE50FEEFF8137CDBEE0326E 02CF362B" \
	       -dane_tlsa_rrdata "2 1 1
		 60B87575447DCBA2A36B7D11AC09FB24A9DB406FEE12D2CC90180517 616E8A18"
	     ...
	     Verification: OK
	     Verified peername: smtp.example.com
	     DANE TLSA 2 1 1 ...ee12d2cc90180517616e8a18 matched TA certificate at depth 1
	     ...

       -dane_ee_no_namechecks
	   This disables server name checks when  authenticating  via  DANE-EE(3)  TLSA	 records.   For	 some  applications,
	   primarily  web  browsers,  it  is  not safe to disable name checks due to "unknown key share" attacks, in which a
	   malicious server can convince a client that a connection to a victim server is instead a secure connection to the
	   malicious server.  The malicious server may then be able to violate cross-origin scripting  restrictions.   Thus,
	   despite  the text of RFC7671, name checks are by default enabled for DANE-EE(3) TLSA records, and can be disabled
	   in applications where it is safe to do so.  In particular, SMTP and XMPP clients should set this  option  as	 SRV
	   and	MX  records already make it possible for a remote domain to redirect client connections to any server of its
	   choice, and in any case SMTP and XMPP clients do not execute scripts downloaded from remote servers.

       -reconnect
	   Reconnects to the same server 5 times using the same session ID, this can be used as a test that session  caching
	   is working.

       -showcerts
	   Displays  the server certificate list as sent by the server: it only consists of certificates the server has sent
	   (in the order the server has sent them). It is not a verified chain.

       -prexit
	   Print session information when the program exits. This will always attempt to print out information even  if	 the
	   connection  fails.  Normally information will only be printed out once if the connection succeeds. This option is
	   useful because the cipher in use may be renegotiated or the connection may fail because a client  certificate  is
	   required or is requested only after an attempt is made to access a certain URL. Note: the output produced by this
	   option is not always accurate because a connection might never have been established.

       -no-interactive
	   This flag can be used to run the client in a non-interactive mode.

       -state
	   Prints out the SSL session states.

       -debug
	   Print extensive debugging information including a hex dump of all traffic.

       -nocommands
	   Do not use interactive command letters.

       -adv
	   Use advanced command mode.

       -security_debug
	   Enable security debug messages.

       -security_debug_verbose
	   Output more security debug output.

       -msg
	   Show protocol messages.

       -timeout
	   Enable send/receive timeout on DTLS connections.

       -mtu size
	   Set MTU of the link layer to the specified size.

       -no_ems
	   Disable Extended master secret negotiation.

       -keymatexport label
	   Export keying material using the specified label.

       -keymatexportlen len
	   Export the specified number of bytes of keying material; default is 20.

	   Show all protocol messages with hex dump.

       -trace
	   Show verbose trace output of protocol messages.

       -msgfile filename
	   File to send output of -msg or -trace to, default standard output.

       -nbio_test
	   Tests nonblocking I/O

       -nbio
	   Turns on nonblocking I/O

       -crlf
	   This option translated a line feed from the terminal into CR+LF as required by some servers.

       -ign_eof
	   Inhibit  shutting  down  the	 connection  when  end	of  file  is  reached in the input. This implicitly turns on
	   -nocommands as well.

       -quiet
	   Inhibit printing of session and certificate information.  This implicitly turns on -ign_eof	and  -nocommands  as
	   well.

       -no_ign_eof
	   Shut down the connection when end of file is reached in the input.  Can be used to override the implicit -ign_eof
	   after -quiet.

       -psk_identity identity
	   Use the PSK identity identity when using a PSK cipher suite.	 The default value is "Client_identity" (without the
	   quotes).

       -psk key
	   Use	the  PSK key key when using a PSK cipher suite. The key is given as a hexadecimal number without leading 0x,
	   for example -psk 1a2b3c4d.  This option must be provided in order to use a PSK cipher.

       -psk_session file
	   Use the pem encoded SSL_SESSION data stored in file as the basis of a PSK.  Note that  this	will  only  work  if
	   TLSv1.3 is negotiated.

       -sctp
	   Use	SCTP  for  the	transport protocol instead of UDP in DTLS. Must be used in conjunction with -dtls, -dtls1 or
	   -dtls1_2. This option is only available where OpenSSL has support for SCTP enabled.

       -sctp_label_bug
	   Use the incorrect behaviour of older OpenSSL implementations when  computing	 endpoint-pair	shared	secrets	 for
	   DTLS/SCTP.  This  allows communication with older broken implementations but breaks interoperability with correct
	   implementations. Must be used in conjunction with -sctp. This option is only available where OpenSSL has  support
	   for SCTP enabled.

       -fallback_scsv
	   Send TLS_FALLBACK_SCSV in the ClientHello.

       -async
	   Switch  on  asynchronous  mode. Cryptographic operations will be performed asynchronously. This will only have an
	   effect if an asynchronous capable engine is also used via the -engine option. For test purposes the	dummy  async
	   engine (dasync) can be used (if available).

       -maxfraglen len
	   Enable Maximum Fragment Length Negotiation; allowed values are 512, 1024, 2048, and 4096.

       -max_send_frag int
	   The maximum size of data fragment to send.  See SSL_CTX_set_max_send_fragment(3) for further information.

       -split_send_frag int
	   The size used to split data for encrypt pipelines. If more data is written in one go than this value then it will
	   be  split  into multiple pipelines, up to the maximum number of pipelines defined by max_pipelines. This only has
	   an effect if a suitable cipher suite has been negotiated, an engine that supports pipelining has been loaded, and
	   max_pipelines is greater than 1. See SSL_CTX_set_split_send_fragment(3) for further information.

       -max_pipelines int
	   The maximum number of encrypt/decrypt pipelines to be used. This will only have an effect if an engine  has	been
	   loaded  that	 supports  pipelining  (e.g. the dasync engine) and a suitable cipher suite has been negotiated. The
	   default value is 1.	See SSL_CTX_set_max_pipelines(3) for further information.

       -read_buf int
	   The default read buffer size to be used for connections. This will only have an effect  if  the  buffer  size  is
	   larger    than    the    size    that    would    otherwise	 be   used   and   pipelining	is   in	  use	(see
	   SSL_CTX_set_default_read_buffer_len(3) for further information).

       -ignore_unexpected_eof
	   Some TLS implementations do not send the mandatory close_notify alert on shutdown. If the  application  tries  to
	   wait	 for  the  close_notify	 alert but the peer closes the connection without sending it, an error is generated.
	   When this option is enabled the peer does not need to send the close_notify alert and a closed connection will be
	   treated as if the close_notify alert was received.  For more information  on	 shutting  down	 a  connection,	 see
	   SSL_shutdown(3).

       -no_tx_cert_comp
	   Disables support for sending TLSv1.3 compressed certificates.

       -no_rx_cert_comp
	   Disables support for receiving TLSv1.3 compressed certificate.

       -brief
	   Only provide a brief summary of connection parameters instead of the normal verbose output.

       -starttls protocol
	   Send the protocol-specific message(s) to switch to TLS for communication.  protocol is a keyword for the intended
	   protocol.   Currently,  the	only  supported	 keywords  are "smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server",
	   "irc", "postgres", "mysql", "lmtp", "nntp", "sieve" and "ldap".

       -xmpphost hostname
	   This option, when used with "-starttls xmpp"	 or  "-starttls	 xmpp-server",	specifies  the	host  for  the	"to"
	   attribute  of  the stream element.  If this option is not specified, then the host specified with "-connect" will
	   be used.

	   This option is an alias of the -name option for "xmpp" and "xmpp-server".

       -name hostname
	   This option is used to specify hostname information for various protocols used with -starttls  option.  Currently
	   only "xmpp", "xmpp-server", "smtp" and "lmtp" can utilize this -name option.

	   If  this  option  is	 used  with  "-starttls xmpp" or "-starttls xmpp-server", if specifies the host for the "to"
	   attribute of the stream element. If this option is not specified, then the host specified with "-connect" will be
	   used.

	   If this option is used with "-starttls lmtp" or "-starttls smtp", it specifies the name to use in the "LMTP LHLO"
	   or "SMTP EHLO" message, respectively. If this option is not specified, then "mail.example.com" will be used.

       -tlsextdebug
	   Print out a hex dump of any TLS extensions received from the server.

       -sess_out filename
	   Output SSL session to filename.

       -sess_in filename
	   Load SSL session from filename. The client will attempt to resume a connection from this session.

       -serverinfo types
	   A list of comma-separated TLS Extension Types (numbers between 0 and 65535).	 Each type will be sent as an  empty
	   ClientHello TLS Extension.  The server's response (if any) will be encoded and displayed as a PEM file.

       -status
	   Sends a certificate status request to the server (OCSP stapling). The server response (if any) is printed out.

       -alpn protocols, -nextprotoneg protocols
	   These  flags	 enable	 the  Enable  the  Application-Layer Protocol Negotiation or Next Protocol Negotiation (NPN)
	   extension, respectively. ALPN is the IETF standard and replaces NPN.	 The protocols	list  is  a  comma-separated
	   list	 of  protocol names that the client should advertise support for. The list should contain the most desirable
	   protocols first.  Protocol names are printable ASCII strings, for example "http/1.1" or "spdy/3".  An empty	list
	   of  protocols  is  treated  specially  and  will  cause the client to advertise support for the TLS extension but
	   disconnect just after receiving ServerHello with a list of server supported protocols.   The	 flag  -nextprotoneg
	   cannot be specified if -tls1_3 is used.

       -ct, -noct
	   Use	one  of	 these	two  options  to  control whether Certificate Transparency (CT) is enabled (-ct) or disabled
	   (-noct).  If CT is enabled, signed certificate timestamps (SCTs) will be requested from the server  and  reported
	   at handshake completion.

	   Enabling CT also enables OCSP stapling, as this is one possible delivery method for SCTs.

       -ctlogfile
	   A  file  containing	a  list	 of  known Certificate Transparency logs. See SSL_CTX_set_ctlog_list_file(3) for the
	   expected file format.

       -keylogfile file
	   Appends TLS secrets to the specified keylog file such that external programs (like  Wireshark)  can	decrypt	 TLS
	   connections.

       -early_data file
	   Reads the contents of the specified file and attempts to send it as early data to the server. This will only work
	   with resumed sessions that support early data and when the server accepts the early data.

       -enable_pha
	   For TLSv1.3 only, send the Post-Handshake Authentication extension. This will happen whether or not a certificate
	   has been provided via -cert.

       -use_srtp value
	   Offer SRTP key management, where value is a colon-separated profile list.

       -srpuser value
	   Set the SRP username to the specified value. This option is deprecated.

       -srppass value
	   Set the SRP password to the specified value. This option is deprecated.

       -srp_lateuser
	   SRP username for the second ClientHello message. This option is deprecated.

       -srp_moregroups	This option is deprecated.
	   Tolerate other than the known g and N values.

       -srp_strength number
	   Set the minimal acceptable length, in bits, for N.  This option is deprecated.

       -ktls
	   Enable  Kernel TLS for sending and receiving.  This option was introduced in OpenSSL 3.2.0.	Kernel TLS is off by
	   default as of OpenSSL 3.2.0.

       -tfo
	   Enable creation of connections via TCP fast open (RFC7413).

       -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2, -no_tls1_3, -ssl3, -tls1, -tls1_1, -tls1_2, -tls1_3
	   See "TLS Version Options" in openssl(1).

       -dtls, -dtls1, -dtls1_2
	   These specify the use of DTLS instead of TLS.  See "TLS Version Options" in openssl(1).

       -nameopt option
	   This specifies how the subject or issuer names are displayed.  See openssl-namedisplay-options(1) for details.

       -xkey infile, -xcert file, -xchain file, -xchain_build file, -xcertform DER|PEM, -xkeyform DER|PEM
	   Set	  extended    certificate    verification    options.	  See	 "Extended    Verification    Options"	  in
	   openssl-verification-options(1) for details.

       -CAfile file, -no-CAfile, -CApath dir, -no-CApath, -CAstore uri, -no-CAstore
	   See "Trusted Certificate Options" in openssl-verification-options(1) for details.

       -bugs, -comp, -no_comp, -no_ticket, -serverpref, -client_renegotiation, -legacy_renegotiation, -no_renegotiation,
       -no_resumption_on_reneg, -legacy_server_connect, -no_legacy_server_connect, -no_etm -allow_no_dhe_kex,
       -prefer_no_dhe_kex, -prioritize_chacha, -strict, -sigalgs algs, -client_sigalgs algs, -groups groups, -curves curves,
       -named_curve curve, -cipher ciphers, -ciphersuites 1.3ciphers, -min_protocol minprot, -max_protocol maxprot,
       -record_padding padding, -debug_broken_protocol, -no_middlebox
	   See "SUPPORTED COMMAND LINE COMMANDS" in SSL_CONF_cmd(3) for details.

       -rand files, -writerand file
	   See "Random State Options" in openssl(1) for details.

       -provider name
       -provider-path path
       -provparam [name:]key=value
       -propquery propq
	   See "Provider Options" in openssl(1), provider(7), and property(7).

       -engine id
	   See "Engine Options" in openssl(1).	This option is deprecated.

       -ssl_client_engine id
	   Specify engine to be used for client certificate operations.

       -allow_proxy_certs, -attime, -no_check_time, -check_ss_sig, -crl_check, -crl_check_all, -explicit_policy,
       -extended_crl, -ignore_critical, -inhibit_any, -inhibit_map, -no_alt_chains, -partial_chain, -policy, -policy_check,
       -policy_print, -purpose, -suiteB_128, -suiteB_128_only, -suiteB_192, -trusted_first, -use_deltas, -auth_level,
       -verify_depth, -verify_email, -verify_hostname, -verify_ip, -verify_name, -x509_strict -issuer_checks
	   Set	  various    options	of    certificate    chain    verification.	See    "Verification   Options"	  in
	   openssl-verification-options(1) for details.

	   Verification errors are displayed, for debugging, but the command will proceed  unless  the	-verify_return_error
	   option is used.

       -enable_server_rpk
	   Enable  support for receiving raw public keys (RFC7250) from the server.  Use of X.509 certificates by the server
	   becomes optional, and servers that support raw public keys may elect to use them.  Servers that don't support raw
	   public keys or prefer to use X.509 certificates can still elect to send X.509 certificates as usual.

       -enable_client_rpk
	   Enable support for sending raw public keys (RFC7250) to the server.	A raw public key will be sent by the client,
	   if solicited by the server, provided a suitable key and public certificate pair is configured.  Some servers	 may
	   nevertheless not request any client credentials, or may request a certificate.

       host:port
	   Rather than providing -connect, the target host and optional port may be provided as a single positional argument
	   after all options. If neither this nor -connect are provided, falls back to attempting to connect to localhost on
	   port 4433.  If the host string is an IPv6 address, it must be enclosed in "[" and "]".

CONNECTED COMMANDS (BASIC)
       If a connection is established with an SSL/TLS server then any data received from the server is displayed and any key
       presses will be sent to the server. If end of file is reached then the connection will be closed down.

       When used interactively (which means neither -quiet nor -ign_eof have been given), and neither of -adv or -nocommands
       are  given  then	 "Basic" command mode is entered. In this mode certain commands are recognized which perform special
       operations. These commands are a letter which must appear at the start of a line. All further data after the  initial
       letter on the line is ignored.  The commands are listed below.

       Q   End the current SSL connection and exit.

       R   Renegotiate the SSL session (TLSv1.2 and below only).

       C   Attempt to reconnect to the server using a resumption handshake.

       k   Send a key update message to the server (TLSv1.3 only)

       K   Send a key update message to the server and request one back (TLSv1.3 only)

CONNECTED COMMANDS (ADVANCED)
       If  -adv	 has  been given then "advanced" command mode is entered. As with basic mode, if a connection is established
       with an SSL/TLS server then any data received from the server is displayed and any key presses will be  sent  to	 the
       server. If end of file is reached then the connection will be closed down.

       Special	commands  can  be supplied by enclosing them in braces, e.g. "{help}" or "{quit}". These commands can appear
       anywhere in the text entered into s_client, but they are not sent to the server. Some commands can take	an  argument
       by  ending  the	command	 name  with ":" and then providing the argument, e.g.  "{keyup:req}". Some commands are only
       available when certain protocol versions have been negotiated.

       If a newline appears at the end of a line entered into s_client then this is also sent to the server.  If  a  command
       appears	on a line on its own with no other text on the same line, then the newline is suppressed and not sent to the
       server.

       The following commands are recognised.

       help
	   Prints out summary help text about the available commands.

       quit
	   Close the connection to the peer

       reconnect
	   Reconnect to the peer and attempt a resumption handshake

       keyup
	   Send a Key Update message. TLSv1.3 only. This command takes an  optional  argument.	If  the	 argument  "req"  is
	   supplied  then  the	peer  is also requested to update its keys. Otherwise if "noreq" is supplied the peer is not
	   requested to update its keys. The default is "req".

       reneg
	   Initiate a renegotiation with the server. (D)TLSv1.2 or below only.

       fin Indicate FIN on the current stream. QUIC only. Once FIN has been sent any further text entered for this stream is
	   ignored.

NOTES
       This command can be used to debug SSL servers. To connect to an SSL HTTP server the command:

	openssl s_client -connect servername:443

       would typically be used (https uses port 443). If the connection succeeds then an HTTP command can be given  such  as
       "GET /" to retrieve a web page.

       If  the	handshake  fails then there are several possible causes, if it is nothing obvious like no client certificate
       then the -bugs, -ssl3, -tls1, -no_ssl3, -no_tls1 options can be tried in case it is a buggy server. In particular you
       should play with these options before submitting a bug report to an OpenSSL mailing list.

       A frequent problem when attempting to get client certificates working is that  a	 web  client  complains	 it  has  no
       certificates  or	 gives	an empty list to choose from. This is normally because the server is not sending the clients
       certificate authority in its "acceptable CA list" when it requests a certificate. By using this command, the CA	list
       can  be	viewed	and  checked.  However,	 some  servers	only  request  client authentication after a specific URL is
       requested. To obtain the list in this case it is necessary to use the -prexit option and send an HTTP request for  an
       appropriate page.

       If  a  certificate  is  specified  on  the  command line using the -cert option it will not be used unless the server
       specifically requests a client certificate. Therefore, merely including a client certificate on the command  line  is
       no guarantee that the certificate works.

       If  there  are  problems	 verifying  a  server  certificate  then  the  -showcerts option can be used to show all the
       certificates sent by the server.

       This command is a test tool and is designed to continue the handshake after any certificate verification errors. As a
       result it will accept any certificate chain (trusted or not) sent by the peer. Non-test applications  should  not  do
       this  as	 it  makes  them vulnerable to a MITM attack. This behaviour can be changed by with the -verify_return_error
       option: any verify errors are then returned aborting the handshake.

       The -bind option may be useful if the server or a firewall requires connections to come from some particular  address
       and or port.

   Note on Non-Interactive Use
       When  s_client  is  run in a non-interactive environment (e.g., a cron job or a script without a valid stdin), it may
       close the connection prematurely, especially with TLS 1.3. To prevent this, you can  use	 the  -ign_eof	flag,  which
       keeps s_client running even after reaching EOF from stdin.

       For example:

	openssl s_client -connect :443 -tls1_3
			 -sess_out /path/to/tls_session_params_file
			 -ign_eof :25 :25
					     -starttls smtp -brief -ign_eof

       Similarly,  for HTTP/1.1 connections, including a `Connection: close` header ensures the server closes the connection
       after responding:

	printf 'GET / HTTP/1.1\r\nHost: \r\nConnection: close\r\n\r\n'
	    | openssl s_client -connect :443 -brief

       These approaches help manage the connection closure gracefully and prevent hangs caused by the server waiting for the
       client to initiate the disconnect.

BUGS
       Because this program has a lot of options and also because some of the techniques used are rather old, the  C  source
       for  this  command is rather hard to read and not a model of how things should be done.	A typical SSL client program
       would be much simpler.

       The -prexit option is a bit of a hack. We should really report information whenever a session is renegotiated.

SEE ALSO
       openssl(1),	  openssl-sess_id(1),	     openssl-s_server(1),	 openssl-ciphers(1),	    SSL_CONF_cmd(3),
       SSL_CTX_set_max_send_fragment(3),	  SSL_CTX_set_split_send_fragment(3),	       SSL_CTX_set_max_pipelines(3),
       ossl_store-file(7)

HISTORY
       The -no_alt_chains option was added in OpenSSL 1.1.0.  The -name option was added in OpenSSL 1.1.1.

       The -certform option has become obsolete in OpenSSL 3.0.0 and has no effect.

       The -engine option was deprecated in OpenSSL 3.0.

       The -enable_client_rpk, -enable_server_rpk, -no_rx_cert_comp,  -no_tx_cert_comp,	 and  -tfo  options  were  added  in
       OpenSSL 3.2.

COPYRIGHT
       Copyright 2000-2025 The OpenSSL Project Authors. All Rights Reserved.

       Licensed	 under	the  Apache  License  2.0  (the "License").  You may not use this file except in compliance with the
       License.	   You	 can   obtain	a   copy   in	the   file   LICENSE   in   the	  source    distribution    or	  at
       .

3.5.5							 2026-01-27				      OPENSSL-S_CLIENT(1SSL)