xref: /freebsd/crypto/openssl/doc/man1/openssl-s_client.pod.in (revision e7be843b4a162e68651d3911f0357ed464915629)
1=pod
2{- OpenSSL::safe::output_do_not_edit_headers(); -}
3
4=head1 NAME
5
6openssl-s_client - SSL/TLS client program
7
8=head1 SYNOPSIS
9
10B<openssl> B<s_client>
11[B<-help>]
12[B<-ssl_config> I<section>]
13[B<-connect> I<host>:I<port>]
14[B<-host> I<hostname>]
15[B<-port> I<port>]
16[B<-bind> I<host>:I<port>]
17[B<-proxy> I<host>:I<port>]
18[B<-proxy_user> I<userid>]
19[B<-proxy_pass> I<arg>]
20[B<-unix> I<path>]
21[B<-4>]
22[B<-6>]
23[B<-quic>]
24[B<-servername> I<name>]
25[B<-noservername>]
26[B<-verify> I<depth>]
27[B<-verify_return_error>]
28[B<-verify_quiet>]
29[B<-verifyCAfile> I<filename>]
30[B<-verifyCApath> I<dir>]
31[B<-verifyCAstore> I<uri>]
32[B<-cert> I<filename>]
33[B<-certform> B<DER>|B<PEM>|B<P12>]
34[B<-cert_chain> I<filename>]
35[B<-build_chain>]
36[B<-CRL> I<filename>]
37[B<-CRLform> B<DER>|B<PEM>]
38[B<-crl_download>]
39[B<-key> I<filename>|I<uri>]
40[B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>]
41[B<-pass> I<arg>]
42[B<-chainCAfile> I<filename>]
43[B<-chainCApath> I<directory>]
44[B<-chainCAstore> I<uri>]
45[B<-requestCAfile> I<filename>]
46[B<-dane_tlsa_domain> I<domain>]
47[B<-dane_tlsa_rrdata> I<rrdata>]
48[B<-dane_ee_no_namechecks>]
49[B<-reconnect>]
50[B<-showcerts>]
51[B<-prexit>]
52[B<-no-interactive>]
53[B<-debug>]
54[B<-trace>]
55[B<-nocommands>]
56[B<-adv>]
57[B<-security_debug>]
58[B<-security_debug_verbose>]
59[B<-msg>]
60[B<-timeout>]
61[B<-mtu> I<size>]
62[B<-no_ems>]
63[B<-keymatexport> I<label>]
64[B<-keymatexportlen> I<len>]
65[B<-msgfile> I<filename>]
66[B<-nbio_test>]
67[B<-state>]
68[B<-nbio>]
69[B<-crlf>]
70[B<-ign_eof>]
71[B<-no_ign_eof>]
72[B<-psk_identity> I<identity>]
73[B<-psk> I<key>]
74[B<-psk_session> I<file>]
75[B<-quiet>]
76[B<-sctp>]
77[B<-sctp_label_bug>]
78[B<-fallback_scsv>]
79[B<-async>]
80[B<-maxfraglen> I<len>]
81[B<-max_send_frag>]
82[B<-split_send_frag>]
83[B<-max_pipelines>]
84[B<-read_buf>]
85[B<-ignore_unexpected_eof>]
86[B<-no_tx_cert_comp>]
87[B<-no_rx_cert_comp>]
88[B<-brief>]
89[B<-starttls> I<protocol>]
90[B<-xmpphost> I<hostname>]
91[B<-name> I<hostname>]
92[B<-tlsextdebug>]
93[B<-sess_out> I<filename>]
94[B<-sess_in> I<filename>]
95[B<-serverinfo> I<types>]
96[B<-status>]
97[B<-alpn> I<protocols>]
98[B<-nextprotoneg> I<protocols>]
99[B<-ct>]
100[B<-noct>]
101[B<-ctlogfile>]
102[B<-keylogfile> I<file>]
103[B<-early_data> I<file>]
104[B<-enable_pha>]
105[B<-use_srtp> I<value>]
106[B<-srpuser> I<value>]
107[B<-srppass> I<value>]
108[B<-srp_lateuser>]
109[B<-srp_moregroups>]
110[B<-srp_strength> I<number>]
111[B<-ktls>]
112[B<-tfo>]
113{- $OpenSSL::safe::opt_name_synopsis -}
114{- $OpenSSL::safe::opt_version_synopsis -}
115{- $OpenSSL::safe::opt_x_synopsis -}
116{- $OpenSSL::safe::opt_trust_synopsis -}
117{- $OpenSSL::safe::opt_s_synopsis -}
118{- $OpenSSL::safe::opt_r_synopsis -}
119{- $OpenSSL::safe::opt_provider_synopsis -}
120{- $OpenSSL::safe::opt_engine_synopsis -}[B<-ssl_client_engine> I<id>]
121{- $OpenSSL::safe::opt_v_synopsis -}
122[B<-enable_server_rpk>]
123[B<-enable_client_rpk>]
124[I<host>:I<port>]
125
126=head1 DESCRIPTION
127
128This command implements a generic SSL/TLS client which
129connects to a remote host using SSL/TLS. It is a I<very> useful diagnostic
130tool for SSL servers.
131
132=head1 OPTIONS
133
134In addition to the options below, this command also supports the
135common and client only options documented
136in the "Supported Command Line Commands" section of the L<SSL_CONF_cmd(3)>
137manual page.
138
139=over 4
140
141=item B<-help>
142
143Print out a usage message.
144
145=item B<-ssl_config> I<section>
146
147Use the specified section of the configuration file to configure the B<SSL_CTX> object.
148
149=item B<-connect> I<host>:I<port>
150
151This specifies the host and optional port to connect to. It is possible to
152select the host and port using the optional target positional argument instead.
153If neither this nor the target positional argument are specified then an attempt
154is made to connect to the local host on port 4433.
155If the host string is an IPv6 address, it must be enclosed in C<[> and C<]>.
156
157=item B<-host> I<hostname>
158
159Host to connect to; use B<-connect> instead.
160
161=item B<-port> I<port>
162
163Connect to the specified port; use B<-connect> instead.
164
165=item B<-bind> I<host>:I<port>
166
167This specifies the host address and or port to bind as the source for the
168connection.  For Unix-domain sockets the port is ignored and the host is
169used as the source socket address.
170If the host string is an IPv6 address, it must be enclosed in C<[> and C<]>.
171
172=item B<-proxy> I<host>:I<port>
173
174When used with the B<-connect> flag, the program uses the host and port
175specified with this flag and issues an HTTP CONNECT command to connect
176to the desired server.
177If the host string is an IPv6 address, it must be enclosed in C<[> and C<]>.
178
179=item B<-proxy_user> I<userid>
180
181When used with the B<-proxy> flag, the program will attempt to authenticate
182with the specified proxy using basic (base64) authentication.
183NB: Basic authentication is insecure; the credentials are sent to the proxy
184in easily reversible base64 encoding before any TLS/SSL session is established.
185Therefore, these credentials are easily recovered by anyone able to sniff/trace
186the network. Use with caution.
187
188=item B<-proxy_pass> I<arg>
189
190The proxy password source, used with the B<-proxy_user> flag.
191For more information about the format of B<arg>
192see L<openssl-passphrase-options(1)>.
193
194=item B<-unix> I<path>
195
196Connect over the specified Unix-domain socket.
197
198=item B<-4>
199
200Use IPv4 only.
201
202=item B<-6>
203
204Use IPv6 only.
205
206=item B<-quic>
207
208Connect using the QUIC protocol. If specified then the B<-alpn> option must also
209be provided.
210
211=item B<-servername> I<name>
212
213Set the TLS SNI (Server Name Indication) extension in the ClientHello message to
214the given value.
215If B<-servername> is not provided, the TLS SNI extension will be populated with
216the name given to B<-connect> if it follows a DNS name format. If B<-connect> is
217not provided either, the SNI is set to "localhost".
218This is the default since OpenSSL 1.1.1.
219
220Even though SNI should normally be a DNS name and not an IP address, if
221B<-servername> is provided then that name will be sent, regardless of whether
222it is a DNS name or not.
223
224This option cannot be used in conjunction with B<-noservername>.
225
226=item B<-noservername>
227
228Suppresses sending of the SNI (Server Name Indication) extension in the
229ClientHello message. Cannot be used in conjunction with the B<-servername> or
230B<-dane_tlsa_domain> options.
231
232=item B<-cert> I<filename>
233
234The client certificate to use, if one is requested by the server.
235The default is not to use a certificate.
236
237The chain for the client certificate may be specified using B<-cert_chain>.
238
239=item B<-certform> B<DER>|B<PEM>|B<P12>
240
241The client certificate file format to use; unspecified by default.
242See L<openssl-format-options(1)> for details.
243
244=item B<-cert_chain>
245
246A file or URI of untrusted certificates to use when attempting to build the
247certificate chain related to the certificate specified via the B<-cert> option.
248The input can be in PEM, DER, or PKCS#12 format.
249
250=item B<-build_chain>
251
252Specify whether the application should build the client certificate chain to be
253provided to the server.
254
255=item B<-CRL> I<filename>
256
257CRL file to use to check the server's certificate.
258
259=item B<-CRLform> B<DER>|B<PEM>
260
261The CRL file format; unspecified by default.
262See L<openssl-format-options(1)> for details.
263
264=item B<-crl_download>
265
266Download CRL from distribution points in the certificate. Note that this option
267is ignored if B<-crl_check> option is not provided. Note that the maximum size
268of CRL is limited by L<X509_CRL_load_http(3)> function.
269
270=item B<-key> I<filename>|I<uri>
271
272The client private key to use.
273If not specified then the certificate file will be used to read also the key.
274
275=item B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>
276
277The key format; unspecified by default.
278See L<openssl-format-options(1)> for details.
279
280=item B<-pass> I<arg>
281
282the private key and certificate file password source.
283For more information about the format of I<arg>
284see L<openssl-passphrase-options(1)>.
285
286=item B<-verify> I<depth>
287
288The verify depth to use. This specifies the maximum length of the
289server certificate chain and turns on server certificate verification.
290Unless the B<-verify_return_error> option is given,
291the verify operation continues after errors so all the problems
292with a certificate chain can be seen. As a side effect the connection
293will never fail due to a server certificate verify failure.
294
295By default, validation of server certificates and their chain
296is done w.r.t. the (D)TLS Server (C<sslserver>) purpose.
297For details see L<openssl-verification-options(1)/Certificate Extensions>.
298
299=item B<-verify_return_error>
300
301Turns on server certificate verification, like with B<-verify>,
302but returns verification errors instead of continuing.
303This will typically abort the handshake with a fatal error.
304
305=item B<-verify_quiet>
306
307Limit verify output to only errors.
308
309=item B<-verifyCAfile> I<filename>
310
311A file in PEM format containing trusted certificates to use
312for verifying the server's certificate.
313
314=item B<-verifyCApath> I<dir>
315
316A directory containing trusted certificates to use
317for verifying the server's certificate.
318This directory must be in "hash format",
319see L<openssl-verify(1)> for more information.
320
321=item B<-verifyCAstore> I<uri>
322
323The URI of a store containing trusted certificates to use
324for verifying the server's certificate.
325
326=item B<-chainCAfile> I<file>
327
328A file in PEM format containing trusted certificates to use
329when attempting to build the client certificate chain.
330
331=item B<-chainCApath> I<directory>
332
333A directory containing trusted certificates to use
334for building the client certificate chain provided to the server.
335This directory must be in "hash format",
336see L<openssl-verify(1)> for more information.
337
338=item B<-chainCAstore> I<uri>
339
340The URI of a store containing trusted certificates to use
341when attempting to build the client certificate chain.
342The URI may indicate a single certificate, as well as a collection of them.
343With URIs in the C<file:> scheme, this acts as B<-chainCAfile> or
344B<-chainCApath>, depending on if the URI indicates a directory or a
345single file.
346See L<ossl_store-file(7)> for more information on the C<file:> scheme.
347
348=item B<-requestCAfile> I<file>
349
350A file containing a list of certificates whose subject names will be sent
351to the server in the B<certificate_authorities> extension. Only supported
352for TLS 1.3
353
354=item B<-dane_tlsa_domain> I<domain>
355
356Enable RFC6698/RFC7671 DANE TLSA authentication and specify the
357TLSA base domain which becomes the default SNI hint and the primary
358reference identifier for hostname checks.  This must be used in
359combination with at least one instance of the B<-dane_tlsa_rrdata>
360option below.
361
362When DANE authentication succeeds, the diagnostic output will include
363the lowest (closest to 0) depth at which a TLSA record authenticated
364a chain certificate.  When that TLSA record is a "2 1 0" trust
365anchor public key that signed (rather than matched) the top-most
366certificate of the chain, the result is reported as "TA public key
367verified".  Otherwise, either the TLSA record "matched TA certificate"
368at a positive depth or else "matched EE certificate" at depth 0.
369
370=item B<-dane_tlsa_rrdata> I<rrdata>
371
372Use one or more times to specify the RRDATA fields of the DANE TLSA
373RRset associated with the target service.  The I<rrdata> value is
374specified in "presentation form", that is four whitespace separated
375fields that specify the usage, selector, matching type and associated
376data, with the last of these encoded in hexadecimal.  Optional
377whitespace is ignored in the associated data field.  For example:
378
379  $ openssl s_client -brief -starttls smtp \
380    -connect smtp.example.com:25 \
381    -dane_tlsa_domain smtp.example.com \
382    -dane_tlsa_rrdata "2 1 1
383      B111DD8A1C2091A89BD4FD60C57F0716CCE50FEEFF8137CDBEE0326E 02CF362B" \
384    -dane_tlsa_rrdata "2 1 1
385      60B87575447DCBA2A36B7D11AC09FB24A9DB406FEE12D2CC90180517 616E8A18"
386  ...
387  Verification: OK
388  Verified peername: smtp.example.com
389  DANE TLSA 2 1 1 ...ee12d2cc90180517616e8a18 matched TA certificate at depth 1
390  ...
391
392=item B<-dane_ee_no_namechecks>
393
394This disables server name checks when authenticating via DANE-EE(3) TLSA
395records.
396For some applications, primarily web browsers, it is not safe to disable name
397checks due to "unknown key share" attacks, in which a malicious server can
398convince a client that a connection to a victim server is instead a secure
399connection to the malicious server.
400The malicious server may then be able to violate cross-origin scripting
401restrictions.
402Thus, despite the text of RFC7671, name checks are by default enabled for
403DANE-EE(3) TLSA records, and can be disabled in applications where it is safe
404to do so.
405In particular, SMTP and XMPP clients should set this option as SRV and MX
406records already make it possible for a remote domain to redirect client
407connections to any server of its choice, and in any case SMTP and XMPP clients
408do not execute scripts downloaded from remote servers.
409
410=item B<-reconnect>
411
412Reconnects to the same server 5 times using the same session ID, this can
413be used as a test that session caching is working.
414
415=item B<-showcerts>
416
417Displays the server certificate list as sent by the server: it only consists of
418certificates the server has sent (in the order the server has sent them). It is
419B<not> a verified chain.
420
421=item B<-prexit>
422
423Print session information when the program exits. This will always attempt
424to print out information even if the connection fails. Normally information
425will only be printed out once if the connection succeeds. This option is useful
426because the cipher in use may be renegotiated or the connection may fail
427because a client certificate is required or is requested only after an
428attempt is made to access a certain URL. Note: the output produced by this
429option is not always accurate because a connection might never have been
430established.
431
432=item B<-no-interactive>
433
434This flag can be used to run the client in a non-interactive mode.
435
436=item B<-state>
437
438Prints out the SSL session states.
439
440=item B<-debug>
441
442Print extensive debugging information including a hex dump of all traffic.
443
444=item B<-nocommands>
445
446Do not use interactive command letters.
447
448=item B<-adv>
449
450Use advanced command mode.
451
452=item B<-security_debug>
453
454Enable security debug messages.
455
456=item B<-security_debug_verbose>
457
458Output more security debug output.
459
460=item B<-msg>
461
462Show protocol messages.
463
464=item B<-timeout>
465
466Enable send/receive timeout on DTLS connections.
467
468=item B<-mtu> I<size>
469
470Set MTU of the link layer to the specified size.
471
472=item B<-no_ems>
473
474Disable Extended master secret negotiation.
475
476=item B<-keymatexport> I<label>
477
478Export keying material using the specified label.
479
480=item B<-keymatexportlen> I<len>
481
482Export the specified number of bytes of keying material; default is 20.
483
484Show all protocol messages with hex dump.
485
486=item B<-trace>
487
488Show verbose trace output of protocol messages.
489
490=item B<-msgfile> I<filename>
491
492File to send output of B<-msg> or B<-trace> to, default standard output.
493
494=item B<-nbio_test>
495
496Tests nonblocking I/O
497
498=item B<-nbio>
499
500Turns on nonblocking I/O
501
502=item B<-crlf>
503
504This option translated a line feed from the terminal into CR+LF as required
505by some servers.
506
507=item B<-ign_eof>
508
509Inhibit shutting down the connection when end of file is reached in the
510input. This implicitly turns on B<-nocommands> as well.
511
512=item B<-quiet>
513
514Inhibit printing of session and certificate information.  This implicitly
515turns on B<-ign_eof> and B<-nocommands> as well.
516
517=item B<-no_ign_eof>
518
519Shut down the connection when end of file is reached in the input.
520Can be used to override the implicit B<-ign_eof> after B<-quiet>.
521
522=item B<-psk_identity> I<identity>
523
524Use the PSK identity I<identity> when using a PSK cipher suite.
525The default value is "Client_identity" (without the quotes).
526
527=item B<-psk> I<key>
528
529Use the PSK key I<key> when using a PSK cipher suite. The key is
530given as a hexadecimal number without leading 0x, for example -psk
5311a2b3c4d.
532This option must be provided in order to use a PSK cipher.
533
534=item B<-psk_session> I<file>
535
536Use the pem encoded SSL_SESSION data stored in I<file> as the basis of a PSK.
537Note that this will only work if TLSv1.3 is negotiated.
538
539=item B<-sctp>
540
541Use SCTP for the transport protocol instead of UDP in DTLS. Must be used in
542conjunction with B<-dtls>, B<-dtls1> or B<-dtls1_2>. This option is only
543available where OpenSSL has support for SCTP enabled.
544
545=item B<-sctp_label_bug>
546
547Use the incorrect behaviour of older OpenSSL implementations when computing
548endpoint-pair shared secrets for DTLS/SCTP. This allows communication with
549older broken implementations but breaks interoperability with correct
550implementations. Must be used in conjunction with B<-sctp>. This option is only
551available where OpenSSL has support for SCTP enabled.
552
553=item B<-fallback_scsv>
554
555Send TLS_FALLBACK_SCSV in the ClientHello.
556
557=item B<-async>
558
559Switch on asynchronous mode. Cryptographic operations will be performed
560asynchronously. This will only have an effect if an asynchronous capable engine
561is also used via the B<-engine> option. For test purposes the dummy async engine
562(dasync) can be used (if available).
563
564=item B<-maxfraglen> I<len>
565
566Enable Maximum Fragment Length Negotiation; allowed values are
567C<512>, C<1024>, C<2048>, and C<4096>.
568
569=item B<-max_send_frag> I<int>
570
571The maximum size of data fragment to send.
572See L<SSL_CTX_set_max_send_fragment(3)> for further information.
573
574=item B<-split_send_frag> I<int>
575
576The size used to split data for encrypt pipelines. If more data is written in
577one go than this value then it will be split into multiple pipelines, up to the
578maximum number of pipelines defined by max_pipelines. This only has an effect if
579a suitable cipher suite has been negotiated, an engine that supports pipelining
580has been loaded, and max_pipelines is greater than 1. See
581L<SSL_CTX_set_split_send_fragment(3)> for further information.
582
583=item B<-max_pipelines> I<int>
584
585The maximum number of encrypt/decrypt pipelines to be used. This will only have
586an effect if an engine has been loaded that supports pipelining (e.g. the dasync
587engine) and a suitable cipher suite has been negotiated. The default value is 1.
588See L<SSL_CTX_set_max_pipelines(3)> for further information.
589
590=item B<-read_buf> I<int>
591
592The default read buffer size to be used for connections. This will only have an
593effect if the buffer size is larger than the size that would otherwise be used
594and pipelining is in use (see L<SSL_CTX_set_default_read_buffer_len(3)> for
595further information).
596
597=item B<-ignore_unexpected_eof>
598
599Some TLS implementations do not send the mandatory close_notify alert on
600shutdown. If the application tries to wait for the close_notify alert but the
601peer closes the connection without sending it, an error is generated. When this
602option is enabled the peer does not need to send the close_notify alert and a
603closed connection will be treated as if the close_notify alert was received.
604For more information on shutting down a connection, see L<SSL_shutdown(3)>.
605
606=item B<-no_tx_cert_comp>
607
608Disables support for sending TLSv1.3 compressed certificates.
609
610=item B<-no_rx_cert_comp>
611
612Disables support for receiving TLSv1.3 compressed certificate.
613
614=item B<-brief>
615
616Only provide a brief summary of connection parameters instead of the
617normal verbose output.
618
619=item B<-starttls> I<protocol>
620
621Send the protocol-specific message(s) to switch to TLS for communication.
622I<protocol> is a keyword for the intended protocol.  Currently, the only
623supported keywords are "smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server",
624"irc", "postgres", "mysql", "lmtp", "nntp", "sieve" and "ldap".
625
626=item B<-xmpphost> I<hostname>
627
628This option, when used with "-starttls xmpp" or "-starttls xmpp-server",
629specifies the host for the "to" attribute of the stream element.
630If this option is not specified, then the host specified with "-connect"
631will be used.
632
633This option is an alias of the B<-name> option for "xmpp" and "xmpp-server".
634
635=item B<-name> I<hostname>
636
637This option is used to specify hostname information for various protocols
638used with B<-starttls> option. Currently only "xmpp", "xmpp-server",
639"smtp" and "lmtp" can utilize this B<-name> option.
640
641If this option is used with "-starttls xmpp" or "-starttls xmpp-server",
642if specifies the host for the "to" attribute of the stream element. If this
643option is not specified, then the host specified with "-connect" will be used.
644
645If this option is used with "-starttls lmtp" or "-starttls smtp", it specifies
646the name to use in the "LMTP LHLO" or "SMTP EHLO" message, respectively. If
647this option is not specified, then "mail.example.com" will be used.
648
649=item B<-tlsextdebug>
650
651Print out a hex dump of any TLS extensions received from the server.
652
653=item B<-sess_out> I<filename>
654
655Output SSL session to I<filename>.
656
657=item B<-sess_in> I<filename>
658
659Load SSL session from I<filename>. The client will attempt to resume a
660connection from this session.
661
662=item B<-serverinfo> I<types>
663
664A list of comma-separated TLS Extension Types (numbers between 0 and
66565535).  Each type will be sent as an empty ClientHello TLS Extension.
666The server's response (if any) will be encoded and displayed as a PEM
667file.
668
669=item B<-status>
670
671Sends a certificate status request to the server (OCSP stapling). The server
672response (if any) is printed out.
673
674=item B<-alpn> I<protocols>, B<-nextprotoneg> I<protocols>
675
676These flags enable the Enable the Application-Layer Protocol Negotiation
677or Next Protocol Negotiation (NPN) extension, respectively. ALPN is the
678IETF standard and replaces NPN.
679The I<protocols> list is a comma-separated list of protocol names that
680the client should advertise support for. The list should contain the most
681desirable protocols first.  Protocol names are printable ASCII strings,
682for example "http/1.1" or "spdy/3".
683An empty list of protocols is treated specially and will cause the
684client to advertise support for the TLS extension but disconnect just
685after receiving ServerHello with a list of server supported protocols.
686The flag B<-nextprotoneg> cannot be specified if B<-tls1_3> is used.
687
688=item B<-ct>, B<-noct>
689
690Use one of these two options to control whether Certificate Transparency (CT)
691is enabled (B<-ct>) or disabled (B<-noct>).
692If CT is enabled, signed certificate timestamps (SCTs) will be requested from
693the server and reported at handshake completion.
694
695Enabling CT also enables OCSP stapling, as this is one possible delivery method
696for SCTs.
697
698=item B<-ctlogfile>
699
700A file containing a list of known Certificate Transparency logs. See
701L<SSL_CTX_set_ctlog_list_file(3)> for the expected file format.
702
703=item B<-keylogfile> I<file>
704
705Appends TLS secrets to the specified keylog file such that external programs
706(like Wireshark) can decrypt TLS connections.
707
708=item B<-early_data> I<file>
709
710Reads the contents of the specified file and attempts to send it as early data
711to the server. This will only work with resumed sessions that support early
712data and when the server accepts the early data.
713
714=item B<-enable_pha>
715
716For TLSv1.3 only, send the Post-Handshake Authentication extension. This will
717happen whether or not a certificate has been provided via B<-cert>.
718
719=item B<-use_srtp> I<value>
720
721Offer SRTP key management, where B<value> is a colon-separated profile list.
722
723=item B<-srpuser> I<value>
724
725Set the SRP username to the specified value. This option is deprecated.
726
727=item B<-srppass> I<value>
728
729Set the SRP password to the specified value. This option is deprecated.
730
731=item B<-srp_lateuser>
732
733SRP username for the second ClientHello message. This option is deprecated.
734
735=item B<-srp_moregroups>  This option is deprecated.
736
737Tolerate other than the known B<g> and B<N> values.
738
739=item B<-srp_strength> I<number>
740
741Set the minimal acceptable length, in bits, for B<N>.  This option is
742deprecated.
743
744=item B<-ktls>
745
746Enable Kernel TLS for sending and receiving.
747This option was introduced in OpenSSL 3.2.0.
748Kernel TLS is off by default as of OpenSSL 3.2.0.
749
750=item B<-tfo>
751
752Enable creation of connections via TCP fast open (RFC7413).
753
754{- $OpenSSL::safe::opt_version_item -}
755
756{- $OpenSSL::safe::opt_name_item -}
757
758{- $OpenSSL::safe::opt_x_item -}
759
760{- $OpenSSL::safe::opt_trust_item -}
761
762{- $OpenSSL::safe::opt_s_item -}
763
764{- $OpenSSL::safe::opt_r_item -}
765
766{- $OpenSSL::safe::opt_provider_item -}
767
768{- $OpenSSL::safe::opt_engine_item -}
769
770{- output_off() if $disabled{"deprecated-3.0"}; "" -}
771=item B<-ssl_client_engine> I<id>
772
773Specify engine to be used for client certificate operations.
774{- output_on() if $disabled{"deprecated-3.0"}; "" -}
775
776{- $OpenSSL::safe::opt_v_item -}
777
778Verification errors are displayed, for debugging, but the command will
779proceed unless the B<-verify_return_error> option is used.
780
781=item B<-enable_server_rpk>
782
783Enable support for receiving raw public keys (RFC7250) from the server.
784Use of X.509 certificates by the server becomes optional, and servers that
785support raw public keys may elect to use them.
786Servers that don't support raw public keys or prefer to use X.509
787certificates can still elect to send X.509 certificates as usual.
788
789=item B<-enable_client_rpk>
790
791Enable support for sending raw public keys (RFC7250) to the server.
792A raw public key will be sent by the client, if solicited by the server,
793provided a suitable key and public certificate pair is configured.
794Some servers may nevertheless not request any client credentials,
795or may request a certificate.
796
797=item I<host>:I<port>
798
799Rather than providing B<-connect>, the target host and optional port may
800be provided as a single positional argument after all options. If neither this
801nor B<-connect> are provided, falls back to attempting to connect to
802I<localhost> on port I<4433>.
803If the host string is an IPv6 address, it must be enclosed in C<[> and C<]>.
804
805=back
806
807=head1 CONNECTED COMMANDS (BASIC)
808
809If a connection is established with an SSL/TLS server then any data received
810from the server is displayed and any key presses will be sent to the
811server. If end of file is reached then the connection will be closed down.
812
813When used interactively (which means neither B<-quiet> nor B<-ign_eof> have been
814given), and neither of B<-adv> or B<-nocommands> are given then "Basic" command
815mode is entered. In this mode certain commands are recognized which perform
816special operations. These commands are a letter which must appear at the start
817of a line. All further data after the initial letter on the line is ignored.
818The commands are listed below.
819
820=over 4
821
822=item B<Q>
823
824End the current SSL connection and exit.
825
826=item B<R>
827
828Renegotiate the SSL session (TLSv1.2 and below only).
829
830=item B<C>
831
832Attempt to reconnect to the server using a resumption handshake.
833
834=item B<k>
835
836Send a key update message to the server (TLSv1.3 only)
837
838=item B<K>
839
840Send a key update message to the server and request one back (TLSv1.3 only)
841
842=back
843
844=head1 CONNECTED COMMANDS (ADVANCED)
845
846If B<-adv> has been given then "advanced" command mode is entered. As with basic
847mode, if a connection is established with an SSL/TLS server then any data
848received from the server is displayed and any key presses will be sent to the
849server. If end of file is reached then the connection will be closed down.
850
851Special commands can be supplied by enclosing them in braces, e.g. "{help}" or
852"{quit}". These commands can appear anywhere in the text entered into s_client,
853but they are not sent to the server. Some commands can take an argument by
854ending the command name with ":" and then providing the argument, e.g.
855"{keyup:req}". Some commands are only available when certain protocol versions
856have been negotiated.
857
858If a newline appears at the end of a line entered into s_client then this is
859also sent to the server. If a command appears on a line on its own with no other
860text on the same line, then the newline is suppressed and not sent to the
861server.
862
863The following commands are recognised.
864
865=over 4
866
867=item B<help>
868
869Prints out summary help text about the available commands.
870
871=item B<quit>
872
873Close the connection to the peer
874
875=item B<reconnect>
876
877Reconnect to the peer and attempt a resumption handshake
878
879=item B<keyup>
880
881Send a Key Update message. TLSv1.3 only. This command takes an optional
882argument. If the argument "req" is supplied then the peer is also requested to
883update its keys. Otherwise if "noreq" is supplied the peer is not requested
884to update its keys. The default is "req".
885
886=item B<reneg>
887
888Initiate a renegotiation with the server. (D)TLSv1.2 or below only.
889
890=item B<fin>
891
892Indicate FIN on the current stream. QUIC only. Once FIN has been sent any
893further text entered for this stream is ignored.
894
895=back
896
897=head1 NOTES
898
899This command can be used to debug SSL servers. To connect to an SSL HTTP
900server the command:
901
902 openssl s_client -connect servername:443
903
904would typically be used (https uses port 443). If the connection succeeds
905then an HTTP command can be given such as "GET /" to retrieve a web page.
906
907If the handshake fails then there are several possible causes, if it is
908nothing obvious like no client certificate then the B<-bugs>,
909B<-ssl3>, B<-tls1>, B<-no_ssl3>, B<-no_tls1> options can be tried
910in case it is a buggy server. In particular you should play with these
911options B<before> submitting a bug report to an OpenSSL mailing list.
912
913A frequent problem when attempting to get client certificates working
914is that a web client complains it has no certificates or gives an empty
915list to choose from. This is normally because the server is not sending
916the clients certificate authority in its "acceptable CA list" when it
917requests a certificate. By using this command, the CA list can be viewed
918and checked. However, some servers only request client authentication
919after a specific URL is requested. To obtain the list in this case it
920is necessary to use the B<-prexit> option and send an HTTP request
921for an appropriate page.
922
923If a certificate is specified on the command line using the B<-cert>
924option it will not be used unless the server specifically requests
925a client certificate. Therefore, merely including a client certificate
926on the command line is no guarantee that the certificate works.
927
928If there are problems verifying a server certificate then the
929B<-showcerts> option can be used to show all the certificates sent by the
930server.
931
932This command is a test tool and is designed to continue the
933handshake after any certificate verification errors. As a result it will
934accept any certificate chain (trusted or not) sent by the peer. Non-test
935applications should B<not> do this as it makes them vulnerable to a MITM
936attack. This behaviour can be changed by with the B<-verify_return_error>
937option: any verify errors are then returned aborting the handshake.
938
939The B<-bind> option may be useful if the server or a firewall requires
940connections to come from some particular address and or port.
941
942=head2 Note on Non-Interactive Use
943
944When B<s_client> is run in a non-interactive environment (e.g., a cron job or
945a script without a valid I<stdin>), it may close the connection prematurely,
946especially with TLS 1.3. To prevent this, you can use the B<-ign_eof> flag,
947which keeps B<s_client> running even after reaching EOF from I<stdin>.
948
949For example:
950
951 openssl s_client -connect <server address>:443 -tls1_3
952                  -sess_out /path/to/tls_session_params_file
953                  -ign_eof </dev/null
954
955However, relying solely on B<-ign_eof> can lead to issues if the server keeps
956the connection open, expecting the client to close first. In such cases, the
957client may hang indefinitely. This behavior is not uncommon, particularly with
958protocols where the server waits for a graceful disconnect from the client.
959
960For example, when connecting to an SMTP server, the session may pause if the
961server expects a QUIT command before closing:
962
963 $ openssl s_client -brief -ign_eof -starttls smtp
964                    -connect <server address>:25 </dev/null
965 CONNECTION ESTABLISHED
966 Protocol version: TLSv1.3
967 Ciphersuite: TLS_AES_256_GCM_SHA384
968 ...
969 250 CHUNKING
970 [long pause]
971
972To avoid such hangs, it's better to use an application-level command to
973initiate a clean disconnect. For SMTP, you can send a QUIT command:
974
975 printf 'QUIT\r\n' | openssl s_client -connect <server address>:25
976                                      -starttls smtp -brief -ign_eof
977
978Similarly, for HTTP/1.1 connections, including a `Connection: close` header
979ensures the server closes the connection after responding:
980
981 printf 'GET / HTTP/1.1\r\nHost: <server address>\r\nConnection: close\r\n\r\n'
982     | openssl s_client -connect <server address>:443 -brief
983
984These approaches help manage the connection closure gracefully and prevent
985hangs caused by the server waiting for the client to initiate the disconnect.
986
987=head1 BUGS
988
989Because this program has a lot of options and also because some of the
990techniques used are rather old, the C source for this command is rather
991hard to read and not a model of how things should be done.
992A typical SSL client program would be much simpler.
993
994The B<-prexit> option is a bit of a hack. We should really report
995information whenever a session is renegotiated.
996
997=head1 SEE ALSO
998
999L<openssl(1)>,
1000L<openssl-sess_id(1)>,
1001L<openssl-s_server(1)>,
1002L<openssl-ciphers(1)>,
1003L<SSL_CONF_cmd(3)>,
1004L<SSL_CTX_set_max_send_fragment(3)>,
1005L<SSL_CTX_set_split_send_fragment(3)>,
1006L<SSL_CTX_set_max_pipelines(3)>,
1007L<ossl_store-file(7)>
1008
1009=head1 HISTORY
1010
1011The B<-no_alt_chains> option was added in OpenSSL 1.1.0.
1012The B<-name> option was added in OpenSSL 1.1.1.
1013
1014The B<-certform> option has become obsolete in OpenSSL 3.0.0 and has no effect.
1015
1016The B<-engine> option was deprecated in OpenSSL 3.0.
1017
1018The
1019B<-enable_client_rpk>,
1020B<-enable_server_rpk>,
1021B<-no_rx_cert_comp>,
1022B<-no_tx_cert_comp>,
1023and B<-tfo>
1024options were added in OpenSSL 3.2.
1025
1026=head1 COPYRIGHT
1027
1028Copyright 2000-2025 The OpenSSL Project Authors. All Rights Reserved.
1029
1030Licensed under the Apache License 2.0 (the "License").  You may not use
1031this file except in compliance with the License.  You can obtain a copy
1032in the file LICENSE in the source distribution or at
1033L<https://www.openssl.org/source/license.html>.
1034
1035=cut
1036