Fix nits in pod files.
[openssl.git] / doc / apps / s_server.pod
1 =pod
2
3 =head1 NAME
4
5 s_server - SSL/TLS server program
6
7 =head1 SYNOPSIS
8
9 B<openssl> B<s_server>
10 [B<-help>]
11 [B<-accept port>]
12 [B<-naccept count>]
13 [B<-context id>]
14 [B<-verify depth>]
15 [B<-Verify depth>]
16 [B<-crl_check>]
17 [B<-crl_check_all>]
18 [B<-cert filename>]
19 [B<-certform DER|PEM>]
20 [B<-key keyfile>]
21 [B<-keyform DER|PEM>]
22 [B<-pass arg>]
23 [B<-dcert filename>]
24 [B<-dcertform DER|PEM>]
25 [B<-dkey keyfile>]
26 [B<-dkeyform DER|PEM>]
27 [B<-dpass arg>]
28 [B<-dhparam filename>]
29 [B<-nbio>]
30 [B<-nbio_test>]
31 [B<-crlf>]
32 [B<-debug>]
33 [B<-msg>]
34 [B<-state>]
35 [B<-CApath directory>]
36 [B<-CAfile filename>]
37 [B<-no-CAfile>]
38 [B<-no-CApath>]
39 [B<-attime timestamp>]
40 [B<-check_ss_sig>]
41 [B<-explicit_policy>]
42 [B<-extended_crl>]
43 [B<-ignore_critical>]
44 [B<-inhibit_any>]
45 [B<-inhibit_map>]
46 [B<-no_check_time>]
47 [B<-partial_chain>]
48 [B<-policy arg>]
49 [B<-policy_check>]
50 [B<-policy_print>]
51 [B<-purpose purpose>]
52 [B<-suiteB_128>]
53 [B<-suiteB_128_only>]
54 [B<-suiteB_192>]
55 [B<-trusted_first>]
56 [B<-no_alt_chains>]
57 [B<-use_deltas>]
58 [B<-auth_level num>]
59 [B<-verify_depth num>]
60 [B<-verify_return_error>]
61 [B<-verify_email email>]
62 [B<-verify_hostname hostname>]
63 [B<-verify_ip ip>]
64 [B<-verify_name name>]
65 [B<-x509_strict>]
66 [B<-nocert>]
67 [B<-cipher cipherlist>]
68 [B<-serverpref>]
69 [B<-quiet>]
70 [B<-ssl3>]
71 [B<-tls1>]
72 [B<-dtls>]
73 [B<-dtls1>]
74 [B<-dtls1_2>]
75 [B<-listen>]
76 [B<-async>]
77 [B<-split_send_frag>]
78 [B<-max_pipelines>]
79 [B<-read_buf>]
80 [B<-no_ssl3>]
81 [B<-no_tls1>]
82 [B<-no_tls1_1>]
83 [B<-no_tls1_2>]
84 [B<-no_dhe>]
85 [B<-bugs>]
86 [B<-comp>]
87 [B<-no_comp>]
88 [B<-brief>]
89 [B<-www>]
90 [B<-WWW>]
91 [B<-HTTP>]
92 [B<-engine id>]
93 [B<-tlsextdebug>]
94 [B<-no_ticket>]
95 [B<-id_prefix arg>]
96 [B<-rand file(s)>]
97 [B<-serverinfo file>]
98 [B<-no_resumption_on_reneg>]
99 [B<-status>]
100 [B<-status_verbose>]
101 [B<-status_timeout nsec>]
102 [B<-status_url url>]
103 [B<-nextprotoneg protocols>]
104
105 =head1 DESCRIPTION
106
107 The B<s_server> command implements a generic SSL/TLS server which listens
108 for connections on a given port using SSL/TLS.
109
110 =head1 OPTIONS
111
112 In addition to the options below the B<s_server> utility also supports the
113 common and server only options documented in the
114 L<SSL_CONF_cmd(3)|SSL_CONF_cmd(3)/SUPPORTED COMMAND LINE COMMANDS> manual
115 page.
116
117 =over 4
118
119 =item B<-help>
120
121 Print out a usage message.
122
123 =item B<-accept port>
124
125 The TCP port to listen on for connections. If not specified 4433 is used.
126
127 =item B<-naccept count>
128
129 The server will exit after receiving B<number> connections, default unlimited.
130
131 =item B<-context id>
132
133 Sets the SSL context id. It can be given any string value. If this option
134 is not present a default value will be used.
135
136 =item B<-cert certname>
137
138 The certificate to use, most servers cipher suites require the use of a
139 certificate and some require a certificate with a certain public key type:
140 for example the DSS cipher suites require a certificate containing a DSS
141 (DSA) key. If not specified then the filename "server.pem" will be used.
142
143 =item B<-certform format>
144
145 The certificate format to use: DER or PEM. PEM is the default.
146
147 =item B<-key keyfile>
148
149 The private key to use. If not specified then the certificate file will
150 be used.
151
152 =item B<-keyform format>
153
154 The private format to use: DER or PEM. PEM is the default.
155
156 =item B<-pass arg>
157
158 The private key password source. For more information about the format of B<arg>
159 see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)>.
160
161 =item B<-dcert filename>, B<-dkey keyname>
162
163 Specify an additional certificate and private key, these behave in the
164 same manner as the B<-cert> and B<-key> options except there is no default
165 if they are not specified (no additional certificate and key is used). As
166 noted above some cipher suites require a certificate containing a key of
167 a certain type. Some cipher suites need a certificate carrying an RSA key
168 and some a DSS (DSA) key. By using RSA and DSS certificates and keys
169 a server can support clients which only support RSA or DSS cipher suites
170 by using an appropriate certificate.
171
172 =item B<-dcertform format>, B<-dkeyform format>, B<-dpass arg>
173
174 Additional certificate and private key format and passphrase respectively.
175
176 =item B<-nocert>
177
178 If this option is set then no certificate is used. This restricts the
179 cipher suites available to the anonymous ones (currently just anonymous
180 DH).
181
182 =item B<-dhparam filename>
183
184 The DH parameter file to use. The ephemeral DH cipher suites generate keys
185 using a set of DH parameters. If not specified then an attempt is made to
186 load the parameters from the server certificate file.
187 If this fails then a static set of parameters hard coded into the B<s_server>
188 program will be used.
189
190 =item B<-no_dhe>
191
192 If this option is set then no DH parameters will be loaded effectively
193 disabling the ephemeral DH cipher suites.
194
195 =item B<-crl_check>, B<-crl_check_all>
196
197 Check the peer certificate has not been revoked by its CA.
198 The CRL(s) are appended to the certificate file. With the B<-crl_check_all>
199 option all CRLs of all CAs in the chain are checked.
200
201 =item B<-CApath directory>
202
203 The directory to use for client certificate verification. This directory
204 must be in "hash format", see B<verify> for more information. These are
205 also used when building the server certificate chain.
206
207 =item B<-CAfile file>
208
209 A file containing trusted certificates to use during client authentication
210 and to use when attempting to build the server certificate chain. The list
211 is also used in the list of acceptable client CAs passed to the client when
212 a certificate is requested.
213
214 =item B<-no-CAfile>
215
216 Do not load the trusted CA certificates from the default file location
217
218 =item B<-no-CApath>
219
220 Do not load the trusted CA certificates from the default directory location
221
222 =item B<-verify depth>, B<-Verify depth>
223
224 The verify depth to use. This specifies the maximum length of the
225 client certificate chain and makes the server request a certificate from
226 the client. With the B<-verify> option a certificate is requested but the
227 client does not have to send one, with the B<-Verify> option the client
228 must supply a certificate or an error occurs.
229
230 If the ciphersuite cannot request a client certificate (for example an
231 anonymous ciphersuite or PSK) this option has no effect.
232
233 =item B<-attime>, B<-check_ss_sig>, B<-crl_check>, B<-crl_check_all>,
234 B<-explicit_policy>, B<-extended_crl>, B<-ignore_critical>, B<-inhibit_any>,
235 B<-inhibit_map>, B<-no_alt_chains>, B<-no_check_time>, B<-partial_chain>, B<-policy>,
236 B<-policy_check>, B<-policy_print>, B<-purpose>, B<-suiteB_128>,
237 B<-suiteB_128_only>, B<-suiteB_192>, B<-trusted_first>, B<-use_deltas>,
238 B<-auth_level>, B<-verify_depth>, B<-verify_email>, B<-verify_hostname>,
239 B<-verify_ip>, B<-verify_name>, B<-x509_strict>
240
241 Set different peer certificate verification options.
242 See the L<verify(1)> manual page for details.
243
244 =item B<-verify_return_error>
245
246 Verification errors normally just print a message but allow the
247 connection to continue, for debugging purposes.
248 If this option is used, then verification errors close the connection.
249
250 =item B<-state>
251
252 Prints the SSL session states.
253
254 =item B<-debug>
255
256 Print extensive debugging information including a hex dump of all traffic.
257
258 =item B<-msg>
259
260 Show all protocol messages with hex dump.
261
262 =item B<-trace>
263
264 Show verbose trace output of protocol messages. OpenSSL needs to be compiled
265 with B<enable-ssl-trace> for this option to work.
266
267 =item B<-msgfile>
268
269 File to send output of B<-msg> or B<-trace> to, default standard output.
270
271 =item B<-nbio_test>
272
273 Tests non blocking I/O
274
275 =item B<-nbio>
276
277 Turns on non blocking I/O
278
279 =item B<-crlf>
280
281 This option translated a line feed from the terminal into CR+LF.
282
283 =item B<-quiet>
284
285 Inhibit printing of session and certificate information.
286
287 =item B<-psk_hint hint>
288
289 Use the PSK identity hint B<hint> when using a PSK cipher suite.
290
291 =item B<-psk key>
292
293 Use the PSK key B<key> when using a PSK cipher suite. The key is
294 given as a hexadecimal number without leading 0x, for example -psk
295 1a2b3c4d.
296
297 =item B<-ssl2>, B<-ssl3>, B<-tls1>, B<-tls1_1>, B<-tls1_2>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>
298
299 These options require or disable the use of the specified SSL or TLS protocols.
300 By default B<s_server> will negotiate the highest mutually supported protocol
301 version.
302 When a specific TLS version is required, only that version will be accepted
303 from the client.
304
305 =item B<-dtls>, B<-dtls1>, B<-dtls1_2>
306
307 These options make B<s_server> use DTLS protocols instead of TLS.
308 With B<-dtls>, B<s_server> will negotiate any supported DTLS protcol version,
309 whilst B<-dtls1> and B<-dtls1_2> will only support DTLSv1.0 and DTLSv1.2
310 respectively.
311
312 =item B<-listen>
313
314 This option can only be used in conjunction with one of the DTLS options above.
315 With this option B<s_server> will listen on a UDP port for incoming connections.
316 Any ClientHellos that arrive will be checked to see if they have a cookie in
317 them or not.
318 Any without a cookie will be responded to with a HelloVerifyRequest.
319 If a ClientHello with a cookie is received then B<s_server> will connect to
320 that peer and complete the handshake.
321
322 =item B<-async>
323
324 Switch on asynchronous mode. Cryptographic operations will be performed
325 asynchronously. This will only have an effect if an asynchronous capable engine
326 is also used via the B<-engine> option. For test purposes the dummy async engine
327 (dasync) can be used (if available).
328
329 =item B<-split_send_frag int>
330
331 The size used to split data for encrypt pipelines. If more data is written in
332 one go than this value then it will be split into multiple pipelines, up to the
333 maximum number of pipelines defined by max_pipelines. This only has an effect if
334 a suitable ciphersuite has been negotiated, an engine that supports pipelining
335 has been loaded, and max_pipelines is greater than 1. See
336 L<SSL_CTX_set_split_send_fragment(3)> for further information.
337
338 =item B<-max_pipelines int>
339
340 The maximum number of encrypt/decrypt pipelines to be used. This will only have
341 an effect if an engine has been loaded that supports pipelining (e.g. the dasync
342 engine) and a suiteable ciphersuite has been negotiated. The default value is 1.
343 See L<SSL_CTX_set_max_pipelines(3)> for further information.
344
345 =item B<-read_buf int>
346
347 The default read buffer size to be used for connections. This will only have an
348 effect if the buffer size is larger than the size that would otherwise be used
349 and pipelining is in use (see L<SSL_CTX_set_default_read_buffer_len(3)> for
350 further information).
351
352 =item B<-bugs>
353
354 There are several known bug in SSL and TLS implementations. Adding this
355 option enables various workarounds.
356
357 =item B<-comp>
358
359 Enable negotiation of TLS compression.
360 This option was introduced in OpenSSL 1.1.0.
361 TLS compression is not recommended and is off by default as of
362 OpenSSL 1.1.0.
363
364 =item B<-no_comp>
365
366 Disable negotiation of TLS compression.
367 TLS compression is not recommended and is off by default as of
368 OpenSSL 1.1.0.
369
370 =item B<-brief>
371
372 Provide a brief summary of connection parameters instead of the normal verbose
373 output.
374
375 =item B<-cipher cipherlist>
376
377 This allows the cipher list used by the server to be modified.  When
378 the client sends a list of supported ciphers the first client cipher
379 also included in the server list is used. Because the client specifies
380 the preference order, the order of the server cipherlist irrelevant. See
381 the B<ciphers> command for more information.
382
383 =item B<-serverpref>
384
385 Use the server's cipher preferences, rather than the client's preferences.
386
387 =item B<-tlsextdebug>
388
389 Print a hex dump of any TLS extensions received from the server.
390
391 =item B<-no_ticket>
392
393 Disable RFC4507bis session ticket support.
394
395 =item B<-www>
396
397 Sends a status message back to the client when it connects. This includes
398 information about the ciphers used and various session parameters.
399 The output is in HTML format so this option will normally be used with a
400 web browser.
401
402 =item B<-WWW>
403
404 Emulates a simple web server. Pages will be resolved relative to the
405 current directory, for example if the URL https://myhost/page.html is
406 requested the file ./page.html will be loaded.
407
408 =item B<-HTTP>
409
410 Emulates a simple web server. Pages will be resolved relative to the
411 current directory, for example if the URL https://myhost/page.html is
412 requested the file ./page.html will be loaded. The files loaded are
413 assumed to contain a complete and correct HTTP response (lines that
414 are part of the HTTP response line and headers must end with CRLF).
415
416 =item B<-rev>
417
418 Simple test server which just reverses the text received from the client
419 and sends it back to the server. Also sets B<-brief>.
420
421 =item B<-engine id>
422
423 Specifying an engine (by its unique B<id> string) will cause B<s_server>
424 to attempt to obtain a functional reference to the specified engine,
425 thus initialising it if needed. The engine will then be set as the default
426 for all available algorithms.
427
428 =item B<-id_prefix arg>
429
430 Generate SSL/TLS session IDs prefixed by B<arg>. This is mostly useful
431 for testing any SSL/TLS code (eg. proxies) that wish to deal with multiple
432 servers, when each of which might be generating a unique range of session
433 IDs (eg. with a certain prefix).
434
435 =item B<-rand file(s)>
436
437 A file or files containing random data used to seed the random number
438 generator, or an EGD socket (see L<RAND_egd(3)>).
439 Multiple files can be specified separated by an OS-dependent character.
440 The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
441 all others.
442
443 =item B<-serverinfo file>
444
445 A file containing one or more blocks of PEM data.  Each PEM block
446 must encode a TLS ServerHello extension (2 bytes type, 2 bytes length,
447 followed by "length" bytes of extension data).  If the client sends
448 an empty TLS ClientHello extension matching the type, the corresponding
449 ServerHello extension will be returned.
450
451 =item B<-no_resumption_on_reneg>
452
453 Set the B<SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION> option.
454
455 =item B<-status>
456
457 Enables certificate status request support (aka OCSP stapling).
458
459 =item B<-status_verbose>
460
461 Enables certificate status request support (aka OCSP stapling) and gives
462 a verbose printout of the OCSP response.
463
464 =item B<-status_timeout nsec>
465
466 Sets the timeout for OCSP response to B<nsec> seconds.
467
468 =item B<-status_url url>
469
470 Sets a fallback responder URL to use if no responder URL is present in the
471 server certificate. Without this option an error is returned if the server
472 certificate does not contain a responder address.
473
474 =item B<-nextprotoneg protocols>
475
476 Enable Next Protocol Negotiation TLS extension and provide a
477 comma-separated list of supported protocol names.
478 The list should contain most wanted protocols first.
479 Protocol names are printable ASCII strings, for example "http/1.1" or
480 "spdy/3".
481
482 =back
483
484 =head1 CONNECTED COMMANDS
485
486 If a connection request is established with an SSL client and neither the
487 B<-www> nor the B<-WWW> option has been used then normally any data received
488 from the client is displayed and any key presses will be sent to the client.
489
490 Certain single letter commands are also recognized which perform special
491 operations: these are listed below.
492
493 =over 4
494
495 =item B<q>
496
497 end the current SSL connection but still accept new connections.
498
499 =item B<Q>
500
501 end the current SSL connection and exit.
502
503 =item B<r>
504
505 renegotiate the SSL session.
506
507 =item B<R>
508
509 renegotiate the SSL session and request a client certificate.
510
511 =item B<P>
512
513 send some plain text down the underlying TCP connection: this should
514 cause the client to disconnect due to a protocol violation.
515
516 =item B<S>
517
518 print out some session cache status information.
519
520 =back
521
522 =head1 NOTES
523
524 B<s_server> can be used to debug SSL clients. To accept connections from
525 a web browser the command:
526
527  openssl s_server -accept 443 -www
528
529 can be used for example.
530
531 Most web browsers (in particular Netscape and MSIE) only support RSA cipher
532 suites, so they cannot connect to servers which don't use a certificate
533 carrying an RSA key or a version of OpenSSL with RSA disabled.
534
535 Although specifying an empty list of CAs when requesting a client certificate
536 is strictly speaking a protocol violation, some SSL clients interpret this to
537 mean any CA is acceptable. This is useful for debugging purposes.
538
539 The session parameters can printed out using the B<sess_id> program.
540
541 =head1 BUGS
542
543 Because this program has a lot of options and also because some of the
544 techniques used are rather old, the C source of B<s_server> is rather hard to
545 read and not a model of how things should be done.
546 A typical SSL server program would be much simpler.
547
548 The output of common ciphers is wrong: it just gives the list of ciphers that
549 OpenSSL recognizes and the client supports.
550
551 There should be a way for the B<s_server> program to print out details of any
552 unknown cipher suites a client says it supports.
553
554 =head1 SEE ALSO
555
556 L<sess_id(1)>, L<s_client(1)>, L<ciphers(1)>
557
558 =head1 HISTORY
559
560 The -no_alt_chains options was first added to OpenSSL 1.1.0.
561
562 =cut
563
564 =head1 COPYRIGHT
565
566 Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
567
568 Licensed under the OpenSSL license (the "License").  You may not use
569 this file except in compliance with the License.  You can obtain a copy
570 in the file LICENSE in the source distribution or at
571 L<https://www.openssl.org/source/license.html>.
572
573 =cut