s_client.pod revision 264331
1
2=pod
3
4=head1 NAME
5
6s_client - SSL/TLS client program
7
8=head1 SYNOPSIS
9
10B<openssl> B<s_client>
11[B<-connect host:port>]
12[B<-verify depth>]
13[B<-verify_return_error>]
14[B<-cert filename>]
15[B<-certform DER|PEM>]
16[B<-key filename>]
17[B<-keyform DER|PEM>]
18[B<-pass arg>]
19[B<-CApath directory>]
20[B<-CAfile filename>]
21[B<-reconnect>]
22[B<-pause>]
23[B<-showcerts>]
24[B<-debug>]
25[B<-msg>]
26[B<-nbio_test>]
27[B<-state>]
28[B<-nbio>]
29[B<-crlf>]
30[B<-ign_eof>]
31[B<-quiet>]
32[B<-ssl2>]
33[B<-ssl3>]
34[B<-tls1>]
35[B<-no_ssl2>]
36[B<-no_ssl3>]
37[B<-no_tls1>]
38[B<-bugs>]
39[B<-cipher cipherlist>]
40[B<-starttls protocol>]
41[B<-engine id>]
42[B<-tlsextdebug>]
43[B<-no_ticket>]
44[B<-sess_out filename>]
45[B<-sess_in filename>]
46[B<-rand file(s)>]
47
48=head1 DESCRIPTION
49
50The B<s_client> command implements a generic SSL/TLS client which connects
51to a remote host using SSL/TLS. It is a I<very> useful diagnostic tool for
52SSL servers.
53
54=head1 OPTIONS
55
56=over 4
57
58=item B<-connect host:port>
59
60This specifies the host and optional port to connect to. If not specified
61then an attempt is made to connect to the local host on port 4433.
62
63=item B<-cert certname>
64
65The certificate to use, if one is requested by the server. The default is
66not to use a certificate.
67
68=item B<-certform format>
69
70The certificate format to use: DER or PEM. PEM is the default.
71
72=item B<-key keyfile>
73
74The private key to use. If not specified then the certificate file will
75be used.
76
77=item B<-keyform format>
78
79The private format to use: DER or PEM. PEM is the default.
80
81=item B<-pass arg>
82
83the private key password source. For more information about the format of B<arg>
84see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.
85
86=item B<-verify depth>
87
88The verify depth to use. This specifies the maximum length of the
89server certificate chain and turns on server certificate verification.
90Currently the verify operation continues after errors so all the problems
91with a certificate chain can be seen. As a side effect the connection
92will never fail due to a server certificate verify failure.
93
94=item B<-verify_return_error>
95
96Return verification errors instead of continuing. This will typically
97abort the handshake with a fatal error.
98
99=item B<-CApath directory>
100
101The directory to use for server certificate verification. This directory
102must be in "hash format", see B<verify> for more information. These are
103also used when building the client certificate chain.
104
105=item B<-CAfile file>
106
107A file containing trusted certificates to use during server authentication
108and to use when attempting to build the client certificate chain.
109
110=item B<-purpose, -ignore_critical, -issuer_checks, -crl_check, -crl_check_all, -policy_check, -extended_crl, -x509_strict, -policy -check_ss_sig>
111
112Set various certificate chain valiadition option. See the
113L<B<verify>|verify(1)> manual page for details.
114
115=item B<-reconnect>
116
117reconnects to the same server 5 times using the same session ID, this can
118be used as a test that session caching is working.
119
120=item B<-pause>
121
122pauses 1 second between each read and write call.
123
124=item B<-showcerts>
125
126display the whole server certificate chain: normally only the server
127certificate itself is displayed.
128
129=item B<-prexit>
130
131print session information when the program exits. This will always attempt
132to print out information even if the connection fails. Normally information
133will only be printed out once if the connection succeeds. This option is useful
134because the cipher in use may be renegotiated or the connection may fail
135because a client certificate is required or is requested only after an
136attempt is made to access a certain URL. Note: the output produced by this
137option is not always accurate because a connection might never have been
138established.
139
140=item B<-state>
141
142prints out the SSL session states.
143
144=item B<-debug>
145
146print extensive debugging information including a hex dump of all traffic.
147
148=item B<-msg>
149
150show all protocol messages with hex dump.
151
152=item B<-nbio_test>
153
154tests non-blocking I/O
155
156=item B<-nbio>
157
158turns on non-blocking I/O
159
160=item B<-crlf>
161
162this option translated a line feed from the terminal into CR+LF as required
163by some servers.
164
165=item B<-ign_eof>
166
167inhibit shutting down the connection when end of file is reached in the
168input.
169
170=item B<-quiet>
171
172inhibit printing of session and certificate information.  This implicitly
173turns on B<-ign_eof> as well.
174
175=item B<-psk_identity identity>
176
177Use the PSK identity B<identity> when using a PSK cipher suite.
178
179=item B<-psk key>
180
181Use the PSK key B<key> when using a PSK cipher suite. The key is
182given as a hexadecimal number without leading 0x, for example -psk
1831a2b3c4d.
184
185=item B<-ssl2>, B<-ssl3>, B<-tls1>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>
186
187these options disable the use of certain SSL or TLS protocols. By default
188the initial handshake uses a method which should be compatible with all
189servers and permit them to use SSL v3, SSL v2 or TLS as appropriate.
190
191Unfortunately there are a lot of ancient and broken servers in use which
192cannot handle this technique and will fail to connect. Some servers only
193work if TLS is turned off with the B<-no_tls> option others will only
194support SSL v2 and may need the B<-ssl2> option.
195
196=item B<-bugs>
197
198there are several known bug in SSL and TLS implementations. Adding this
199option enables various workarounds.
200
201=item B<-cipher cipherlist>
202
203this allows the cipher list sent by the client to be modified. Although
204the server determines which cipher suite is used it should take the first
205supported cipher in the list sent by the client. See the B<ciphers>
206command for more information.
207
208=item B<-starttls protocol>
209
210send the protocol-specific message(s) to switch to TLS for communication.
211B<protocol> is a keyword for the intended protocol.  Currently, the only
212supported keywords are "smtp", "pop3", "imap", and "ftp".
213
214=item B<-tlsextdebug>
215
216print out a hex dump of any TLS extensions received from the server.
217
218=item B<-no_ticket>
219
220disable RFC4507bis session ticket support. 
221
222=item B<-sess_out filename>
223
224output SSL session to B<filename>
225
226=item B<-sess_in sess.pem>
227
228load SSL session from B<filename>. The client will attempt to resume a
229connection from this session.
230
231=item B<-engine id>
232
233specifying an engine (by its unique B<id> string) will cause B<s_client>
234to attempt to obtain a functional reference to the specified engine,
235thus initialising it if needed. The engine will then be set as the default
236for all available algorithms.
237
238=item B<-rand file(s)>
239
240a file or files containing random data used to seed the random number
241generator, or an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>).
242Multiple files can be specified separated by a OS-dependent character.
243The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
244all others.
245
246=back
247
248=head1 CONNECTED COMMANDS
249
250If a connection is established with an SSL server then any data received
251from the server is displayed and any key presses will be sent to the
252server. When used interactively (which means neither B<-quiet> nor B<-ign_eof>
253have been given), the session will be renegotiated if the line begins with an
254B<R>, and if the line begins with a B<Q> or if end of file is reached, the
255connection will be closed down.
256
257=head1 NOTES
258
259B<s_client> can be used to debug SSL servers. To connect to an SSL HTTP
260server the command:
261
262 openssl s_client -connect servername:443
263
264would typically be used (https uses port 443). If the connection succeeds
265then an HTTP command can be given such as "GET /" to retrieve a web page.
266
267If the handshake fails then there are several possible causes, if it is
268nothing obvious like no client certificate then the B<-bugs>, B<-ssl2>,
269B<-ssl3>, B<-tls1>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1> options can be tried
270in case it is a buggy server. In particular you should play with these
271options B<before> submitting a bug report to an OpenSSL mailing list.
272
273A frequent problem when attempting to get client certificates working
274is that a web client complains it has no certificates or gives an empty
275list to choose from. This is normally because the server is not sending
276the clients certificate authority in its "acceptable CA list" when it
277requests a certificate. By using B<s_client> the CA list can be viewed
278and checked. However some servers only request client authentication
279after a specific URL is requested. To obtain the list in this case it
280is necessary to use the B<-prexit> option and send an HTTP request
281for an appropriate page.
282
283If a certificate is specified on the command line using the B<-cert>
284option it will not be used unless the server specifically requests
285a client certificate. Therefor merely including a client certificate
286on the command line is no guarantee that the certificate works.
287
288If there are problems verifying a server certificate then the
289B<-showcerts> option can be used to show the whole chain.
290
291Since the SSLv23 client hello cannot include compression methods or extensions
292these will only be supported if its use is disabled, for example by using the
293B<-no_sslv2> option.
294
295The B<s_client> utility is a test tool and is designed to continue the
296handshake after any certificate verification errors. As a result it will
297accept any certificate chain (trusted or not) sent by the peer. None test
298applications should B<not> do this as it makes them vulnerable to a MITM
299attack. This behaviour can be changed by with the B<-verify_return_error>
300option: any verify errors are then returned aborting the handshake.
301
302=head1 BUGS
303
304Because this program has a lot of options and also because some of
305the techniques used are rather old, the C source of s_client is rather
306hard to read and not a model of how things should be done. A typical
307SSL client program would be much simpler.
308
309The B<-prexit> option is a bit of a hack. We should really report
310information whenever a session is renegotiated.
311
312=head1 SEE ALSO
313
314L<sess_id(1)|sess_id(1)>, L<s_server(1)|s_server(1)>, L<ciphers(1)|ciphers(1)>
315
316=cut
317