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