]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man1/s_client.pod
Remove non-accurate description in Configure script
[thirdparty/openssl.git] / doc / man1 / s_client.pod
CommitLineData
c3ed3b6e
DSH
1=pod
2
3=head1 NAME
4
5s_client - SSL/TLS client program
6
7=head1 SYNOPSIS
8
9B<openssl> B<s_client>
169394d4 10[B<-help>]
a32fc687 11[B<-connect host:port>]
552bf8ec 12[B<-proxy host:port>]
a22f9c84
E
13[B<-unix path>]
14[B<-4>]
15[B<-6>]
fc1d88f0 16[B<-servername name>]
11ba87f2 17[B<-noservername>]
b46c3e9b 18[B<-verify depth>]
4e6c12f3 19[B<-verify_return_error>]
c3ed3b6e 20[B<-cert filename>]
826a42a0 21[B<-certform DER|PEM>]
c3ed3b6e 22[B<-key filename>]
826a42a0
DSH
23[B<-keyform DER|PEM>]
24[B<-pass arg>]
c3ed3b6e
DSH
25[B<-CApath directory>]
26[B<-CAfile filename>]
40e2d76b
MC
27[B<-no-CAfile>]
28[B<-no-CApath>]
5a185729 29[B<-requestCAfile filename>]
cddd424a
VD
30[B<-dane_tlsa_domain domain>]
31[B<-dane_tlsa_rrdata rrdata>]
c4fbed6c 32[B<-dane_ee_no_namechecks>]
e42d84be
HK
33[B<-attime timestamp>]
34[B<-check_ss_sig>]
35[B<-crl_check>]
36[B<-crl_check_all>]
37[B<-explicit_policy>]
38[B<-extended_crl>]
39[B<-ignore_critical>]
40[B<-inhibit_any>]
41[B<-inhibit_map>]
5a1f853b 42[B<-no_check_time>]
e42d84be
HK
43[B<-partial_chain>]
44[B<-policy arg>]
45[B<-policy_check>]
46[B<-policy_print>]
47[B<-purpose purpose>]
48[B<-suiteB_128>]
49[B<-suiteB_128_only>]
50[B<-suiteB_192>]
51[B<-trusted_first>]
fa7b0111 52[B<-no_alt_chains>]
e42d84be 53[B<-use_deltas>]
fbb82a60 54[B<-auth_level num>]
a7c04f2b 55[B<-nameopt option>]
e42d84be
HK
56[B<-verify_depth num>]
57[B<-verify_email email>]
58[B<-verify_hostname hostname>]
59[B<-verify_ip ip>]
60[B<-verify_name name>]
61[B<-x509_strict>]
c3ed3b6e 62[B<-reconnect>]
c3ed3b6e
DSH
63[B<-showcerts>]
64[B<-debug>]
1d8634b1 65[B<-msg>]
c3ed3b6e
DSH
66[B<-nbio_test>]
67[B<-state>]
68[B<-nbio>]
69[B<-crlf>]
ce301b6b 70[B<-ign_eof>]
fc1d88f0 71[B<-no_ign_eof>]
c3ed3b6e 72[B<-quiet>]
c3ed3b6e
DSH
73[B<-ssl3>]
74[B<-tls1>]
8c73aeb6
VD
75[B<-tls1_1>]
76[B<-tls1_2>]
582a17d6 77[B<-tls1_3>]
c3ed3b6e
DSH
78[B<-no_ssl3>]
79[B<-no_tls1>]
fb0e87fb
BM
80[B<-no_tls1_1>]
81[B<-no_tls1_2>]
582a17d6 82[B<-no_tls1_3>]
8c73aeb6
VD
83[B<-dtls>]
84[B<-dtls1>]
85[B<-dtls1_2>]
19044d3c 86[B<-sctp>]
fb0e87fb 87[B<-fallback_scsv>]
bc8857bf 88[B<-async>]
28e5ea88 89[B<-max_send_frag>]
0df80881
MC
90[B<-split_send_frag>]
91[B<-max_pipelines>]
92[B<-read_buf>]
c3ed3b6e 93[B<-bugs>]
cc5a9ba4
VD
94[B<-comp>]
95[B<-no_comp>]
254b58fd
SC
96[B<-sigalgs sigalglist>]
97[B<-curves curvelist>]
c3ed3b6e 98[B<-cipher cipherlist>]
fc1d88f0 99[B<-serverpref>]
e986704d 100[B<-starttls protocol>]
b98af49d 101[B<-xmpphost hostname>]
5270e702 102[B<-engine id>]
d24a9c8f
DSH
103[B<-tlsextdebug>]
104[B<-no_ticket>]
105[B<-sess_out filename>]
106[B<-sess_in filename>]
52b621db 107[B<-rand file(s)>]
9cd50f73 108[B<-serverinfo types>]
cba3f1c7 109[B<-status>]
776e15f9 110[B<-alpn protocols>]
7efd0e77 111[B<-nextprotoneg protocols>]
43341433 112[B<-ct|noct>]
eb64a6c6 113[B<-ctlogfile>]
6437b802
MC
114[B<-keylogfile file>]
115[B<-early_data file>]
c3ed3b6e
DSH
116
117=head1 DESCRIPTION
118
119The B<s_client> command implements a generic SSL/TLS client which connects
120to a remote host using SSL/TLS. It is a I<very> useful diagnostic tool for
121SSL servers.
122
123=head1 OPTIONS
124
765b4137
DSH
125In addition to the options below the B<s_client> utility also supports the
126common and client only options documented in the
6f0ac0e2 127in the "Supported Command Line Commands" section of the L<SSL_CONF_cmd(3)>
13cfb043 128manual page.
765b4137 129
c3ed3b6e
DSH
130=over 4
131
169394d4
MR
132=item B<-help>
133
134Print out a usage message.
135
c3ed3b6e
DSH
136=item B<-connect host:port>
137
138This specifies the host and optional port to connect to. If not specified
139then an attempt is made to connect to the local host on port 4433.
140
552bf8ec
MT
141=item B<-proxy host:port>
142
143When used with the B<-connect> flag, the program uses the host and port
144specified with this flag and issues an HTTP CONNECT command to connect
145to the desired server.
146
a22f9c84
E
147=item B<-unix path>
148
149Connect over the specified Unix-domain socket.
150
151=item B<-4>
152
153Use IPv4 only.
154
155=item B<-6>
156
157Use IPv6 only.
158
fc1d88f0
RS
159=item B<-servername name>
160
11ba87f2 161Set the TLS SNI (Server Name Indication) extension in the ClientHello message to
481afe2a
PY
162the given value. If both this option and the B<-noservername> are not given, the
163TLS SNI extension is still set to the hostname provided to the B<-connect> option,
164or "localhost" if B<-connect> has not been supplied. This is default since OpenSSL
1651.1.1.
166
167Even though SNI name should normally be a DNS name and not an IP address, this
168option will not make the distinction when parsing B<-connect> and will send
169IP address if one passed.
11ba87f2
MC
170
171=item B<-noservername>
172
173Suppresses sending of the SNI (Server Name Indication) extension in the
174ClientHello message. Cannot be used in conjunction with the B<-servername> or
481afe2a 175<-dane_tlsa_domain> options.
fc1d88f0 176
c3ed3b6e
DSH
177=item B<-cert certname>
178
179The certificate to use, if one is requested by the server. The default is
180not to use a certificate.
181
826a42a0
DSH
182=item B<-certform format>
183
184The certificate format to use: DER or PEM. PEM is the default.
185
c3ed3b6e
DSH
186=item B<-key keyfile>
187
188The private key to use. If not specified then the certificate file will
189be used.
190
826a42a0
DSH
191=item B<-keyform format>
192
193The private format to use: DER or PEM. PEM is the default.
194
195=item B<-pass arg>
196
197the private key password source. For more information about the format of B<arg>
9b86974e 198see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)>.
826a42a0 199
c3ed3b6e
DSH
200=item B<-verify depth>
201
202The verify depth to use. This specifies the maximum length of the
203server certificate chain and turns on server certificate verification.
204Currently the verify operation continues after errors so all the problems
205with a certificate chain can be seen. As a side effect the connection
206will never fail due to a server certificate verify failure.
207
4e6c12f3
DSH
208=item B<-verify_return_error>
209
210Return verification errors instead of continuing. This will typically
211abort the handshake with a fatal error.
212
a7c04f2b
DB
213=item B<-nameopt option>
214
c4de074e 215Option which determines how the subject or issuer names are displayed. The
a7c04f2b
DB
216B<option> argument can be a single option or multiple options separated by
217commas. Alternatively the B<-nameopt> switch may be used more than once to
218set multiple options. See the L<x509(1)> manual page for details.
219
c3ed3b6e
DSH
220=item B<-CApath directory>
221
222The directory to use for server certificate verification. This directory
223must be in "hash format", see B<verify> for more information. These are
224also used when building the client certificate chain.
225
226=item B<-CAfile file>
227
228A file containing trusted certificates to use during server authentication
229and to use when attempting to build the client certificate chain.
230
40e2d76b
MC
231=item B<-no-CAfile>
232
233Do not load the trusted CA certificates from the default file location
234
235=item B<-no-CApath>
236
237Do not load the trusted CA certificates from the default directory location
238
5a185729
DSH
239=item B<-requestCAfile file>
240
241A file containing a list of certificates whose subject names will be sent
242to the server in the B<certificate_authorities> extension. Only supported
243for TLS 1.3
244
cddd424a
VD
245=item B<-dane_tlsa_domain domain>
246
247Enable RFC6698/RFC7671 DANE TLSA authentication and specify the
248TLSA base domain which becomes the default SNI hint and the primary
249reference identifier for hostname checks. This must be used in
250combination with at least one instance of the B<-dane_tlsa_rrdata>
251option below.
252
253When DANE authentication succeeds, the diagnostic output will include
254the lowest (closest to 0) depth at which a TLSA record authenticated
255a chain certificate. When that TLSA record is a "2 1 0" trust
256anchor public key that signed (rather than matched) the top-most
257certificate of the chain, the result is reported as "TA public key
258verified". Otherwise, either the TLSA record "matched TA certificate"
259at a positive depth or else "matched EE certificate" at depth 0.
260
261=item B<-dane_tlsa_rrdata rrdata>
262
263Use one or more times to specify the RRDATA fields of the DANE TLSA
264RRset associated with the target service. The B<rrdata> value is
265specied in "presentation form", that is four whitespace separated
266fields that specify the usage, selector, matching type and associated
267data, with the last of these encoded in hexadecimal. Optional
268whitespace is ignored in the associated data field. For example:
269
c0a445a9
VD
270 $ openssl s_client -brief -starttls smtp \
271 -connect smtp.example.com:25 \
cddd424a
VD
272 -dane_tlsa_domain smtp.example.com \
273 -dane_tlsa_rrdata "2 1 1
274 B111DD8A1C2091A89BD4FD60C57F0716CCE50FEEFF8137CDBEE0326E 02CF362B" \
275 -dane_tlsa_rrdata "2 1 1
276 60B87575447DCBA2A36B7D11AC09FB24A9DB406FEE12D2CC90180517 616E8A18"
cddd424a 277 ...
c0a445a9 278 Verification: OK
cddd424a 279 Verified peername: smtp.example.com
c0a445a9 280 DANE TLSA 2 1 1 ...ee12d2cc90180517616e8a18 matched TA certificate at depth 1
cddd424a
VD
281 ...
282
c4fbed6c
VD
283=item B<-dane_ee_no_namechecks>
284
285This disables server name checks when authenticating via DANE-EE(3) TLSA
286records.
287For some applications, primarily web browsers, it is not safe to disable name
288checks due to "unknown key share" attacks, in which a malicious server can
289convince a client that a connection to a victim server is instead a secure
290connection to the malicious server.
291The malicious server may then be able to violate cross-origin scripting
292restrictions.
293Thus, despite the text of RFC7671, name checks are by default enabled for
294DANE-EE(3) TLSA records, and can be disabled in applications where it is safe
295to do so.
296In particular, SMTP and XMPP clients should set this option as SRV and MX
297records already make it possible for a remote domain to redirect client
298connections to any server of its choice, and in any case SMTP and XMPP clients
299do not execute scripts downloaded from remote servers.
300
e42d84be 301=item B<-attime>, B<-check_ss_sig>, B<-crl_check>, B<-crl_check_all>,
d33def66 302B<-explicit_policy>, B<-extended_crl>, B<-ignore_critical>, B<-inhibit_any>,
5a1f853b 303B<-inhibit_map>, B<-no_alt_chains>, B<-no_check_time>, B<-partial_chain>, B<-policy>,
e42d84be 304B<-policy_check>, B<-policy_print>, B<-purpose>, B<-suiteB_128>,
d33def66 305B<-suiteB_128_only>, B<-suiteB_192>, B<-trusted_first>, B<-use_deltas>,
fbb82a60
VD
306B<-auth_level>, B<-verify_depth>, B<-verify_email>, B<-verify_hostname>,
307B<-verify_ip>, B<-verify_name>, B<-x509_strict>
e5fa864f 308
fa7b0111 309Set various certificate chain validation options. See the
9b86974e 310L<verify(1)> manual page for details.
e5fa864f 311
c3ed3b6e
DSH
312=item B<-reconnect>
313
c4de074e 314Reconnects to the same server 5 times using the same session ID, this can
c3ed3b6e
DSH
315be used as a test that session caching is working.
316
c3ed3b6e
DSH
317=item B<-showcerts>
318
c4de074e 319Display the whole server certificate chain: normally only the server
c3ed3b6e
DSH
320certificate itself is displayed.
321
322=item B<-prexit>
323
c4de074e 324Print session information when the program exits. This will always attempt
c3ed3b6e
DSH
325to print out information even if the connection fails. Normally information
326will only be printed out once if the connection succeeds. This option is useful
327because the cipher in use may be renegotiated or the connection may fail
328because a client certificate is required or is requested only after an
329attempt is made to access a certain URL. Note: the output produced by this
330option is not always accurate because a connection might never have been
331established.
332
333=item B<-state>
334
c4de074e 335Prints out the SSL session states.
c3ed3b6e
DSH
336
337=item B<-debug>
338
c4de074e 339Print extensive debugging information including a hex dump of all traffic.
c3ed3b6e 340
1d8634b1
BM
341=item B<-msg>
342
c4de074e 343Show all protocol messages with hex dump.
1d8634b1 344
8dbeb110
DSH
345=item B<-trace>
346
c4de074e 347Show verbose trace output of protocol messages. OpenSSL needs to be compiled
8dbeb110
DSH
348with B<enable-ssl-trace> for this option to work.
349
350=item B<-msgfile>
351
c4de074e 352File to send output of B<-msg> or B<-trace> to, default standard output.
8dbeb110 353
c3ed3b6e
DSH
354=item B<-nbio_test>
355
c4de074e 356Tests non-blocking I/O
c3ed3b6e
DSH
357
358=item B<-nbio>
359
c4de074e 360Turns on non-blocking I/O
c3ed3b6e
DSH
361
362=item B<-crlf>
363
c4de074e 364This option translated a line feed from the terminal into CR+LF as required
c3ed3b6e
DSH
365by some servers.
366
ce301b6b
RL
367=item B<-ign_eof>
368
c4de074e 369Inhibit shutting down the connection when end of file is reached in the
ce301b6b
RL
370input.
371
c3ed3b6e
DSH
372=item B<-quiet>
373
c4de074e 374Inhibit printing of session and certificate information. This implicitly
ce301b6b 375turns on B<-ign_eof> as well.
c3ed3b6e 376
fc1d88f0
RS
377=item B<-no_ign_eof>
378
c4de074e 379Shut down the connection when end of file is reached in the input.
fc1d88f0
RS
380Can be used to override the implicit B<-ign_eof> after B<-quiet>.
381
ddac1974
NL
382=item B<-psk_identity identity>
383
384Use the PSK identity B<identity> when using a PSK cipher suite.
9d772829 385The default value is "Client_identity" (without the quotes).
ddac1974
NL
386
387=item B<-psk key>
388
389Use the PSK key B<key> when using a PSK cipher suite. The key is
390given as a hexadecimal number without leading 0x, for example -psk
3911a2b3c4d.
9d772829 392This option must be provided in order to use a PSK cipher.
ddac1974 393
582a17d6 394=item B<-ssl3>, B<-tls1>, B<-tls1_1>, B<-tls1_2>, B<-tls1_3>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>, B<-no_tls1_3>
c3ed3b6e 395
8c73aeb6
VD
396These options require or disable the use of the specified SSL or TLS protocols.
397By default B<s_client> will negotiate the highest mutually supported protocol
398version.
399When a specific TLS version is required, only that version will be offered to
400and accepted from the server.
c3ed3b6e 401
8c73aeb6
VD
402=item B<-dtls>, B<-dtls1>, B<-dtls1_2>
403
404These options make B<s_client> use DTLS protocols instead of TLS.
60250017 405With B<-dtls>, B<s_client> will negotiate any supported DTLS protocol version,
8c73aeb6
VD
406whilst B<-dtls1> and B<-dtls1_2> will only support DTLS1.0 and DTLS1.2
407respectively.
fb0e87fb 408
19044d3c
MC
409=item B<-sctp>
410
411Use SCTP for the transport protocol instead of UDP in DTLS. Must be used in
412conjunction with B<-dtls>, B<-dtls1> or B<-dtls1_2>. This option is only
413available where OpenSSL has support for SCTP enabled.
414
fb0e87fb
BM
415=item B<-fallback_scsv>
416
417Send TLS_FALLBACK_SCSV in the ClientHello.
c3ed3b6e 418
bc8857bf
MC
419=item B<-async>
420
c4de074e 421Switch on asynchronous mode. Cryptographic operations will be performed
bc8857bf
MC
422asynchronously. This will only have an effect if an asynchronous capable engine
423is also used via the B<-engine> option. For test purposes the dummy async engine
424(dasync) can be used (if available).
425
28e5ea88
F
426=item B<-max_send_frag int>
427
428The maximum size of data fragment to send.
429See L<SSL_CTX_set_max_send_fragment(3)> for further information.
430
0df80881
MC
431=item B<-split_send_frag int>
432
433The size used to split data for encrypt pipelines. If more data is written in
434one go than this value then it will be split into multiple pipelines, up to the
435maximum number of pipelines defined by max_pipelines. This only has an effect if
c4de074e 436a suitable cipher suite has been negotiated, an engine that supports pipelining
0df80881
MC
437has been loaded, and max_pipelines is greater than 1. See
438L<SSL_CTX_set_split_send_fragment(3)> for further information.
439
440=item B<-max_pipelines int>
441
442The maximum number of encrypt/decrypt pipelines to be used. This will only have
443an effect if an engine has been loaded that supports pipelining (e.g. the dasync
c4de074e 444engine) and a suitable cipher suite has been negotiated. The default value is 1.
0df80881
MC
445See L<SSL_CTX_set_max_pipelines(3)> for further information.
446
447=item B<-read_buf int>
448
449The default read buffer size to be used for connections. This will only have an
450effect if the buffer size is larger than the size that would otherwise be used
451and pipelining is in use (see L<SSL_CTX_set_default_read_buffer_len(3)> for
452further information).
453
c3ed3b6e
DSH
454=item B<-bugs>
455
c4de074e 456There are several known bug in SSL and TLS implementations. Adding this
c3ed3b6e
DSH
457option enables various workarounds.
458
cc5a9ba4
VD
459=item B<-comp>
460
461Enables support for SSL/TLS compression.
462This option was introduced in OpenSSL 1.1.0.
463TLS compression is not recommended and is off by default as of
464OpenSSL 1.1.0.
465
466=item B<-no_comp>
467
468Disables support for SSL/TLS compression.
469TLS compression is not recommended and is off by default as of
470OpenSSL 1.1.0.
471
765b4137
DSH
472=item B<-brief>
473
c4de074e 474Only provide a brief summary of connection parameters instead of the
765b4137
DSH
475normal verbose output.
476
254b58fd
SC
477=item B<-sigalgs sigalglist>
478
479Specifies the list of signature algorithms that are sent by the client.
480The server selects one entry in the list based on its preferences.
481For example strings, see L<SSL_CTX_set1_sigalgs(3)>
482
483=item B<-curves curvelist>
484
485Specifies the list of supported curves to be sent by the client. The curve is
486is ultimately selected by the server. For a list of all curves, use:
487
488 $ openssl ecparam -list_curves
489
c3ed3b6e
DSH
490=item B<-cipher cipherlist>
491
c4de074e 492This allows the cipher list sent by the client to be modified. Although
fabce041
DSH
493the server determines which cipher suite is used it should take the first
494supported cipher in the list sent by the client. See the B<ciphers>
495command for more information.
c3ed3b6e 496
e986704d
RL
497=item B<-starttls protocol>
498
c4de074e 499Send the protocol-specific message(s) to switch to TLS for communication.
e986704d 500B<protocol> is a keyword for the intended protocol. Currently, the only
cfb4f1ef 501supported keywords are "smtp", "pop3", "imap", "ftp", "xmpp", "xmpp-server",
a2d9cfba 502"irc", "postgres", "mysql", "lmtp", "nntp", "sieve" and "ldap".
e986704d 503
b98af49d
CALP
504=item B<-xmpphost hostname>
505
898ea7b8
KE
506This option, when used with "-starttls xmpp" or "-starttls xmpp-server",
507specifies the host for the "to" attribute of the stream element.
b98af49d
CALP
508If this option is not specified, then the host specified with "-connect"
509will be used.
510
d24a9c8f
DSH
511=item B<-tlsextdebug>
512
c4de074e 513Print out a hex dump of any TLS extensions received from the server.
d24a9c8f
DSH
514
515=item B<-no_ticket>
516
c4de074e 517Disable RFC4507bis session ticket support.
d24a9c8f
DSH
518
519=item B<-sess_out filename>
520
c4de074e 521Output SSL session to B<filename>.
d24a9c8f
DSH
522
523=item B<-sess_in sess.pem>
524
c4de074e 525Load SSL session from B<filename>. The client will attempt to resume a
d24a9c8f
DSH
526connection from this session.
527
5270e702
RL
528=item B<-engine id>
529
c4de074e 530Specifying an engine (by its unique B<id> string) will cause B<s_client>
5270e702
RL
531to attempt to obtain a functional reference to the specified engine,
532thus initialising it if needed. The engine will then be set as the default
533for all available algorithms.
534
52b621db
LJ
535=item B<-rand file(s)>
536
c4de074e 537A file or files containing random data used to seed the random number
9b86974e 538generator, or an EGD socket (see L<RAND_egd(3)>).
35ed393e 539Multiple files can be specified separated by an OS-dependent character.
52b621db
LJ
540The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
541all others.
542
9cd50f73
T
543=item B<-serverinfo types>
544
c4de074e 545A list of comma-separated TLS Extension Types (numbers between 0 and
9cd50f73
T
54665535). Each type will be sent as an empty ClientHello TLS Extension.
547The server's response (if any) will be encoded and displayed as a PEM
548file.
549
cba3f1c7
DSH
550=item B<-status>
551
c4de074e 552Sends a certificate status request to the server (OCSP stapling). The server
cba3f1c7
DSH
553response (if any) is printed out.
554
776e15f9 555=item B<-alpn protocols>, B<-nextprotoneg protocols>
7efd0e77 556
c4de074e
P
557These flags enable the Enable the Application-Layer Protocol Negotiation
558or Next Protocol Negotiation (NPN) extension, respectively. ALPN is the
559IETF standard and replaces NPN.
560The B<protocols> list is a comma-separated list of protocol names that
561the client should advertise support for. The list should contain the most
562desirable protocols first. Protocol names are printable ASCII strings,
563for example "http/1.1" or "spdy/3".
564An empty list of protocols is treated specially and will cause the
565client to advertise support for the TLS extension but disconnect just
566after receiving ServerHello with a list of server supported protocols.
837f87c2 567The flag B<-nextprotoneg> cannot be specified if B<-tls1_3> is used.
7efd0e77 568
43341433 569=item B<-ct|noct>
eb64a6c6 570
43341433
VD
571Use one of these two options to control whether Certificate Transparency (CT)
572is enabled (B<-ct>) or disabled (B<-noct>).
573If CT is enabled, signed certificate timestamps (SCTs) will be requested from
574the server and reported at handshake completion.
eb64a6c6
RP
575
576Enabling CT also enables OCSP stapling, as this is one possible delivery method
577for SCTs.
578
579=item B<-ctlogfile>
580
581A file containing a list of known Certificate Transparency logs. See
582L<SSL_CTX_set_ctlog_list_file(3)> for the expected file format.
583
6437b802 584=item B<-keylogfile file>
4bf73e9f
PW
585
586Appends TLS secrets to the specified keylog file such that external programs
587(like Wireshark) can decrypt TLS connections.
588
6437b802
MC
589=item B<-early_data file>
590
591Reads the contents of the specified file and attempts to send it as early data
592to the server. This will only work with resumed sessions that support early
593data and when the server accepts the early data.
594
efeca6aa
UM
595=back
596
c3ed3b6e
DSH
597=head1 CONNECTED COMMANDS
598
599If a connection is established with an SSL server then any data received
600from the server is displayed and any key presses will be sent to the
ce301b6b 601server. When used interactively (which means neither B<-quiet> nor B<-ign_eof>
3b80e3aa 602have been given), the session will be renegotiated if the line begins with an
ce301b6b
RL
603B<R>, and if the line begins with a B<Q> or if end of file is reached, the
604connection will be closed down.
c3ed3b6e
DSH
605
606=head1 NOTES
607
608B<s_client> can be used to debug SSL servers. To connect to an SSL HTTP
609server the command:
610
611 openssl s_client -connect servername:443
612
613would typically be used (https uses port 443). If the connection succeeds
614then an HTTP command can be given such as "GET /" to retrieve a web page.
615
616If the handshake fails then there are several possible causes, if it is
45f55f6a
KR
617nothing obvious like no client certificate then the B<-bugs>,
618B<-ssl3>, B<-tls1>, B<-no_ssl3>, B<-no_tls1> options can be tried
c3ed3b6e
DSH
619in case it is a buggy server. In particular you should play with these
620options B<before> submitting a bug report to an OpenSSL mailing list.
621
622A frequent problem when attempting to get client certificates working
623is that a web client complains it has no certificates or gives an empty
624list to choose from. This is normally because the server is not sending
625the clients certificate authority in its "acceptable CA list" when it
626requests a certificate. By using B<s_client> the CA list can be viewed
627and checked. However some servers only request client authentication
628after a specific URL is requested. To obtain the list in this case it
a32fc687 629is necessary to use the B<-prexit> option and send an HTTP request
c3ed3b6e
DSH
630for an appropriate page.
631
632If a certificate is specified on the command line using the B<-cert>
633option it will not be used unless the server specifically requests
634a client certificate. Therefor merely including a client certificate
635on the command line is no guarantee that the certificate works.
636
637If there are problems verifying a server certificate then the
638B<-showcerts> option can be used to show the whole chain.
639
4e6c12f3
DSH
640The B<s_client> utility is a test tool and is designed to continue the
641handshake after any certificate verification errors. As a result it will
642accept any certificate chain (trusted or not) sent by the peer. None test
643applications should B<not> do this as it makes them vulnerable to a MITM
644attack. This behaviour can be changed by with the B<-verify_return_error>
645option: any verify errors are then returned aborting the handshake.
646
c3ed3b6e
DSH
647=head1 BUGS
648
8c73aeb6
VD
649Because this program has a lot of options and also because some of the
650techniques used are rather old, the C source of B<s_client> is rather hard to
651read and not a model of how things should be done.
652A typical SSL client program would be much simpler.
c3ed3b6e 653
c3ed3b6e
DSH
654The B<-prexit> option is a bit of a hack. We should really report
655information whenever a session is renegotiated.
656
657=head1 SEE ALSO
658
28e5ea88
F
659L<SSL_CONF_cmd(3)>, L<sess_id(1)>, L<s_server(1)>, L<ciphers(1)>,
660L<SSL_CTX_set_max_send_fragment(3)>, L<SSL_CTX_set_split_send_fragment(3)>
661L<SSL_CTX_set_max_pipelines(3)>
c3ed3b6e 662
fa7b0111
MC
663=head1 HISTORY
664
665The -no_alt_chains options was first added to OpenSSL 1.1.0.
666
e2f92610
RS
667=head1 COPYRIGHT
668
c4de074e 669Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
e2f92610
RS
670
671Licensed under the OpenSSL license (the "License"). You may not use
672this file except in compliance with the License. You can obtain a copy
673in the file LICENSE in the source distribution or at
674L<https://www.openssl.org/source/license.html>.
675
676=cut