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