]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/ssl/SSL_CONF_cmd.pod
add SSL_CONF functions and documentation
[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);
12
13=head1 DESCRIPTION
14
15The function SSL_CONF_cmd() performs configuration operation B<cmd> with
16optional parameter B<value> on B<ctx>. Its purpose is to simplify application
17configuration of B<SSL_CTX> or B<SSL> structures by providing a common
18framework for configuration files or command line options.
19
20=head1 SUPPORTED CONFIGURATION FILE COMMANDS
21
22Currently supported B<cmd> names for configuration files (i.e. when the
23flag B<SSL_CONF_FLAG_FILE> is set) are listed below. All configuration file
24B<cmd> names and are case insensitive so B<signaturealgorithms> is recognised
25as well as B<SignatureAlgorithms>. Unless otherwise states the B<value> names
26are also case insensitive.
27
28Note: the command prefix (if set) alters the recognised B<cmd> values.
29
30=over 4
31
32=item B<CipherSuite>
33
34Sets the cipher suite list to B<value>. Note: syntax checking of B<value> is
35currently not performed unless a B<SSL> or B<SSL_CTX> structure is
36associated with B<cctx>.
37
38=item B<SignatureAlgorithms>
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<ClientSignatureAlgorithms>
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 use for the client certificate.
59
60The syntax of B<value> is identical to B<SignatureAlgorithms>. If not set then
61the value set for B<SignatureAlgorithms> will be used instead.
62
63=item B<Curves>
64
65This sets the supported elliptic curves. For servers the curves are
66sent using the supported curves extension to TLS. For clients the it is used
67to determine which curve to use. This affects curves used for both signatures
68and key exchange.
69
70The B<value> argument is a colon separated list of curves. The curve can be
71either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name (e.g
72B<prime256v1>). Curve names are case sensitive.
73
74=item B<ECDHParameters>
75
76This sets the temporary curve used for ephemeral ECDH modes.
77
78The B<value> argument is a curve name or the special value B<Automatic> which
79automatically picks an appropriate curve based on client and server
80preferences. The curve can be either the B<NIST> name (e.g. B<P-256>) or an
81OpenSSL OID name (e.g B<prime256v1>). Curve names are case sensitive.
82
83=item B<Protocol>
84
85The supported versions of the SSL or TLS protocol.
86
87The B<value> argument is a comma separated list of supported protocols to
88enable or disable. If an protocol is preceded by B<-> that version is disabled.
89All versions are enabled by default, though applications may choose to
90explicitly disable some version. Currently supported protocol
91values are B<SSLv2>, B<SSLv3>, B<TLSv1>, B<TLSv1.1> and B<TLSv1.2>. The
92special value B<ALL> refers to all supported versions.
93
94=item B<Options>
95
96The B<value> argument is a comma separated list of various flags to set.
97If a flag string is preceded B<-> it is disabled. See the
98B<SSL_CTX_set_options> function for more details of individual options.
99
100Each option is listed below. Where an operation is enabled by default
101the B<-flag> syntax is needed to disable it.
102
103B<SessionTicket>: session ticket support, enabled by default. Inverse of
104B<SSL_OP_NO_TICKET>: that is B<-SessionTicket> is the same as setting
105B<SSL_OP_NO_TICKET>.
106
107B<Compression>: SSL/TLS compression support, enabled by default. Inverse
108of B<SSL_OP_NO_COMPRESSION>.
109
110B<EmptyFragments>: use empty fragments as a countermeasure against a
111SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. It
112is set by default. Inverse of B<SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS>.
113
114B<Bugs> enable various bug workarounds. Same as B<SSL_OP_ALL>.
115
116B<DHSingle> enable single use DH keys, set by default. Inverse of
117B<SSL_OP_DH_SINGLE>. Only used by servers.
118
119B<ECDHSingle> enable single use ECDH keys, set by default. Inverse of
120B<SSL_OP_ECDH_SINGLE>. Only used by servers.
121
122B<ServerPreference> use server and not client preference order when
123determining which cipher suite, signature algorithm or elliptic curve
124to use for an incoming connection. Equivalent to
125B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
126
127B<UnsafeLegacyRenegotiation> permits the use of unsafe legacy renegotiation.
128Equivalent to B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
129
130B<UnsafeLegacyServerConnect> permits the use of unsafe legacy renegotiation
131for OpenSSL clients only. Equivalent to B<SSL_OP_LEGACY_SERVER_CONNECT>.
132Set by default.
133
134=back
135
136=head1 SUPPORTED COMMAND LINE COMMANDS
137
138Currently supported B<cmd> names for command lines (i.e. when the
139flag B<SSL_CONF_CMDLINE> is set) are listed below. Note: all B<cmd> names
140and are case sensitive. Unless otherwise stated the B<value> parameter is
141noh used. The default prefix for command line commands is B<-> and that is
142reflected below.
143
144=over 4
145
146=item B<-sigalgs>
147
148Sets the supported signature algorithms to B<value>. Equivalent to the
149B<SignatureAlgorithms> file command.
150
151=item B<-client_sigalgs>
152
153Sets the supported client signature algorithms to B<value>. Equivalent to the
154B<ClientSignatureAlgorithms> file command.
155
156=item B<-curves>
157
158Sets supported elliptic curves to B<value>. Equivalent to B<Curves> file
159command.
160
161=item B<-named_curve>
162
163Sets supported ECDH parameters to B<value>. For automatic curve selection
164B<value> should be set to B<auto>, otherwise the command is identical to
165the B<ECDHParameters> file command.
166
167=item B<-cipher>
168
169Sets the cipher suite list to B<value>. Note: syntax checking of B<value> is
170currently not performed unless a B<SSL> or B<SSL_CTX> structure is
171associated with B<cctx>.
172
173=item B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>
174
175Disables protocol support for SSLv2, SSLv3, TLS 1.0, TLS 1.1 or TLS 1.2
176by setting the corresponding options B<SSL_OP_NO_SSL2>, B<SSL_OP_NO_SSL3>,
177B<SSL_OP_NO_TLS1> B<SSL_OP_NO_TLS1_1> and B<SSL_OP_NO_TLS1_2> respectively.
178
179=item B<-bugs>
180
181Various bug workarounds are set, same as setting B<SSL_OP_ALL>.
182
183=item B<-no_comp>
184
185Disables support for SSL/TLS compression, same as setting B<SSL_OP_NO_COMPRESS>.
186
187=item B<-no_ticket>
188
189Disables support for session tickets, same as setting B<SSL_OP_NO_TICKET>.
190
191=item B<-serverpref>
192
193Use server and not client preference order when determining which cipher suite,
194signature algorithm or elliptic curve to use for an incoming connection.
195Equivalent to B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
196
197=item B<-legacyrenegotiation>
198
199permits the use of unsafe legacy renegotiation. Equivalent to setting
200B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
201
202=item B<-legacy_server_connect>, B<-no_legacy_server_connect>
203
204permits or prohibits the use of unsafe legacy renegotiation for OpenSSL
205clients only. Equivalent to setting or clearing B<SSL_OP_LEGACY_SERVER_CONNECT>.
206Set by default.
207
208=item B<-strict>
209
210enables strict mode protocol handling. Equivalent to setting
211B<SSL_CERT_FLAG_TLS_STRICT>.
212
213=item B<-debug_broken_protocol>
214
215disables various checks and permits several kinds of broken protocol behaviour
216for testing purposes: it should B<NEVER> be used in anything other than a test
217environment. Only supported if OpenSSL is configured with
218B<-DOPENSSL_SSL_DEBUG_BROKEN_PROTOCOL>.
219
220=back
221
222=head1 NOTES
223
224The order of operations is significant. This can be used to set either defaults
225or values which cannot be overridden. For example if an application calls:
226
227 SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
228 SSL_CONF_cmd(ctx, userparam, uservalue);
229
230it will disable SSLv2 support by default but the user can override it. If
231however the call sequence is:
232
233 SSL_CONF_cmd(ctx, userparam, uservalue);
234 SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
235
236SSLv2 is B<always> disabled and attempt to override this by the user are
237ignored.
238
239By checking the return code of SSL_CTX_cmd() it is possible to query if a
240given B<cmd> is recognised, this is useful is SSL_CTX_cmd() values are
241mixed with additional application specific operations.
242
243For example an application might call SSL_CTX_cmd() and if it returns
244-2 (unrecognised command) continue with processing of application specific
245commands.
246
247Applications can also use SSL_CTX_cmd() to process command lines though the
248utility function SSL_CTX_cmd_argv() is normally used instead. One way
249to do this is to check for an initial prefix ("-", "--" or "--ssl-" for example)
250on a command argument and pass the rest to B<cmd>. The following argument
251is passed to B<value> (which may be NULL).
252
253In this case if the return value is positive then it is used to skip that
254number of arguments as they have been processed by SSL_CTX_cmd(). If -2 is
255returned then B<cmd> is not recognised and application specific arguments
256can be checked instead. If -3 is returned a required argument is missing
257and an error is indicated. If 0 is returned some other error occurred and
258this can be reported back to the user.
259
260=head1 EXAMPLES
261
262Set supported signature algorithms:
263
264 SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256");
265
266Enable all protocols except SSLv3 and SSLv2:
267
268 SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3,-SSLv2");
269
270Only enable TLSv1.2:
271
272 SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2");
273
274Disable TLS session tickets:
275
276 SSL_CONF_cmd(ctx, "Options", "-SessionTicket");
277
278Set supported curves to P-256, P-384:
279
280 SSL_CONF_cmd(ctx, "Curves", "P-256:P-384");
281
282Set automatic support for any elliptic curve for key exchange:
283
284 SSL_CONF_cmd(ctx, "ECDHParameters", "Automatic");
285
286=head1 RETURN VALUES
287
288SSL_CONF_cmd() return 1 if the value of B<cmd> is recognised and B<value> is
289B<NOT> used and 2 if both B<cmd> and B<value> are used. In other words it
290returns the number of arguments processed. This is useful when processing
291command lines.
292
293A return value of -2 means B<cmd> is not recognised.
294
295A return value of -3 means B<cmd> is recognised and the command requires a
296value but B<value> is NULL.
297
298A return code of 0 indicates that both B<cmd> and B<value> are valid but an
299error occurred attempting to perform the operation: for example due to an
300error in the syntax of B<value> in this case the error queue may provide
301additional information.
302
303=head1 SEE ALSO
304
305L<SSL_CONF_CTX_new(3)|SSL_CONF_CTX_new(3)>,
306L<SSL_CONF_CTX_set_flags(3)|SSL_CONF_CTX_set_flags(3)>,
307L<SSL_CONF_CTX_set1_prefix(3)|SSL_CONF_CTX_set1_prefix(3)>,
308L<SSL_CONF_CTX_set_ssl_ctx(3)|SSL_CONF_CTX_set_ssl_ctx(3)>,
309L<SSL_CONF_cmd_argv(3)|SSL_CONF_cmd_argv(3)>
310
311=head1 HISTORY
312
313SSL_CONF_cmd() was first added to OpenSSL 1.1.0
314
315=cut