~ubuntu-branches/ubuntu/precise/openssl098/precise

« back to all changes in this revision

Viewing changes to doc/apps/s_client.pod

  • Committer: Bazaar Package Importer
  • Author(s): Kurt Roeckx
  • Date: 2011-03-23 19:50:31 UTC
  • Revision ID: james.westby@ubuntu.com-20110323195031-6h9crj4bymhhr8b8
Tags: upstream-0.9.8o
ImportĀ upstreamĀ versionĀ 0.9.8o

Show diffs side-by-side

added added

removed removed

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