]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/ssl/SSL_CONF_cmd.pod
Add SSL_CONF command to set DH Parameters.
[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
32and are case sensitive. Unless otherwise stated commands can be used by
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
c557f921
DSH
194=item B<DHParameters>
195
196Attempts to use the file B<value> as the set of temporary DH parameters for
197the appropriate context. This option is only supported if certificate
198operations are permitted.
199
3db935a9
DSH
200=item B<SignatureAlgorithms>
201
202This sets the supported signature algorithms for TLS v1.2. For clients this
203value is used directly for the supported signature algorithms extension. For
204servers it is used to determine which signature algorithms to support.
205
206The B<value> argument should be a colon separated list of signature algorithms
207in order of decreasing preference of the form B<algorithm+hash>. B<algorithm>
208is one of B<RSA>, B<DSA> or B<ECDSA> and B<hash> is a supported algorithm
209OID short name such as B<SHA1>, B<SHA224>, B<SHA256>, B<SHA384> of B<SHA512>.
210Note: algorithm and hash names are case sensitive.
211
212If this option is not set then all signature algorithms supported by the
213OpenSSL library are permissible.
214
215=item B<ClientSignatureAlgorithms>
216
217This sets the supported signature algorithms associated with client
218authentication for TLS v1.2. For servers the value is used in the supported
219signature algorithms field of a certificate request. For clients it is
c7b7984a 220used to determine which signature algorithm to with the client certificate.
3db935a9
DSH
221
222The syntax of B<value> is identical to B<SignatureAlgorithms>. If not set then
223the value set for B<SignatureAlgorithms> will be used instead.
224
225=item B<Curves>
226
65f2a565
DSH
227This sets the supported elliptic curves. For clients the curves are
228sent using the supported curves extension. For servers it is used
c7b7984a
DSH
229to determine which curve to use. This setting affects curves used for both
230signatures and key exchange, if applicable.
3db935a9
DSH
231
232The B<value> argument is a colon separated list of curves. The curve can be
233either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name (e.g
234B<prime256v1>). Curve names are case sensitive.
235
236=item B<ECDHParameters>
237
13cfb043
DSH
238This sets the temporary curve used for ephemeral ECDH modes. Only used by
239servers
3db935a9
DSH
240
241The B<value> argument is a curve name or the special value B<Automatic> which
c7b7984a
DSH
242picks an appropriate curve based on client and server preferences. The curve
243can be either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name
244(e.g B<prime256v1>). Curve names are case sensitive.
3db935a9
DSH
245
246=item B<Protocol>
247
248The supported versions of the SSL or TLS protocol.
249
250The B<value> argument is a comma separated list of supported protocols to
251enable or disable. If an protocol is preceded by B<-> that version is disabled.
252All versions are enabled by default, though applications may choose to
c7b7984a
DSH
253explicitly disable some. Currently supported protocol values are B<SSLv2>,
254B<SSLv3>, B<TLSv1>, B<TLSv1.1> and B<TLSv1.2>. The special value B<ALL> refers
255to all supported versions.
3db935a9
DSH
256
257=item B<Options>
258
259The B<value> argument is a comma separated list of various flags to set.
260If a flag string is preceded B<-> it is disabled. See the
261B<SSL_CTX_set_options> function for more details of individual options.
262
263Each option is listed below. Where an operation is enabled by default
264the B<-flag> syntax is needed to disable it.
265
266B<SessionTicket>: session ticket support, enabled by default. Inverse of
267B<SSL_OP_NO_TICKET>: that is B<-SessionTicket> is the same as setting
268B<SSL_OP_NO_TICKET>.
269
270B<Compression>: SSL/TLS compression support, enabled by default. Inverse
271of B<SSL_OP_NO_COMPRESSION>.
272
273B<EmptyFragments>: use empty fragments as a countermeasure against a
274SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. It
275is set by default. Inverse of B<SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS>.
276
c7b7984a 277B<Bugs>: enable various bug workarounds. Same as B<SSL_OP_ALL>.
3db935a9 278
c7b7984a 279B<DHSingle>: enable single use DH keys, set by default. Inverse of
3db935a9
DSH
280B<SSL_OP_DH_SINGLE>. Only used by servers.
281
282B<ECDHSingle> enable single use ECDH keys, set by default. Inverse of
283B<SSL_OP_ECDH_SINGLE>. Only used by servers.
284
285B<ServerPreference> use server and not client preference order when
286determining which cipher suite, signature algorithm or elliptic curve
287to use for an incoming connection. Equivalent to
288B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
289
290B<UnsafeLegacyRenegotiation> permits the use of unsafe legacy renegotiation.
291Equivalent to B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
292
293B<UnsafeLegacyServerConnect> permits the use of unsafe legacy renegotiation
294for OpenSSL clients only. Equivalent to B<SSL_OP_LEGACY_SERVER_CONNECT>.
295Set by default.
296
297=back
298
ec2f7e56
DSH
299=head1 SUPPORTED COMMAND TYPES
300
301The function SSL_CONF_cmd_value_type() currently returns one of the following
302types:
303
304=over 4
305
306=item B<SSL_CONF_TYPE_UNKNOWN>
307
308The B<cmd> string is unrecognised, this return value can be use to flag
309syntax errors.
310
311=item B<SSL_CONF_TYPE_STRING>
312
313The value is a string without any specific structure.
314
315=item B<SSL_CONF_TYPE_FILE>
316
317The value is a file name.
318
319=item B<SSL_CONF_TYPE_DIR>
320
321The value is a directory name.
322
3db935a9
DSH
323=head1 NOTES
324
325The order of operations is significant. This can be used to set either defaults
326or values which cannot be overridden. For example if an application calls:
327
328 SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
329 SSL_CONF_cmd(ctx, userparam, uservalue);
330
331it will disable SSLv2 support by default but the user can override it. If
332however the call sequence is:
333
334 SSL_CONF_cmd(ctx, userparam, uservalue);
335 SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
336
337SSLv2 is B<always> disabled and attempt to override this by the user are
338ignored.
339
340By checking the return code of SSL_CTX_cmd() it is possible to query if a
341given B<cmd> is recognised, this is useful is SSL_CTX_cmd() values are
342mixed with additional application specific operations.
343
344For example an application might call SSL_CTX_cmd() and if it returns
345-2 (unrecognised command) continue with processing of application specific
346commands.
347
348Applications can also use SSL_CTX_cmd() to process command lines though the
349utility function SSL_CTX_cmd_argv() is normally used instead. One way
821244cf
DSH
350to do this is to set the prefix to an appropriate value using
351SSL_CONF_CTX_set1_prefix(), pass the current argument to B<cmd> and the
352following argument to B<value> (which may be NULL).
3db935a9
DSH
353
354In this case if the return value is positive then it is used to skip that
355number of arguments as they have been processed by SSL_CTX_cmd(). If -2 is
356returned then B<cmd> is not recognised and application specific arguments
357can be checked instead. If -3 is returned a required argument is missing
358and an error is indicated. If 0 is returned some other error occurred and
359this can be reported back to the user.
360
ec2f7e56
DSH
361The function SSL_CONF_cmd_value_type() can be used by applications to
362check for the existence of a command or to perform additional syntax
363checking or translation of the command value. For example if the return
364value is B<SSL_CONF_TYPE_FILE> an application could translate a relative
365pathname to an absolute pathname.
366
3db935a9
DSH
367=head1 EXAMPLES
368
369Set supported signature algorithms:
370
371 SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256");
372
373Enable all protocols except SSLv3 and SSLv2:
374
375 SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3,-SSLv2");
376
377Only enable TLSv1.2:
378
379 SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2");
380
381Disable TLS session tickets:
382
383 SSL_CONF_cmd(ctx, "Options", "-SessionTicket");
384
385Set supported curves to P-256, P-384:
386
387 SSL_CONF_cmd(ctx, "Curves", "P-256:P-384");
388
389Set automatic support for any elliptic curve for key exchange:
390
391 SSL_CONF_cmd(ctx, "ECDHParameters", "Automatic");
392
393=head1 RETURN VALUES
394
4365e4aa 395SSL_CONF_cmd() returns 1 if the value of B<cmd> is recognised and B<value> is
3db935a9
DSH
396B<NOT> used and 2 if both B<cmd> and B<value> are used. In other words it
397returns the number of arguments processed. This is useful when processing
398command lines.
399
400A return value of -2 means B<cmd> is not recognised.
401
402A return value of -3 means B<cmd> is recognised and the command requires a
403value but B<value> is NULL.
404
405A return code of 0 indicates that both B<cmd> and B<value> are valid but an
406error occurred attempting to perform the operation: for example due to an
407error in the syntax of B<value> in this case the error queue may provide
408additional information.
409
ec2f7e56
DSH
410SSL_CONF_finish() returns 1 for success and 0 for failure.
411
3db935a9
DSH
412=head1 SEE ALSO
413
414L<SSL_CONF_CTX_new(3)|SSL_CONF_CTX_new(3)>,
415L<SSL_CONF_CTX_set_flags(3)|SSL_CONF_CTX_set_flags(3)>,
416L<SSL_CONF_CTX_set1_prefix(3)|SSL_CONF_CTX_set1_prefix(3)>,
417L<SSL_CONF_CTX_set_ssl_ctx(3)|SSL_CONF_CTX_set_ssl_ctx(3)>,
418L<SSL_CONF_cmd_argv(3)|SSL_CONF_cmd_argv(3)>
419
420=head1 HISTORY
421
4365e4aa 422SSL_CONF_cmd() was first added to OpenSSL 1.0.2
3db935a9
DSH
423
424=cut