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