1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | SSL_CONF_cmd_value_type,
|
---|
6 | SSL_CONF_cmd - send configuration command
|
---|
7 |
|
---|
8 | =head1 SYNOPSIS
|
---|
9 |
|
---|
10 | #include <openssl/ssl.h>
|
---|
11 |
|
---|
12 | int SSL_CONF_cmd(SSL_CONF_CTX *ctx, const char *option, const char *value);
|
---|
13 | int SSL_CONF_cmd_value_type(SSL_CONF_CTX *ctx, const char *option);
|
---|
14 |
|
---|
15 | =head1 DESCRIPTION
|
---|
16 |
|
---|
17 | The function SSL_CONF_cmd() performs configuration operation B<option> with
|
---|
18 | optional parameter B<value> on B<ctx>. Its purpose is to simplify application
|
---|
19 | configuration of B<SSL_CTX> or B<SSL> structures by providing a common
|
---|
20 | framework for command line options or configuration files.
|
---|
21 |
|
---|
22 | SSL_CONF_cmd_value_type() returns the type of value that B<option> refers to.
|
---|
23 |
|
---|
24 | =head1 SUPPORTED COMMAND LINE COMMANDS
|
---|
25 |
|
---|
26 | Currently supported B<option> names for command lines (i.e. when the
|
---|
27 | flag B<SSL_CONF_FLAG_CMDLINE> is set) are listed below. Note: all B<option>
|
---|
28 | names are case sensitive. Unless otherwise stated commands can be used by
|
---|
29 | both clients and servers and the B<value> parameter is not used. The default
|
---|
30 | prefix for command line commands is B<-> and that is reflected below.
|
---|
31 |
|
---|
32 | =over 4
|
---|
33 |
|
---|
34 | =item B<-bugs>
|
---|
35 |
|
---|
36 | Various bug workarounds are set, same as setting B<SSL_OP_ALL>.
|
---|
37 |
|
---|
38 | =item B<-no_comp>
|
---|
39 |
|
---|
40 | Disables support for SSL/TLS compression, same as setting
|
---|
41 | B<SSL_OP_NO_COMPRESSION>.
|
---|
42 | As of OpenSSL 1.1.0, compression is off by default.
|
---|
43 |
|
---|
44 | =item B<-comp>
|
---|
45 |
|
---|
46 | Enables support for SSL/TLS compression, same as clearing
|
---|
47 | B<SSL_OP_NO_COMPRESSION>.
|
---|
48 | This command was introduced in OpenSSL 1.1.0.
|
---|
49 | As of OpenSSL 1.1.0, compression is off by default.
|
---|
50 |
|
---|
51 | =item B<-no_ticket>
|
---|
52 |
|
---|
53 | Disables support for session tickets, same as setting B<SSL_OP_NO_TICKET>.
|
---|
54 |
|
---|
55 | =item B<-serverpref>
|
---|
56 |
|
---|
57 | Use server and not client preference order when determining which cipher suite,
|
---|
58 | signature algorithm or elliptic curve to use for an incoming connection.
|
---|
59 | Equivalent to B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
|
---|
60 |
|
---|
61 | =item B<-client_renegotiation>
|
---|
62 |
|
---|
63 | Allows servers to accept client-initiated renegotiation. Equivalent to
|
---|
64 | setting B<SSL_OP_ALLOW_CLIENT_RENEGOTIATION>.
|
---|
65 | Only used by servers.
|
---|
66 |
|
---|
67 | =item B<-legacyrenegotiation>
|
---|
68 |
|
---|
69 | Permits the use of unsafe legacy renegotiation. Equivalent to setting
|
---|
70 | B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
|
---|
71 |
|
---|
72 | =item B<-no_renegotiation>
|
---|
73 |
|
---|
74 | Disables all attempts at renegotiation in TLSv1.2 and earlier, same as setting
|
---|
75 | B<SSL_OP_NO_RENEGOTIATION>.
|
---|
76 |
|
---|
77 | =item B<-no_resumption_on_reneg>
|
---|
78 |
|
---|
79 | Sets B<SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION>. Only used by servers.
|
---|
80 |
|
---|
81 | =item B<-legacy_server_connect>, B<-no_legacy_server_connect>
|
---|
82 |
|
---|
83 | Permits or prohibits the use of unsafe legacy renegotiation for OpenSSL
|
---|
84 | clients only. Equivalent to setting or clearing B<SSL_OP_LEGACY_SERVER_CONNECT>.
|
---|
85 |
|
---|
86 | =item B<-prioritize_chacha>
|
---|
87 |
|
---|
88 | Prioritize ChaCha ciphers when the client has a ChaCha20 cipher at the top of
|
---|
89 | its preference list. This usually indicates a client without AES hardware
|
---|
90 | acceleration (e.g. mobile) is in use. Equivalent to B<SSL_OP_PRIORITIZE_CHACHA>.
|
---|
91 | Only used by servers. Requires B<-serverpref>.
|
---|
92 |
|
---|
93 | =item B<-allow_no_dhe_kex>
|
---|
94 |
|
---|
95 | In TLSv1.3 allow a non-(ec)dhe based key exchange mode on resumption. This means
|
---|
96 | that there will be no forward secrecy for the resumed session.
|
---|
97 |
|
---|
98 | =item B<-strict>
|
---|
99 |
|
---|
100 | Enables strict mode protocol handling. Equivalent to setting
|
---|
101 | B<SSL_CERT_FLAG_TLS_STRICT>.
|
---|
102 |
|
---|
103 | =item B<-sigalgs> I<algs>
|
---|
104 |
|
---|
105 | This sets the supported signature algorithms for TLSv1.2 and TLSv1.3.
|
---|
106 | For clients this value is used directly for the supported signature
|
---|
107 | algorithms extension. For servers it is used to determine which signature
|
---|
108 | algorithms to support.
|
---|
109 |
|
---|
110 | The B<algs> argument should be a colon separated list of signature
|
---|
111 | algorithms in order of decreasing preference of the form B<algorithm+hash>
|
---|
112 | or B<signature_scheme>. B<algorithm> is one of B<RSA>, B<DSA> or B<ECDSA> and
|
---|
113 | B<hash> is a supported algorithm OID short name such as B<SHA1>, B<SHA224>,
|
---|
114 | B<SHA256>, B<SHA384> of B<SHA512>. Note: algorithm and hash names are case
|
---|
115 | sensitive. B<signature_scheme> is one of the signature schemes defined in
|
---|
116 | TLSv1.3, specified using the IETF name, e.g., B<ecdsa_secp256r1_sha256>,
|
---|
117 | B<ed25519>, or B<rsa_pss_pss_sha256>.
|
---|
118 |
|
---|
119 | If this option is not set then all signature algorithms supported by the
|
---|
120 | OpenSSL library are permissible.
|
---|
121 |
|
---|
122 | Note: algorithms which specify a PKCS#1 v1.5 signature scheme (either by
|
---|
123 | using B<RSA> as the B<algorithm> or by using one of the B<rsa_pkcs1_*>
|
---|
124 | identifiers) are ignored in TLSv1.3 and will not be negotiated.
|
---|
125 |
|
---|
126 | =item B<-client_sigalgs> I<algs>
|
---|
127 |
|
---|
128 | This sets the supported signature algorithms associated with client
|
---|
129 | authentication for TLSv1.2 and TLSv1.3. For servers the B<algs> is used
|
---|
130 | in the B<signature_algorithms> field of a B<CertificateRequest> message.
|
---|
131 | For clients it is used to determine which signature algorithm to use with
|
---|
132 | the client certificate. If a server does not request a certificate this
|
---|
133 | option has no effect.
|
---|
134 |
|
---|
135 | The syntax of B<algs> is identical to B<-sigalgs>. If not set, then the
|
---|
136 | value set for B<-sigalgs> will be used instead.
|
---|
137 |
|
---|
138 | =item B<-groups> I<groups>
|
---|
139 |
|
---|
140 | This sets the supported groups. For clients, the groups are sent using
|
---|
141 | the supported groups extension. For servers, it is used to determine which
|
---|
142 | group to use. This setting affects groups used for signatures (in TLSv1.2
|
---|
143 | and earlier) and key exchange. The first group listed will also be used
|
---|
144 | for the B<key_share> sent by a client in a TLSv1.3 B<ClientHello>.
|
---|
145 |
|
---|
146 | The B<groups> argument is a colon separated list of groups. The group can
|
---|
147 | be either the B<NIST> name (e.g. B<P-256>), some other commonly used name
|
---|
148 | where applicable (e.g. B<X25519>, B<ffdhe2048>) or an OpenSSL OID name
|
---|
149 | (e.g. B<prime256v1>). Group names are case sensitive. The list should be
|
---|
150 | in order of preference with the most preferred group first.
|
---|
151 |
|
---|
152 | Currently supported groups for B<TLSv1.3> are B<P-256>, B<P-384>, B<P-521>,
|
---|
153 | B<X25519>, B<X448>, B<ffdhe2048>, B<ffdhe3072>, B<ffdhe4096>, B<ffdhe6144>,
|
---|
154 | B<ffdhe8192>.
|
---|
155 |
|
---|
156 | =item B<-curves> I<groups>
|
---|
157 |
|
---|
158 | This is a synonym for the B<-groups> command.
|
---|
159 |
|
---|
160 | =item B<-named_curve> I<curve>
|
---|
161 |
|
---|
162 | This sets the temporary curve used for ephemeral ECDH modes. Only used
|
---|
163 | by servers.
|
---|
164 |
|
---|
165 | The B<groups> argument is a curve name or the special value B<auto> which
|
---|
166 | picks an appropriate curve based on client and server preferences. The
|
---|
167 | curve can be either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name
|
---|
168 | (e.g. B<prime256v1>). Curve names are case sensitive.
|
---|
169 |
|
---|
170 | =item B<-cipher> I<ciphers>
|
---|
171 |
|
---|
172 | Sets the TLSv1.2 and below ciphersuite list to B<ciphers>. This list will be
|
---|
173 | combined with any configured TLSv1.3 ciphersuites. Note: syntax checking
|
---|
174 | of B<ciphers> is currently not performed unless a B<SSL> or B<SSL_CTX>
|
---|
175 | structure is associated with B<ctx>.
|
---|
176 |
|
---|
177 | =item B<-ciphersuites> I<1.3ciphers>
|
---|
178 |
|
---|
179 | Sets the available ciphersuites for TLSv1.3 to value. This is a
|
---|
180 | colon-separated list of TLSv1.3 ciphersuite names in order of preference. This
|
---|
181 | list will be combined any configured TLSv1.2 and below ciphersuites.
|
---|
182 | See L<openssl-ciphers(1)> for more information.
|
---|
183 |
|
---|
184 | =item B<-min_protocol> I<minprot>, B<-max_protocol> I<maxprot>
|
---|
185 |
|
---|
186 | Sets the minimum and maximum supported protocol.
|
---|
187 | Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
|
---|
188 | B<TLSv1.2>, B<TLSv1.3> for TLS; B<DTLSv1>, B<DTLSv1.2> for DTLS, and B<None>
|
---|
189 | for no limit.
|
---|
190 | If either the lower or upper bound is not specified then only the other bound
|
---|
191 | applies, if specified.
|
---|
192 | If your application supports both TLS and DTLS you can specify any of these
|
---|
193 | options twice, once with a bound for TLS and again with an appropriate bound
|
---|
194 | for DTLS.
|
---|
195 | To restrict the supported protocol versions use these commands rather than the
|
---|
196 | deprecated alternative commands below.
|
---|
197 |
|
---|
198 | =item B<-record_padding> I<padding>
|
---|
199 |
|
---|
200 | Attempts to pad TLSv1.3 records so that they are a multiple of B<padding>
|
---|
201 | in length on send. A B<padding> of 0 or 1 turns off padding. Otherwise,
|
---|
202 | the B<padding> must be >1 or <=16384.
|
---|
203 |
|
---|
204 | =item B<-debug_broken_protocol>
|
---|
205 |
|
---|
206 | Ignored.
|
---|
207 |
|
---|
208 | =item B<-no_middlebox>
|
---|
209 |
|
---|
210 | Turn off "middlebox compatibility", as described below.
|
---|
211 |
|
---|
212 | =back
|
---|
213 |
|
---|
214 | =head2 Additional Options
|
---|
215 |
|
---|
216 | The following options are accepted by SSL_CONF_cmd(), but are not
|
---|
217 | processed by the OpenSSL commands.
|
---|
218 |
|
---|
219 | =over 4
|
---|
220 |
|
---|
221 | =item B<-cert> I<file>
|
---|
222 |
|
---|
223 | Attempts to use B<file> as the certificate for the appropriate context. It
|
---|
224 | currently uses SSL_CTX_use_certificate_chain_file() if an B<SSL_CTX>
|
---|
225 | structure is set or SSL_use_certificate_file() with filetype PEM if an
|
---|
226 | B<SSL> structure is set. This option is only supported if certificate
|
---|
227 | operations are permitted.
|
---|
228 |
|
---|
229 | =item B<-key> I<file>
|
---|
230 |
|
---|
231 | Attempts to use B<file> as the private key for the appropriate context. This
|
---|
232 | option is only supported if certificate operations are permitted. Note:
|
---|
233 | if no B<-key> option is set then a private key is not loaded unless the
|
---|
234 | flag B<SSL_CONF_FLAG_REQUIRE_PRIVATE> is set.
|
---|
235 |
|
---|
236 | =item B<-dhparam> I<file>
|
---|
237 |
|
---|
238 | Attempts to use B<file> as the set of temporary DH parameters for
|
---|
239 | the appropriate context. This option is only supported if certificate
|
---|
240 | operations are permitted.
|
---|
241 |
|
---|
242 | =item B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>, B<-no_tls1_3>
|
---|
243 |
|
---|
244 | Disables protocol support for SSLv3, TLSv1.0, TLSv1.1, TLSv1.2 or TLSv1.3 by
|
---|
245 | setting the corresponding options B<SSL_OP_NO_SSLv3>, B<SSL_OP_NO_TLSv1>,
|
---|
246 | B<SSL_OP_NO_TLSv1_1>, B<SSL_OP_NO_TLSv1_2> and B<SSL_OP_NO_TLSv1_3>
|
---|
247 | respectively. These options are deprecated, use B<-min_protocol> and
|
---|
248 | B<-max_protocol> instead.
|
---|
249 |
|
---|
250 | =item B<-anti_replay>, B<-no_anti_replay>
|
---|
251 |
|
---|
252 | Switches replay protection, on or off respectively. With replay protection on,
|
---|
253 | OpenSSL will automatically detect if a session ticket has been used more than
|
---|
254 | once, TLSv1.3 has been negotiated, and early data is enabled on the server. A
|
---|
255 | full handshake is forced if a session ticket is used a second or subsequent
|
---|
256 | time. Anti-Replay is on by default unless overridden by a configuration file and
|
---|
257 | is only used by servers. Anti-replay measures are required for compliance with
|
---|
258 | the TLSv1.3 specification. Some applications may be able to mitigate the replay
|
---|
259 | risks in other ways and in such cases the built-in OpenSSL functionality is not
|
---|
260 | required. Switching off anti-replay is equivalent to B<SSL_OP_NO_ANTI_REPLAY>.
|
---|
261 |
|
---|
262 | =back
|
---|
263 |
|
---|
264 | =head1 SUPPORTED CONFIGURATION FILE COMMANDS
|
---|
265 |
|
---|
266 | Currently supported B<option> names for configuration files (i.e., when the
|
---|
267 | flag B<SSL_CONF_FLAG_FILE> is set) are listed below. All configuration file
|
---|
268 | B<option> names are case insensitive so B<signaturealgorithms> is recognised
|
---|
269 | as well as B<SignatureAlgorithms>. Unless otherwise stated the B<value> names
|
---|
270 | are also case insensitive.
|
---|
271 |
|
---|
272 | Note: the command prefix (if set) alters the recognised B<option> values.
|
---|
273 |
|
---|
274 | =over 4
|
---|
275 |
|
---|
276 | =item B<CipherString>
|
---|
277 |
|
---|
278 | Sets the ciphersuite list for TLSv1.2 and below to B<value>. This list will be
|
---|
279 | combined with any configured TLSv1.3 ciphersuites. Note: syntax
|
---|
280 | checking of B<value> is currently not performed unless an B<SSL> or B<SSL_CTX>
|
---|
281 | structure is associated with B<ctx>.
|
---|
282 |
|
---|
283 | =item B<Ciphersuites>
|
---|
284 |
|
---|
285 | Sets the available ciphersuites for TLSv1.3 to B<value>. This is a
|
---|
286 | colon-separated list of TLSv1.3 ciphersuite names in order of preference. This
|
---|
287 | list will be combined any configured TLSv1.2 and below ciphersuites.
|
---|
288 | See L<openssl-ciphers(1)> for more information.
|
---|
289 |
|
---|
290 | =item B<Certificate>
|
---|
291 |
|
---|
292 | Attempts to use the file B<value> as the certificate for the appropriate
|
---|
293 | context. It currently uses SSL_CTX_use_certificate_chain_file() if an B<SSL_CTX>
|
---|
294 | structure is set or SSL_use_certificate_file() with filetype PEM if an B<SSL>
|
---|
295 | structure is set. This option is only supported if certificate operations
|
---|
296 | are permitted.
|
---|
297 |
|
---|
298 | =item B<PrivateKey>
|
---|
299 |
|
---|
300 | Attempts to use the file B<value> as the private key for the appropriate
|
---|
301 | context. This option is only supported if certificate operations
|
---|
302 | are permitted. Note: if no B<PrivateKey> option is set then a private key is
|
---|
303 | not loaded unless the B<SSL_CONF_FLAG_REQUIRE_PRIVATE> is set.
|
---|
304 |
|
---|
305 | =item B<ChainCAFile>, B<ChainCAPath>, B<VerifyCAFile>, B<VerifyCAPath>
|
---|
306 |
|
---|
307 | These options indicate a file or directory used for building certificate
|
---|
308 | chains or verifying certificate chains. These options are only supported
|
---|
309 | if certificate operations are permitted.
|
---|
310 |
|
---|
311 | =item B<RequestCAFile>
|
---|
312 |
|
---|
313 | This option indicates a file containing a set of certificates in PEM form.
|
---|
314 | The subject names of the certificates are sent to the peer in the
|
---|
315 | B<certificate_authorities> extension for TLS 1.3 (in ClientHello or
|
---|
316 | CertificateRequest) or in a certificate request for previous versions or
|
---|
317 | TLS.
|
---|
318 |
|
---|
319 | =item B<ServerInfoFile>
|
---|
320 |
|
---|
321 | Attempts to use the file B<value> in the "serverinfo" extension using the
|
---|
322 | function SSL_CTX_use_serverinfo_file.
|
---|
323 |
|
---|
324 | =item B<DHParameters>
|
---|
325 |
|
---|
326 | Attempts to use the file B<value> as the set of temporary DH parameters for
|
---|
327 | the appropriate context. This option is only supported if certificate
|
---|
328 | operations are permitted.
|
---|
329 |
|
---|
330 | =item B<RecordPadding>
|
---|
331 |
|
---|
332 | Attempts to pad TLSv1.3 records so that they are a multiple of B<value> in
|
---|
333 | length on send. A B<value> of 0 or 1 turns off padding. Otherwise, the
|
---|
334 | B<value> must be >1 or <=16384.
|
---|
335 |
|
---|
336 | =item B<SignatureAlgorithms>
|
---|
337 |
|
---|
338 | This sets the supported signature algorithms for TLSv1.2 and TLSv1.3.
|
---|
339 | For clients this
|
---|
340 | value is used directly for the supported signature algorithms extension. For
|
---|
341 | servers it is used to determine which signature algorithms to support.
|
---|
342 |
|
---|
343 | The B<value> argument should be a colon separated list of signature algorithms
|
---|
344 | in order of decreasing preference of the form B<algorithm+hash> or
|
---|
345 | B<signature_scheme>. B<algorithm>
|
---|
346 | is one of B<RSA>, B<DSA> or B<ECDSA> and B<hash> is a supported algorithm
|
---|
347 | OID short name such as B<SHA1>, B<SHA224>, B<SHA256>, B<SHA384> of B<SHA512>.
|
---|
348 | Note: algorithm and hash names are case sensitive.
|
---|
349 | B<signature_scheme> is one of the signature schemes defined in TLSv1.3,
|
---|
350 | specified using the IETF name, e.g., B<ecdsa_secp256r1_sha256>, B<ed25519>,
|
---|
351 | or B<rsa_pss_pss_sha256>.
|
---|
352 |
|
---|
353 | If this option is not set then all signature algorithms supported by the
|
---|
354 | OpenSSL library are permissible.
|
---|
355 |
|
---|
356 | Note: algorithms which specify a PKCS#1 v1.5 signature scheme (either by
|
---|
357 | using B<RSA> as the B<algorithm> or by using one of the B<rsa_pkcs1_*>
|
---|
358 | identifiers) are ignored in TLSv1.3 and will not be negotiated.
|
---|
359 |
|
---|
360 | =item B<ClientSignatureAlgorithms>
|
---|
361 |
|
---|
362 | This sets the supported signature algorithms associated with client
|
---|
363 | authentication for TLSv1.2 and TLSv1.3.
|
---|
364 | For servers the value is used in the
|
---|
365 | B<signature_algorithms> field of a B<CertificateRequest> message.
|
---|
366 | For clients it is
|
---|
367 | used to determine which signature algorithm to use with the client certificate.
|
---|
368 | If a server does not request a certificate this option has no effect.
|
---|
369 |
|
---|
370 | The syntax of B<value> is identical to B<SignatureAlgorithms>. If not set then
|
---|
371 | the value set for B<SignatureAlgorithms> will be used instead.
|
---|
372 |
|
---|
373 | =item B<Groups>
|
---|
374 |
|
---|
375 | This sets the supported groups. For clients, the groups are
|
---|
376 | sent using the supported groups extension. For servers, it is used
|
---|
377 | to determine which group to use. This setting affects groups used for
|
---|
378 | signatures (in TLSv1.2 and earlier) and key exchange. The first group listed
|
---|
379 | will also be used for the B<key_share> sent by a client in a TLSv1.3
|
---|
380 | B<ClientHello>.
|
---|
381 |
|
---|
382 | The B<value> argument is a colon separated list of groups. The group can be
|
---|
383 | either the B<NIST> name (e.g. B<P-256>), some other commonly used name where
|
---|
384 | applicable (e.g. B<X25519>, B<ffdhe2048>) or an OpenSSL OID name
|
---|
385 | (e.g. B<prime256v1>). Group names are case sensitive. The list should be in
|
---|
386 | order of preference with the most preferred group first.
|
---|
387 |
|
---|
388 | Currently supported groups for B<TLSv1.3> are B<P-256>, B<P-384>, B<P-521>,
|
---|
389 | B<X25519>, B<X448>, B<ffdhe2048>, B<ffdhe3072>, B<ffdhe4096>, B<ffdhe6144>,
|
---|
390 | B<ffdhe8192>.
|
---|
391 |
|
---|
392 | =item B<Curves>
|
---|
393 |
|
---|
394 | This is a synonym for the "Groups" command.
|
---|
395 |
|
---|
396 | =item B<MinProtocol>
|
---|
397 |
|
---|
398 | This sets the minimum supported SSL, TLS or DTLS version.
|
---|
399 |
|
---|
400 | Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
|
---|
401 | B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
|
---|
402 | The SSL and TLS bounds apply only to TLS-based contexts, while the DTLS bounds
|
---|
403 | apply only to DTLS-based contexts.
|
---|
404 | The command can be repeated with one instance setting a TLS bound, and the
|
---|
405 | other setting a DTLS bound.
|
---|
406 | The value B<None> applies to both types of contexts and disables the limits.
|
---|
407 |
|
---|
408 | =item B<MaxProtocol>
|
---|
409 |
|
---|
410 | This sets the maximum supported SSL, TLS or DTLS version.
|
---|
411 |
|
---|
412 | Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
|
---|
413 | B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
|
---|
414 | The SSL and TLS bounds apply only to TLS-based contexts, while the DTLS bounds
|
---|
415 | apply only to DTLS-based contexts.
|
---|
416 | The command can be repeated with one instance setting a TLS bound, and the
|
---|
417 | other setting a DTLS bound.
|
---|
418 | The value B<None> applies to both types of contexts and disables the limits.
|
---|
419 |
|
---|
420 | =item B<Protocol>
|
---|
421 |
|
---|
422 | This can be used to enable or disable certain versions of the SSL,
|
---|
423 | TLS or DTLS protocol.
|
---|
424 |
|
---|
425 | The B<value> argument is a comma separated list of supported protocols
|
---|
426 | to enable or disable.
|
---|
427 | If a protocol is preceded by B<-> that version is disabled.
|
---|
428 |
|
---|
429 | All protocol versions are enabled by default.
|
---|
430 | You need to disable at least one protocol version for this setting have any
|
---|
431 | effect.
|
---|
432 | Only enabling some protocol versions does not disable the other protocol
|
---|
433 | versions.
|
---|
434 |
|
---|
435 | Currently supported protocol values are B<SSLv3>, B<TLSv1>, B<TLSv1.1>,
|
---|
436 | B<TLSv1.2>, B<TLSv1.3>, B<DTLSv1> and B<DTLSv1.2>.
|
---|
437 | The special value B<ALL> refers to all supported versions.
|
---|
438 |
|
---|
439 | This can't enable protocols that are disabled using B<MinProtocol>
|
---|
440 | or B<MaxProtocol>, but can disable protocols that are still allowed
|
---|
441 | by them.
|
---|
442 |
|
---|
443 | The B<Protocol> command is fragile and deprecated; do not use it.
|
---|
444 | Use B<MinProtocol> and B<MaxProtocol> instead.
|
---|
445 | If you do use B<Protocol>, make sure that the resulting range of enabled
|
---|
446 | protocols has no "holes", e.g. if TLS 1.0 and TLS 1.2 are both enabled, make
|
---|
447 | sure to also leave TLS 1.1 enabled.
|
---|
448 |
|
---|
449 | =item B<Options>
|
---|
450 |
|
---|
451 | The B<value> argument is a comma separated list of various flags to set.
|
---|
452 | If a flag string is preceded B<-> it is disabled.
|
---|
453 | See the L<SSL_CTX_set_options(3)> function for more details of
|
---|
454 | individual options.
|
---|
455 |
|
---|
456 | Each option is listed below. Where an operation is enabled by default
|
---|
457 | the B<-flag> syntax is needed to disable it.
|
---|
458 |
|
---|
459 | B<SessionTicket>: session ticket support, enabled by default. Inverse of
|
---|
460 | B<SSL_OP_NO_TICKET>: that is B<-SessionTicket> is the same as setting
|
---|
461 | B<SSL_OP_NO_TICKET>.
|
---|
462 |
|
---|
463 | B<Compression>: SSL/TLS compression support, disabled by default. Inverse
|
---|
464 | of B<SSL_OP_NO_COMPRESSION>.
|
---|
465 |
|
---|
466 | B<EmptyFragments>: use empty fragments as a countermeasure against a
|
---|
467 | SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. It
|
---|
468 | is set by default. Inverse of B<SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS>.
|
---|
469 |
|
---|
470 | B<Bugs>: enable various bug workarounds. Same as B<SSL_OP_ALL>.
|
---|
471 |
|
---|
472 | B<DHSingle>: enable single use DH keys, set by default. Inverse of
|
---|
473 | B<SSL_OP_DH_SINGLE>. Only used by servers.
|
---|
474 |
|
---|
475 | B<ECDHSingle>: enable single use ECDH keys, set by default. Inverse of
|
---|
476 | B<SSL_OP_ECDH_SINGLE>. Only used by servers.
|
---|
477 |
|
---|
478 | B<ServerPreference>: use server and not client preference order when
|
---|
479 | determining which cipher suite, signature algorithm or elliptic curve
|
---|
480 | to use for an incoming connection. Equivalent to
|
---|
481 | B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
|
---|
482 |
|
---|
483 | B<PrioritizeChaCha>: prioritizes ChaCha ciphers when the client has a
|
---|
484 | ChaCha20 cipher at the top of its preference list. This usually indicates
|
---|
485 | a mobile client is in use. Equivalent to B<SSL_OP_PRIORITIZE_CHACHA>.
|
---|
486 | Only used by servers.
|
---|
487 |
|
---|
488 | B<NoResumptionOnRenegotiation>: set
|
---|
489 | B<SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION> flag. Only used by servers.
|
---|
490 |
|
---|
491 | B<NoRenegotiation>: disables all attempts at renegotiation in TLSv1.2 and
|
---|
492 | earlier, same as setting B<SSL_OP_NO_RENEGOTIATION>.
|
---|
493 |
|
---|
494 | B<UnsafeLegacyRenegotiation>: permits the use of unsafe legacy renegotiation.
|
---|
495 | Equivalent to B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
|
---|
496 |
|
---|
497 | B<UnsafeLegacyServerConnect>: permits the use of unsafe legacy renegotiation
|
---|
498 | for OpenSSL clients only. Equivalent to B<SSL_OP_LEGACY_SERVER_CONNECT>.
|
---|
499 |
|
---|
500 | B<EncryptThenMac>: use encrypt-then-mac extension, enabled by
|
---|
501 | default. Inverse of B<SSL_OP_NO_ENCRYPT_THEN_MAC>: that is,
|
---|
502 | B<-EncryptThenMac> is the same as setting B<SSL_OP_NO_ENCRYPT_THEN_MAC>.
|
---|
503 |
|
---|
504 | B<AllowNoDHEKEX>: In TLSv1.3 allow a non-(ec)dhe based key exchange mode on
|
---|
505 | resumption. This means that there will be no forward secrecy for the resumed
|
---|
506 | session. Equivalent to B<SSL_OP_ALLOW_NO_DHE_KEX>.
|
---|
507 |
|
---|
508 | B<MiddleboxCompat>: If set then dummy Change Cipher Spec (CCS) messages are sent
|
---|
509 | in TLSv1.3. This has the effect of making TLSv1.3 look more like TLSv1.2 so that
|
---|
510 | middleboxes that do not understand TLSv1.3 will not drop the connection. This
|
---|
511 | option is set by default. A future version of OpenSSL may not set this by
|
---|
512 | default. Equivalent to B<SSL_OP_ENABLE_MIDDLEBOX_COMPAT>.
|
---|
513 |
|
---|
514 | B<AntiReplay>: If set then OpenSSL will automatically detect if a session ticket
|
---|
515 | has been used more than once, TLSv1.3 has been negotiated, and early data is
|
---|
516 | enabled on the server. A full handshake is forced if a session ticket is used a
|
---|
517 | second or subsequent time. This option is set by default and is only used by
|
---|
518 | servers. Anti-replay measures are required to comply with the TLSv1.3
|
---|
519 | specification. Some applications may be able to mitigate the replay risks in
|
---|
520 | other ways and in such cases the built-in OpenSSL functionality is not required.
|
---|
521 | Disabling anti-replay is equivalent to setting B<SSL_OP_NO_ANTI_REPLAY>.
|
---|
522 |
|
---|
523 | B<ExtendedMasterSecret>: use extended master secret extension, enabled by
|
---|
524 | default. Inverse of B<SSL_OP_NO_EXTENDED_MASTER_SECRET>: that is,
|
---|
525 | B<-ExtendedMasterSecret> is the same as setting B<SSL_OP_NO_EXTENDED_MASTER_SECRET>.
|
---|
526 |
|
---|
527 | B<CANames>: use CA names extension, enabled by
|
---|
528 | default. Inverse of B<SSL_OP_DISABLE_TLSEXT_CA_NAMES>: that is,
|
---|
529 | B<-CANames> is the same as setting B<SSL_OP_DISABLE_TLSEXT_CA_NAMES>.
|
---|
530 |
|
---|
531 | B<KTLS>: Enables kernel TLS if support has been compiled in, and it is supported
|
---|
532 | by the negotiated ciphersuites and extensions. Equivalent to
|
---|
533 | B<SSL_OP_ENABLE_KTLS>.
|
---|
534 |
|
---|
535 | =item B<VerifyMode>
|
---|
536 |
|
---|
537 | The B<value> argument is a comma separated list of flags to set.
|
---|
538 |
|
---|
539 | B<Peer> enables peer verification: for clients only.
|
---|
540 |
|
---|
541 | B<Request> requests but does not require a certificate from the client.
|
---|
542 | Servers only.
|
---|
543 |
|
---|
544 | B<Require> requests and requires a certificate from the client: an error
|
---|
545 | occurs if the client does not present a certificate. Servers only.
|
---|
546 |
|
---|
547 | B<Once> requests a certificate from a client only on the initial connection:
|
---|
548 | not when renegotiating. Servers only.
|
---|
549 |
|
---|
550 | B<RequestPostHandshake> configures the connection to support requests but does
|
---|
551 | not require a certificate from the client post-handshake. A certificate will
|
---|
552 | not be requested during the initial handshake. The server application must
|
---|
553 | provide a mechanism to request a certificate post-handshake. Servers only.
|
---|
554 | TLSv1.3 only.
|
---|
555 |
|
---|
556 | B<RequiresPostHandshake> configures the connection to support requests and
|
---|
557 | requires a certificate from the client post-handshake: an error occurs if the
|
---|
558 | client does not present a certificate. A certificate will not be requested
|
---|
559 | during the initial handshake. The server application must provide a mechanism
|
---|
560 | to request a certificate post-handshake. Servers only. TLSv1.3 only.
|
---|
561 |
|
---|
562 | =item B<ClientCAFile>, B<ClientCAPath>
|
---|
563 |
|
---|
564 | A file or directory of certificates in PEM format whose names are used as the
|
---|
565 | set of acceptable names for client CAs. Servers only. This option is only
|
---|
566 | supported if certificate operations are permitted.
|
---|
567 |
|
---|
568 | =back
|
---|
569 |
|
---|
570 | =head1 SUPPORTED COMMAND TYPES
|
---|
571 |
|
---|
572 | The function SSL_CONF_cmd_value_type() currently returns one of the following
|
---|
573 | types:
|
---|
574 |
|
---|
575 | =over 4
|
---|
576 |
|
---|
577 | =item B<SSL_CONF_TYPE_UNKNOWN>
|
---|
578 |
|
---|
579 | The B<option> string is unrecognised, this return value can be use to flag
|
---|
580 | syntax errors.
|
---|
581 |
|
---|
582 | =item B<SSL_CONF_TYPE_STRING>
|
---|
583 |
|
---|
584 | The value is a string without any specific structure.
|
---|
585 |
|
---|
586 | =item B<SSL_CONF_TYPE_FILE>
|
---|
587 |
|
---|
588 | The value is a filename.
|
---|
589 |
|
---|
590 | =item B<SSL_CONF_TYPE_DIR>
|
---|
591 |
|
---|
592 | The value is a directory name.
|
---|
593 |
|
---|
594 | =item B<SSL_CONF_TYPE_NONE>
|
---|
595 |
|
---|
596 | The value string is not used e.g. a command line option which doesn't take an
|
---|
597 | argument.
|
---|
598 |
|
---|
599 | =back
|
---|
600 |
|
---|
601 | =head1 NOTES
|
---|
602 |
|
---|
603 | The order of operations is significant. This can be used to set either defaults
|
---|
604 | or values which cannot be overridden. For example if an application calls:
|
---|
605 |
|
---|
606 | SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
|
---|
607 | SSL_CONF_cmd(ctx, userparam, uservalue);
|
---|
608 |
|
---|
609 | it will disable SSLv3 support by default but the user can override it. If
|
---|
610 | however the call sequence is:
|
---|
611 |
|
---|
612 | SSL_CONF_cmd(ctx, userparam, uservalue);
|
---|
613 | SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
|
---|
614 |
|
---|
615 | SSLv3 is B<always> disabled and attempt to override this by the user are
|
---|
616 | ignored.
|
---|
617 |
|
---|
618 | By checking the return code of SSL_CONF_cmd() it is possible to query if a
|
---|
619 | given B<option> is recognised, this is useful if SSL_CONF_cmd() values are
|
---|
620 | mixed with additional application specific operations.
|
---|
621 |
|
---|
622 | For example an application might call SSL_CONF_cmd() and if it returns
|
---|
623 | -2 (unrecognised command) continue with processing of application specific
|
---|
624 | commands.
|
---|
625 |
|
---|
626 | Applications can also use SSL_CONF_cmd() to process command lines though the
|
---|
627 | utility function SSL_CONF_cmd_argv() is normally used instead. One way
|
---|
628 | to do this is to set the prefix to an appropriate value using
|
---|
629 | SSL_CONF_CTX_set1_prefix(), pass the current argument to B<option> and the
|
---|
630 | following argument to B<value> (which may be NULL).
|
---|
631 |
|
---|
632 | In this case if the return value is positive then it is used to skip that
|
---|
633 | number of arguments as they have been processed by SSL_CONF_cmd(). If -2 is
|
---|
634 | returned then B<option> is not recognised and application specific arguments
|
---|
635 | can be checked instead. If -3 is returned a required argument is missing
|
---|
636 | and an error is indicated. If 0 is returned some other error occurred and
|
---|
637 | this can be reported back to the user.
|
---|
638 |
|
---|
639 | The function SSL_CONF_cmd_value_type() can be used by applications to
|
---|
640 | check for the existence of a command or to perform additional syntax
|
---|
641 | checking or translation of the command value. For example if the return
|
---|
642 | value is B<SSL_CONF_TYPE_FILE> an application could translate a relative
|
---|
643 | pathname to an absolute pathname.
|
---|
644 |
|
---|
645 | =head1 RETURN VALUES
|
---|
646 |
|
---|
647 | SSL_CONF_cmd() returns 1 if the value of B<option> is recognised and B<value> is
|
---|
648 | B<NOT> used and 2 if both B<option> and B<value> are used. In other words it
|
---|
649 | returns the number of arguments processed. This is useful when processing
|
---|
650 | command lines.
|
---|
651 |
|
---|
652 | A return value of -2 means B<option> is not recognised.
|
---|
653 |
|
---|
654 | A return value of -3 means B<option> is recognised and the command requires a
|
---|
655 | value but B<value> is NULL.
|
---|
656 |
|
---|
657 | A return code of 0 indicates that both B<option> and B<value> are valid but an
|
---|
658 | error occurred attempting to perform the operation: for example due to an
|
---|
659 | error in the syntax of B<value> in this case the error queue may provide
|
---|
660 | additional information.
|
---|
661 |
|
---|
662 | =head1 EXAMPLES
|
---|
663 |
|
---|
664 | Set supported signature algorithms:
|
---|
665 |
|
---|
666 | SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256");
|
---|
667 |
|
---|
668 | There are various ways to select the supported protocols.
|
---|
669 |
|
---|
670 | This set the minimum protocol version to TLSv1, and so disables SSLv3.
|
---|
671 | This is the recommended way to disable protocols.
|
---|
672 |
|
---|
673 | SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1");
|
---|
674 |
|
---|
675 | The following also disables SSLv3:
|
---|
676 |
|
---|
677 | SSL_CONF_cmd(ctx, "Protocol", "-SSLv3");
|
---|
678 |
|
---|
679 | The following will first enable all protocols, and then disable
|
---|
680 | SSLv3.
|
---|
681 | If no protocol versions were disabled before this has the same effect as
|
---|
682 | "-SSLv3", but if some versions were disables this will re-enable them before
|
---|
683 | disabling SSLv3.
|
---|
684 |
|
---|
685 | SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3");
|
---|
686 |
|
---|
687 | Only enable TLSv1.2:
|
---|
688 |
|
---|
689 | SSL_CONF_cmd(ctx, "MinProtocol", "TLSv1.2");
|
---|
690 | SSL_CONF_cmd(ctx, "MaxProtocol", "TLSv1.2");
|
---|
691 |
|
---|
692 | This also only enables TLSv1.2:
|
---|
693 |
|
---|
694 | SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2");
|
---|
695 |
|
---|
696 | Disable TLS session tickets:
|
---|
697 |
|
---|
698 | SSL_CONF_cmd(ctx, "Options", "-SessionTicket");
|
---|
699 |
|
---|
700 | Enable compression:
|
---|
701 |
|
---|
702 | SSL_CONF_cmd(ctx, "Options", "Compression");
|
---|
703 |
|
---|
704 | Set supported curves to P-256, P-384:
|
---|
705 |
|
---|
706 | SSL_CONF_cmd(ctx, "Curves", "P-256:P-384");
|
---|
707 |
|
---|
708 | =head1 SEE ALSO
|
---|
709 |
|
---|
710 | L<ssl(7)>,
|
---|
711 | L<SSL_CONF_CTX_new(3)>,
|
---|
712 | L<SSL_CONF_CTX_set_flags(3)>,
|
---|
713 | L<SSL_CONF_CTX_set1_prefix(3)>,
|
---|
714 | L<SSL_CONF_CTX_set_ssl_ctx(3)>,
|
---|
715 | L<SSL_CONF_cmd_argv(3)>,
|
---|
716 | L<SSL_CTX_set_options(3)>
|
---|
717 |
|
---|
718 | =head1 HISTORY
|
---|
719 |
|
---|
720 | The SSL_CONF_cmd() function was added in OpenSSL 1.0.2.
|
---|
721 |
|
---|
722 | The B<SSL_OP_NO_SSL2> option doesn't have effect since 1.1.0, but the macro
|
---|
723 | is retained for backwards compatibility.
|
---|
724 |
|
---|
725 | The B<SSL_CONF_TYPE_NONE> was added in OpenSSL 1.1.0. In earlier versions of
|
---|
726 | OpenSSL passing a command which didn't take an argument would return
|
---|
727 | B<SSL_CONF_TYPE_UNKNOWN>.
|
---|
728 |
|
---|
729 | B<MinProtocol> and B<MaxProtocol> where added in OpenSSL 1.1.0.
|
---|
730 |
|
---|
731 | B<AllowNoDHEKEX> and B<PrioritizeChaCha> were added in OpenSSL 1.1.1.
|
---|
732 |
|
---|
733 | The B<UnsafeLegacyServerConnect> option is no longer set by default from
|
---|
734 | OpenSSL 3.0.
|
---|
735 |
|
---|
736 | =head1 COPYRIGHT
|
---|
737 |
|
---|
738 | Copyright 2012-2022 The OpenSSL Project Authors. All Rights Reserved.
|
---|
739 |
|
---|
740 | Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
741 | this file except in compliance with the License. You can obtain a copy
|
---|
742 | in the file LICENSE in the source distribution or at
|
---|
743 | L<https://www.openssl.org/source/license.html>.
|
---|
744 |
|
---|
745 | =cut
|
---|