]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/ssl/SSL_CONF_cmd.pod
Update chain building function.
[thirdparty/openssl.git] / doc / ssl / SSL_CONF_cmd.pod
CommitLineData
3db935a9
DSH
1=pod
2
3=head1 NAME
4
5SSL_CONF_cmd - send configuration command
6
7=head1 SYNOPSIS
8
9 #include <openssl/ssl.h>
10
11 int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
ec2f7e56
DSH
12 int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);
13 int SSL_CONF_finish(SSL_CONF_CTX *cctx);
3db935a9
DSH
14
15=head1 DESCRIPTION
16
17The function SSL_CONF_cmd() performs configuration operation B<cmd> with
18optional parameter B<value> on B<ctx>. Its purpose is to simplify application
19configuration of B<SSL_CTX> or B<SSL> structures by providing a common
13cfb043
DSH
20framework for command line options or configuration files.
21
ec2f7e56
DSH
22SSL_CONF_cmd_value_type() returns the type of value that B<cmd> refers to.
23
24The function SSL_CONF_finish() must be called after all configuration
25operations have been completed. It is used to finalise any operations
26or to process defaults.
27
13cfb043
DSH
28=head1 SUPPORTED COMMAND LINE COMMANDS
29
30Currently supported B<cmd> names for command lines (i.e. when the
31flag B<SSL_CONF_CMDLINE> is set) are listed below. Note: all B<cmd> names
4b64e0cb 32are case sensitive. Unless otherwise stated commands can be used by
13cfb043
DSH
33both clients and servers and the B<value> parameter is not used. The default
34prefix for command line commands is B<-> and that is reflected below.
35
36=over 4
37
38=item B<-sigalgs>
39
40This sets the supported signature algorithms for TLS v1.2. For clients this
41value is used directly for the supported signature algorithms extension. For
42servers it is used to determine which signature algorithms to support.
43
44The B<value> argument should be a colon separated list of signature algorithms
45in order of decreasing preference of the form B<algorithm+hash>. B<algorithm>
46is one of B<RSA>, B<DSA> or B<ECDSA> and B<hash> is a supported algorithm
47OID short name such as B<SHA1>, B<SHA224>, B<SHA256>, B<SHA384> of B<SHA512>.
48Note: algorithm and hash names are case sensitive.
49
50If this option is not set then all signature algorithms supported by the
51OpenSSL library are permissible.
52
53=item B<-client_sigalgs>
54
55This sets the supported signature algorithms associated with client
56authentication for TLS v1.2. For servers the value is used in the supported
57signature algorithms field of a certificate request. For clients it is
58used to determine which signature algorithm to with the client certificate.
59If a server does not request a certificate this option has no effect.
60
61The syntax of B<value> is identical to B<-sigalgs>. If not set then
62the value set for B<-sigalgs> will be used instead.
63
64=item B<-curves>
65
65f2a565
DSH
66This sets the supported elliptic curves. For clients the curves are
67sent using the supported curves extension. For servers it is used
13cfb043
DSH
68to determine which curve to use. This setting affects curves used for both
69signatures and key exchange, if applicable.
70
71The B<value> argument is a colon separated list of curves. The curve can be
72either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name (e.g
73B<prime256v1>). Curve names are case sensitive.
74
75=item B<-named_curve>
76
77This sets the temporary curve used for ephemeral ECDH modes. Only used by
78servers
79
80The B<value> argument is a curve name or the special value B<auto> which
81picks an appropriate curve based on client and server preferences. The curve
82can be either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name
83(e.g B<prime256v1>). Curve names are case sensitive.
84
85=item B<-cipher>
86
87Sets the cipher suite list to B<value>. Note: syntax checking of B<value> is
88currently not performed unless a B<SSL> or B<SSL_CTX> structure is
89associated with B<cctx>.
90
ec2f7e56
DSH
91=item B<-cert>
92
93Attempts to use the file B<value> as the certificate for the appropriate
94context. It currently uses SSL_CTX_use_cerificate_chain_file if an B<SSL_CTX>
95structure is set or SSL_use_certifcate_file with filetype PEM if an B<SSL>
96structure is set. This option is only supported if certificate operations
97are permitted.
98
99=item B<-key>
100
101Attempts to use the file B<value> as the private key for the appropriate
102context. This option is only supported if certificate operations
103are permitted. Note: if no B<-key> option is set then a private key is
104not loaded: it does not currently use the B<-cert> file.
105
c557f921
DSH
106=item B<-dhparam>
107
108Attempts to use the file B<value> as the set of temporary DH parameters for
109the appropriate context. This option is only supported if certificate
110operations are permitted.
111
13cfb043
DSH
112=item B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>
113
114Disables protocol support for SSLv2, SSLv3, TLS 1.0, TLS 1.1 or TLS 1.2
115by setting the corresponding options B<SSL_OP_NO_SSL2>, B<SSL_OP_NO_SSL3>,
116B<SSL_OP_NO_TLS1>, B<SSL_OP_NO_TLS1_1> and B<SSL_OP_NO_TLS1_2> respectively.
117
118=item B<-bugs>
119
120Various bug workarounds are set, same as setting B<SSL_OP_ALL>.
121
122=item B<-no_comp>
123
124Disables support for SSL/TLS compression, same as setting B<SSL_OP_NO_COMPRESS>.
125
126=item B<-no_ticket>
127
128Disables support for session tickets, same as setting B<SSL_OP_NO_TICKET>.
129
130=item B<-serverpref>
131
132Use server and not client preference order when determining which cipher suite,
133signature algorithm or elliptic curve to use for an incoming connection.
134Equivalent to B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
135
136=item B<-legacyrenegotiation>
137
138permits the use of unsafe legacy renegotiation. Equivalent to setting
139B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
140
141=item B<-legacy_server_connect>, B<-no_legacy_server_connect>
142
143permits or prohibits the use of unsafe legacy renegotiation for OpenSSL
144clients only. Equivalent to setting or clearing B<SSL_OP_LEGACY_SERVER_CONNECT>.
145Set by default.
146
147=item B<-strict>
148
149enables strict mode protocol handling. Equivalent to setting
150B<SSL_CERT_FLAG_TLS_STRICT>.
151
152=item B<-debug_broken_protocol>
153
154disables various checks and permits several kinds of broken protocol behaviour
155for testing purposes: it should B<NEVER> be used in anything other than a test
156environment. Only supported if OpenSSL is configured with
157B<-DOPENSSL_SSL_DEBUG_BROKEN_PROTOCOL>.
158
159=back
3db935a9
DSH
160
161=head1 SUPPORTED CONFIGURATION FILE COMMANDS
162
163Currently supported B<cmd> names for configuration files (i.e. when the
164flag B<SSL_CONF_FLAG_FILE> is set) are listed below. All configuration file
165B<cmd> names and are case insensitive so B<signaturealgorithms> is recognised
c7b7984a 166as well as B<SignatureAlgorithms>. Unless otherwise stated the B<value> names
3db935a9
DSH
167are also case insensitive.
168
169Note: the command prefix (if set) alters the recognised B<cmd> values.
170
171=over 4
172
65f2a565 173=item B<CipherString>
3db935a9
DSH
174
175Sets the cipher suite list to B<value>. Note: syntax checking of B<value> is
c7b7984a 176currently not performed unless an B<SSL> or B<SSL_CTX> structure is
3db935a9
DSH
177associated with B<cctx>.
178
ec2f7e56
DSH
179=item B<Certificate>
180
181Attempts to use the file B<value> as the certificate for the appropriate
182context. It currently uses SSL_CTX_use_cerificate_chain_file if an B<SSL_CTX>
183structure is set or SSL_use_certifcate_file with filetype PEM if an B<SSL>
184structure is set. This option is only supported if certificate operations
185are permitted.
186
187=item B<PrivateKey>
188
189Attempts to use the file B<value> as the private key for the appropriate
190context. This option is only supported if certificate operations
191are permitted. Note: if no B<-key> option is set then a private key is
192not loaded: it does not currently use the B<Certificate> file.
193
5b7f36e8
DSH
194=item B<ServerInfoFile>
195
196Attempts to use the file B<value> in the "serverinfo" extension using the
197function SSL_CTX_use_serverinfo_file.
198
c557f921
DSH
199=item B<DHParameters>
200
201Attempts to use the file B<value> as the set of temporary DH parameters for
202the appropriate context. This option is only supported if certificate
203operations are permitted.
204
3db935a9
DSH
205=item B<SignatureAlgorithms>
206
207This sets the supported signature algorithms for TLS v1.2. For clients this
208value is used directly for the supported signature algorithms extension. For
209servers it is used to determine which signature algorithms to support.
210
211The B<value> argument should be a colon separated list of signature algorithms
212in order of decreasing preference of the form B<algorithm+hash>. B<algorithm>
213is one of B<RSA>, B<DSA> or B<ECDSA> and B<hash> is a supported algorithm
214OID short name such as B<SHA1>, B<SHA224>, B<SHA256>, B<SHA384> of B<SHA512>.
215Note: algorithm and hash names are case sensitive.
216
217If this option is not set then all signature algorithms supported by the
218OpenSSL library are permissible.
219
220=item B<ClientSignatureAlgorithms>
221
222This sets the supported signature algorithms associated with client
223authentication for TLS v1.2. For servers the value is used in the supported
224signature algorithms field of a certificate request. For clients it is
c7b7984a 225used to determine which signature algorithm to with the client certificate.
3db935a9
DSH
226
227The syntax of B<value> is identical to B<SignatureAlgorithms>. If not set then
228the value set for B<SignatureAlgorithms> will be used instead.
229
230=item B<Curves>
231
65f2a565
DSH
232This sets the supported elliptic curves. For clients the curves are
233sent using the supported curves extension. For servers it is used
c7b7984a
DSH
234to determine which curve to use. This setting affects curves used for both
235signatures and key exchange, if applicable.
3db935a9
DSH
236
237The B<value> argument is a colon separated list of curves. The curve can be
238either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name (e.g
239B<prime256v1>). Curve names are case sensitive.
240
241=item B<ECDHParameters>
242
13cfb043
DSH
243This sets the temporary curve used for ephemeral ECDH modes. Only used by
244servers
3db935a9
DSH
245
246The B<value> argument is a curve name or the special value B<Automatic> which
c7b7984a
DSH
247picks an appropriate curve based on client and server preferences. The curve
248can be either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name
249(e.g B<prime256v1>). Curve names are case sensitive.
3db935a9
DSH
250
251=item B<Protocol>
252
253The supported versions of the SSL or TLS protocol.
254
255The B<value> argument is a comma separated list of supported protocols to
256enable or disable. If an protocol is preceded by B<-> that version is disabled.
257All versions are enabled by default, though applications may choose to
c7b7984a
DSH
258explicitly disable some. Currently supported protocol values are B<SSLv2>,
259B<SSLv3>, B<TLSv1>, B<TLSv1.1> and B<TLSv1.2>. The special value B<ALL> refers
260to all supported versions.
3db935a9
DSH
261
262=item B<Options>
263
264The B<value> argument is a comma separated list of various flags to set.
265If a flag string is preceded B<-> it is disabled. See the
266B<SSL_CTX_set_options> function for more details of individual options.
267
268Each option is listed below. Where an operation is enabled by default
269the B<-flag> syntax is needed to disable it.
270
271B<SessionTicket>: session ticket support, enabled by default. Inverse of
272B<SSL_OP_NO_TICKET>: that is B<-SessionTicket> is the same as setting
273B<SSL_OP_NO_TICKET>.
274
275B<Compression>: SSL/TLS compression support, enabled by default. Inverse
276of B<SSL_OP_NO_COMPRESSION>.
277
278B<EmptyFragments>: use empty fragments as a countermeasure against a
279SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. It
280is set by default. Inverse of B<SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS>.
281
c7b7984a 282B<Bugs>: enable various bug workarounds. Same as B<SSL_OP_ALL>.
3db935a9 283
c7b7984a 284B<DHSingle>: enable single use DH keys, set by default. Inverse of
3db935a9
DSH
285B<SSL_OP_DH_SINGLE>. Only used by servers.
286
287B<ECDHSingle> enable single use ECDH keys, set by default. Inverse of
288B<SSL_OP_ECDH_SINGLE>. Only used by servers.
289
290B<ServerPreference> use server and not client preference order when
291determining which cipher suite, signature algorithm or elliptic curve
292to use for an incoming connection. Equivalent to
293B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
294
295B<UnsafeLegacyRenegotiation> permits the use of unsafe legacy renegotiation.
296Equivalent to B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
297
298B<UnsafeLegacyServerConnect> permits the use of unsafe legacy renegotiation
299for OpenSSL clients only. Equivalent to B<SSL_OP_LEGACY_SERVER_CONNECT>.
300Set by default.
301
302=back
303
ec2f7e56
DSH
304=head1 SUPPORTED COMMAND TYPES
305
306The function SSL_CONF_cmd_value_type() currently returns one of the following
307types:
308
309=over 4
310
311=item B<SSL_CONF_TYPE_UNKNOWN>
312
313The B<cmd> string is unrecognised, this return value can be use to flag
314syntax errors.
315
316=item B<SSL_CONF_TYPE_STRING>
317
318The value is a string without any specific structure.
319
320=item B<SSL_CONF_TYPE_FILE>
321
322The value is a file name.
323
324=item B<SSL_CONF_TYPE_DIR>
325
326The value is a directory name.
327
3db935a9
DSH
328=head1 NOTES
329
330The order of operations is significant. This can be used to set either defaults
331or values which cannot be overridden. For example if an application calls:
332
333 SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
334 SSL_CONF_cmd(ctx, userparam, uservalue);
335
336it will disable SSLv2 support by default but the user can override it. If
337however the call sequence is:
338
339 SSL_CONF_cmd(ctx, userparam, uservalue);
340 SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
341
342SSLv2 is B<always> disabled and attempt to override this by the user are
343ignored.
344
345By checking the return code of SSL_CTX_cmd() it is possible to query if a
346given B<cmd> is recognised, this is useful is SSL_CTX_cmd() values are
347mixed with additional application specific operations.
348
349For example an application might call SSL_CTX_cmd() and if it returns
350-2 (unrecognised command) continue with processing of application specific
351commands.
352
353Applications can also use SSL_CTX_cmd() to process command lines though the
354utility function SSL_CTX_cmd_argv() is normally used instead. One way
821244cf
DSH
355to do this is to set the prefix to an appropriate value using
356SSL_CONF_CTX_set1_prefix(), pass the current argument to B<cmd> and the
357following argument to B<value> (which may be NULL).
3db935a9
DSH
358
359In this case if the return value is positive then it is used to skip that
360number of arguments as they have been processed by SSL_CTX_cmd(). If -2 is
361returned then B<cmd> is not recognised and application specific arguments
362can be checked instead. If -3 is returned a required argument is missing
363and an error is indicated. If 0 is returned some other error occurred and
364this can be reported back to the user.
365
ec2f7e56
DSH
366The function SSL_CONF_cmd_value_type() can be used by applications to
367check for the existence of a command or to perform additional syntax
368checking or translation of the command value. For example if the return
369value is B<SSL_CONF_TYPE_FILE> an application could translate a relative
370pathname to an absolute pathname.
371
3db935a9
DSH
372=head1 EXAMPLES
373
374Set supported signature algorithms:
375
376 SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256");
377
378Enable all protocols except SSLv3 and SSLv2:
379
380 SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3,-SSLv2");
381
382Only enable TLSv1.2:
383
384 SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2");
385
386Disable TLS session tickets:
387
388 SSL_CONF_cmd(ctx, "Options", "-SessionTicket");
389
390Set supported curves to P-256, P-384:
391
392 SSL_CONF_cmd(ctx, "Curves", "P-256:P-384");
393
394Set automatic support for any elliptic curve for key exchange:
395
396 SSL_CONF_cmd(ctx, "ECDHParameters", "Automatic");
397
398=head1 RETURN VALUES
399
4365e4aa 400SSL_CONF_cmd() returns 1 if the value of B<cmd> is recognised and B<value> is
3db935a9
DSH
401B<NOT> used and 2 if both B<cmd> and B<value> are used. In other words it
402returns the number of arguments processed. This is useful when processing
403command lines.
404
405A return value of -2 means B<cmd> is not recognised.
406
407A return value of -3 means B<cmd> is recognised and the command requires a
408value but B<value> is NULL.
409
410A return code of 0 indicates that both B<cmd> and B<value> are valid but an
411error occurred attempting to perform the operation: for example due to an
412error in the syntax of B<value> in this case the error queue may provide
413additional information.
414
ec2f7e56
DSH
415SSL_CONF_finish() returns 1 for success and 0 for failure.
416
3db935a9
DSH
417=head1 SEE ALSO
418
419L<SSL_CONF_CTX_new(3)|SSL_CONF_CTX_new(3)>,
420L<SSL_CONF_CTX_set_flags(3)|SSL_CONF_CTX_set_flags(3)>,
421L<SSL_CONF_CTX_set1_prefix(3)|SSL_CONF_CTX_set1_prefix(3)>,
422L<SSL_CONF_CTX_set_ssl_ctx(3)|SSL_CONF_CTX_set_ssl_ctx(3)>,
423L<SSL_CONF_cmd_argv(3)|SSL_CONF_cmd_argv(3)>
424
425=head1 HISTORY
426
4365e4aa 427SSL_CONF_cmd() was first added to OpenSSL 1.0.2
3db935a9
DSH
428
429=cut