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