Update RAND_load_file return value.
[openssl.git] / doc / man3 / SSL_CTX_dane_enable.pod
1 =pod
2
3 =head1 NAME
4
5 SSL_CTX_dane_enable, SSL_CTX_dane_mtype_set, SSL_dane_enable,
6 SSL_dane_tlsa_add, SSL_get0_dane_authority, SSL_get0_dane_tlsa,
7 SSL_CTX_dane_set_flags, SSL_CTX_dane_clear_flags,
8 SSL_dane_set_flags, SSL_dane_clear_flags
9 - enable DANE TLS authentication of the remote TLS server in the local
10 TLS client
11
12 =head1 SYNOPSIS
13
14  #include <openssl/ssl.h>
15
16  int SSL_CTX_dane_enable(SSL_CTX *ctx);
17  int SSL_CTX_dane_mtype_set(SSL_CTX *ctx, const EVP_MD *md,
18                             uint8_t mtype, uint8_t ord);
19  int SSL_dane_enable(SSL *s, const char *basedomain);
20  int SSL_dane_tlsa_add(SSL *s, uint8_t usage, uint8_t selector,
21                        uint8_t mtype, unsigned char *data, size_t dlen);
22  int SSL_get0_dane_authority(SSL *s, X509 **mcert, EVP_PKEY **mspki);
23  int SSL_get0_dane_tlsa(SSL *s, uint8_t *usage, uint8_t *selector,
24                         uint8_t *mtype, unsigned const char **data,
25                         size_t *dlen);
26  unsigned long SSL_CTX_dane_set_flags(SSL_CTX *ctx, unsigned long flags);
27  unsigned long SSL_CTX_dane_clear_flags(SSL_CTX *ctx, unsigned long flags);
28  unsigned long SSL_dane_set_flags(SSL *ssl, unsigned long flags);
29  unsigned long SSL_dane_clear_flags(SSL *ssl, unsigned long flags);
30
31 =head1 DESCRIPTION
32
33 These functions implement support for DANE TLSA (RFC6698 and RFC7671)
34 peer authentication.
35
36 SSL_CTX_dane_enable() must be called first to initialize the shared state
37 required for DANE support.
38 Individual connections associated with the context can then enable
39 per-connection DANE support as appropriate.
40 DANE authentication is implemented in the L<X509_verify_cert(3)> function, and
41 applications that override L<X509_verify_cert(3)> via
42 L<SSL_CTX_set_cert_verify_callback(3)> are responsible to authenticate the peer
43 chain in whatever manner they see fit.
44
45 SSL_CTX_dane_mtype_set() may then be called zero or more times to adjust the
46 supported digest algorithms.
47 This must be done before any SSL handles are created for the context.
48
49 The B<mtype> argument specifies a DANE TLSA matching type and the B<md>
50 argument specifies the associated digest algorithm handle.
51 The B<ord> argument specifies a strength ordinal.
52 Algorithms with a larger strength ordinal are considered more secure.
53 Strength ordinals are used to implement RFC7671 digest algorithm agility.
54 Specifying a B<NULL> digest algorithm for a matching type disables
55 support for that matching type.
56 Matching type Full(0) cannot be modified or disabled.
57
58 By default, matching type C<SHA2-256(1)> (see RFC7218 for definitions
59 of the DANE TLSA parameter acronyms) is mapped to C<EVP_sha256()>
60 with a strength ordinal of C<1> and matching type C<SHA2-512(2)>
61 is mapped to C<EVP_sha512()> with a strength ordinal of C<2>.
62
63 SSL_dane_enable() must be called before the SSL handshake is initiated with
64 L<SSL_connect(3)> if (and only if) you want to enable DANE for that connection.
65 (The connection must be associated with a DANE-enabled SSL context).
66 The B<basedomain> argument specifies the RFC7671 TLSA base domain,
67 which will be the primary peer reference identifier for certificate
68 name checks.
69 Additional server names can be specified via L<SSL_add1_host(3)>.
70 The B<basedomain> is used as the default SNI hint if none has yet been
71 specified via L<SSL_set_tlsext_host_name(3)>.
72
73 SSL_dane_tlsa_add() may then be called one or more times, to load each of the
74 TLSA records that apply to the remote TLS peer.
75 (This too must be done prior to the beginning of the SSL handshake).
76 The arguments specify the fields of the TLSA record.
77 The B<data> field is provided in binary (wire RDATA) form, not the hexadecimal
78 ASCII presentation form, with an explicit length passed via B<dlen>.
79 A return value of 0 indicates that "unusable" TLSA records (with invalid or
80 unsupported parameters) were provided.
81 A negative return value indicates an internal error in processing the record.
82
83 The caller is expected to check the return value of each SSL_dane_tlsa_add()
84 call and take appropriate action if none are usable or an internal error
85 is encountered in processing some records.
86
87 If no TLSA records are added successfully, DANE authentication is not enabled,
88 and authentication will be based on any configured traditional trust-anchors;
89 authentication success in this case does not mean that the peer was
90 DANE-authenticated.
91
92 SSL_get0_dane_authority() can be used to get more detailed information about
93 the matched DANE trust-anchor after successful connection completion.
94 The return value is negative if DANE verification failed (or was not enabled),
95 0 if an EE TLSA record directly matched the leaf certificate, or a positive
96 number indicating the depth at which a TA record matched an issuer certificate.
97 The complete verified chain can be retrieved via L<SSL_get0_verified_chain(3)>.
98 The return value is an index into this verified chain, rather than the list of
99 certificates sent by the peer as returned by L<SSL_get_peer_cert_chain(3)>.
100
101 If the B<mcert> argument is not B<NULL> and a TLSA record matched a chain
102 certificate, a pointer to the matching certificate is returned via B<mcert>.
103 The returned address is a short-term internal reference to the certificate and
104 must not be freed by the application.
105 Applications that want to retain access to the certificate can call
106 L<X509_up_ref(3)> to obtain a long-term reference which must then be freed via
107 L<X509_free(3)> once no longer needed.
108
109 If no TLSA records directly matched any elements of the certificate chain, but
110 a DANE-TA(2) SPKI(1) Full(0) record provided the public key that signed an
111 element of the chain, then that key is returned via B<mspki> argument (if not
112 NULL).
113 In this case the return value is the depth of the top-most element of the
114 validated certificate chain.
115 As with B<mcert> this is a short-term internal reference, and
116 L<EVP_PKEY_up_ref(3)> and L<EVP_PKEY_free(3)> can be used to acquire and
117 release long-term references respectively.
118
119 SSL_get0_dane_tlsa() can be used to retrieve the fields of the TLSA record that
120 matched the peer certificate chain.
121 The return value indicates the match depth or failure to match just as with
122 SSL_get0_dane_authority().
123 When the return value is non-negative, the storage pointed to by the B<usage>,
124 B<selector>, B<mtype> and B<data> parameters is updated to the corresponding
125 TLSA record fields.
126 The B<data> field is in binary wire form, and is therefore not NUL-terminated,
127 its length is returned via the B<dlen> parameter.
128 If any of these parameters is NULL, the corresponding field is not returned.
129 The B<data> parameter is set to a short-term internal-copy of the associated
130 data field and must not be freed by the application.
131 Applications that need long-term access to this field need to copy the content.
132
133 SSL_CTX_dane_set_flags() and SSL_dane_set_flags() can be used to enable
134 optional DANE verification features.
135 SSL_CTX_dane_clear_flags() and SSL_dane_clear_flags() can be used to disable
136 the same features.
137 The B<flags> argument is a bitmask of the features to enable or disable.
138 The B<flags> set for an B<SSL_CTX> context are copied to each B<SSL> handle
139 associated with that context at the time the handle is created.
140 Subsequent changes in the context's B<flags> have no effect on the B<flags> set
141 for the handle.
142
143 At present, the only available option is B<DANE_FLAG_NO_DANE_EE_NAMECHECKS>
144 which can be used to disable server name checks when authenticating via
145 DANE-EE(3) TLSA records.
146 For some applications, primarily web browsers, it is not safe to disable name
147 checks due to "unknown key share" attacks, in which a malicious server can
148 convince a client that a connection to a victim server is instead a secure
149 connection to the malicious server.
150 The malicious server may then be able to violate cross-origin scripting
151 restrictions.
152 Thus, despite the text of RFC7671, name checks are by default enabled for
153 DANE-EE(3) TLSA records, and can be disabled in applications where it is safe
154 to do so.
155 In particular, SMTP and XMPP clients should set this option as SRV and MX
156 records already make it possible for a remote domain to redirect client
157 connections to any server of its choice, and in any case SMTP and XMPP clients
158 do not execute scripts downloaded from remote servers.
159
160 =head1 RETURN VALUES
161
162 The functions SSL_CTX_dane_enable(), SSL_CTX_dane_mtype_set(),
163 SSL_dane_enable() and SSL_dane_tlsa_add() return a positive value on success.
164 Negative return values indicate resource problems (out of memory, etc.) in the
165 SSL library, while a return value of B<0> indicates incorrect usage or invalid
166 input, such as an unsupported TLSA record certificate usage, selector or
167 matching type.
168 Invalid input also includes malformed data, either a digest length that does
169 not match the digest algorithm, or a C<Full(0)> (binary ASN.1 DER form)
170 certificate or a public key that fails to parse.
171
172 The functions SSL_get0_dane_authority() and SSL_get0_dane_tlsa() return a
173 negative value when DANE authentication failed or was not enabled, a
174 non-negative value indicates the chain depth at which the TLSA record matched a
175 chain certificate, or the depth of the top-most certificate, when the TLSA
176 record is a full public key that is its signer.
177
178 The functions SSL_CTX_dane_set_flags(), SSL_CTX_dane_clear_flags(),
179 SSL_dane_set_flags() and SSL_dane_clear_flags() return the B<flags> in effect
180 before they were called.
181
182 =head1 EXAMPLE
183
184 Suppose "smtp.example.com" is the MX host of the domain "example.com", and has
185 DNSSEC-validated TLSA records.
186 The calls below will perform DANE authentication and arrange to match either
187 the MX hostname or the destination domain name in the SMTP server certificate.
188 Wildcards are supported, but must match the entire label.
189 The actual name matched in the certificate (which might be a wildcard) is
190 retrieved, and must be copied by the application if it is to be retained beyond
191 the lifetime of the SSL connection.
192
193  SSL_CTX *ctx;
194  SSL *ssl;
195  int (*verify_cb)(int ok, X509_STORE_CTX *sctx) = NULL;
196  int num_usable = 0;
197  const char *nexthop_domain = "example.com";
198  const char *dane_tlsa_domain = "smtp.example.com";
199  uint8_t usage, selector, mtype;
200
201  if ((ctx = SSL_CTX_new(TLS_client_method())) == NULL)
202      /* error */
203  if (SSL_CTX_dane_enable(ctx) <= 0)
204      /* error */
205  if ((ssl = SSL_new(ctx)) == NULL)
206      /* error */
207  if (SSL_dane_enable(ssl, dane_tlsa_domain) <= 0)
208      /* error */
209
210  /*
211   * For many applications it is safe to skip DANE-EE(3) namechecks.  Do not
212   * disable the checks unless "unknown key share" attacks pose no risk for
213   * your application.
214   */
215  SSL_dane_set_flags(ssl, DANE_FLAG_NO_DANE_EE_NAMECHECKS);
216
217  if (!SSL_add1_host(ssl, nexthop_domain))
218      /* error */
219  SSL_set_hostflags(ssl, X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
220
221  for (... each TLSA record ...) {
222      unsigned char *data;
223      size_t len;
224      int ret;
225
226      /* set usage, selector, mtype, data, len */
227
228      /*
229       * Opportunistic DANE TLS clients support only DANE-TA(2) or DANE-EE(3).
230       * They treat all other certificate usages, and in particular PKIX-TA(0)
231       * and PKIX-EE(1), as unusable.
232       */
233      switch (usage) {
234      default:
235      case 0:     /* PKIX-TA(0) */
236      case 1:     /* PKIX-EE(1) */
237          continue;
238      case 2:     /* DANE-TA(2) */
239      case 3:     /* DANE-EE(3) */
240          break;
241      }
242
243      ret = SSL_dane_tlsa_add(ssl, usage, selector, mtype, data, len);
244      /* free data as appropriate */
245
246      if (ret < 0)
247          /* handle SSL library internal error */
248      else if (ret == 0)
249          /* handle unusable TLSA record */
250      else
251          ++num_usable;
252  }
253
254  /*
255   * At this point, the verification mode is still the default SSL_VERIFY_NONE.
256   * Opportunistic DANE clients use unauthenticated TLS when all TLSA records
257   * are unusable, so continue the handshake even if authentication fails.
258   */
259  if (num_usable == 0) {
260      /* Log all records unusable? */
261
262      /* Optionally set verify_cb to a suitable non-NULL callback. */
263      SSL_set_verify(ssl, SSL_VERIFY_NONE, verify_cb);
264  } else {
265      /* At least one usable record.  We expect to verify the peer */
266
267      /* Optionally set verify_cb to a suitable non-NULL callback. */
268
269      /*
270       * Below we elect to fail the handshake when peer verification fails.
271       * Alternatively, use the permissive SSL_VERIFY_NONE verification mode,
272       * complete the handshake, check the verification status, and if not
273       * verified disconnect gracefully at the application layer, especially if
274       * application protocol supports informing the server that authentication
275       * failed.
276       */
277      SSL_set_verify(ssl, SSL_VERIFY_PEER, verify_cb);
278  }
279
280  /*
281   * Load any saved session for resumption, making sure that the previous
282   * session applied the same security and authentication requirements that
283   * would be expected of a fresh connection.
284   */
285
286  /* Perform SSL_connect() handshake and handle errors here */
287
288  if (SSL_session_reused(ssl)) {
289      if (SSL_get_verify_result(ssl) == X509_V_OK) {
290          /*
291           * Resumed session was originally verified, this connection is
292           * authenticated.
293           */
294      } else {
295          /*
296           * Resumed session was not originally verified, this connection is not
297           * authenticated.
298           */
299      }
300  } else if (SSL_get_verify_result(ssl) == X509_V_OK) {
301      const char *peername = SSL_get0_peername(ssl);
302      EVP_PKEY *mspki = NULL;
303
304      int depth = SSL_get0_dane_authority(ssl, NULL, &mspki);
305      if (depth >= 0) {
306          (void) SSL_get0_dane_tlsa(ssl, &usage, &selector, &mtype, NULL, NULL);
307          printf("DANE TLSA %d %d %d %s at depth %d\n", usage, selector, mtype,
308                 (mspki != NULL) ? "TA public key verified certificate" :
309                 depth ? "matched TA certificate" : "matched EE certificate",
310                 depth);
311      }
312      if (peername != NULL) {
313          /* Name checks were in scope and matched the peername */
314          printf("Verified peername: %s\n", peername);
315      }
316  } else {
317      /*
318       * Not authenticated, presumably all TLSA rrs unusable, but possibly a
319       * callback suppressed connection termination despite the presence of
320       * usable TLSA RRs none of which matched.  Do whatever is appropriate for
321       * fresh unauthenticated connections.
322       */
323  }
324
325 =head1 NOTES
326
327 It is expected that the majority of clients employing DANE TLS will be doing
328 "opportunistic DANE TLS" in the sense of RFC7672 and RFC7435.
329 That is, they will use DANE authentication when DNSSEC-validated TLSA records
330 are published for a given peer, and otherwise will use unauthenticated TLS or
331 even cleartext.
332
333 Such applications should generally treat any TLSA records published by the peer
334 with usages PKIX-TA(0) and PKIX-EE(1) as "unusable", and should not include
335 them among the TLSA records used to authenticate peer connections.
336 In addition, some TLSA records with supported usages may be "unusable" as a
337 result of invalid or unsupported parameters.
338
339 When a peer has TLSA records, but none are "usable", an opportunistic
340 application must avoid cleartext, but cannot authenticate the peer,
341 and so should generally proceed with an unauthenticated connection.
342 Opportunistic applications need to note the return value of each
343 call to SSL_dane_tlsa_add(), and if all return 0 (due to invalid
344 or unsupported parameters) disable peer authentication by calling
345 L<SSL_set_verify(3)> with B<mode> equal to B<SSL_VERIFY_NONE>.
346
347 =head1 SEE ALSO
348
349 L<SSL_new(3)>,
350 L<SSL_add1_host(3)>,
351 L<SSL_set_hostflags(3)>,
352 L<SSL_set_tlsext_host_name(3)>,
353 L<SSL_set_verify(3)>,
354 L<SSL_CTX_set_cert_verify_callback(3)>,
355 L<SSL_get0_verified_chain(3)>,
356 L<SSL_get_peer_cert_chain(3)>,
357 L<SSL_get_verify_result(3)>,
358 L<SSL_connect(3)>,
359 L<SSL_get0_peername(3)>,
360 L<X509_verify_cert(3)>,
361 L<X509_up_ref(3)>,
362 L<X509_free(3)>,
363 L<EVP_get_digestbyname(3)>,
364 L<EVP_PKEY_up_ref(3)>,
365 L<EVP_PKEY_free(3)>
366
367 =head1 HISTORY
368
369 These functions were first added to OpenSSL 1.1.0.
370
371 =head1 COPYRIGHT
372
373 Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.
374
375 Licensed under the OpenSSL license (the "License").  You may not use
376 this file except in compliance with the License.  You can obtain a copy
377 in the file LICENSE in the source distribution or at
378 L<https://www.openssl.org/source/license.html>.
379
380 =cut