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