1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | X509_check_host, X509_check_email, X509_check_ip, X509_check_ip_asc - X.509 certificate matching
|
---|
6 |
|
---|
7 | =head1 SYNOPSIS
|
---|
8 |
|
---|
9 | #include <openssl/x509v3.h>
|
---|
10 |
|
---|
11 | int X509_check_host(X509 *, const char *name, size_t namelen,
|
---|
12 | unsigned int flags, char **peername);
|
---|
13 | int X509_check_email(X509 *, const char *address, size_t addresslen,
|
---|
14 | unsigned int flags);
|
---|
15 | int X509_check_ip(X509 *, const unsigned char *address, size_t addresslen,
|
---|
16 | unsigned int flags);
|
---|
17 | int X509_check_ip_asc(X509 *, const char *address, unsigned int flags);
|
---|
18 |
|
---|
19 | =head1 DESCRIPTION
|
---|
20 |
|
---|
21 | The certificate matching functions are used to check whether a
|
---|
22 | certificate matches a given hostname, email address, or IP address.
|
---|
23 | The validity of the certificate and its trust level has to be checked by
|
---|
24 | other means.
|
---|
25 |
|
---|
26 | X509_check_host() checks if the certificate Subject Alternative
|
---|
27 | Name (SAN) or Subject CommonName (CN) matches the specified hostname,
|
---|
28 | which must be encoded in the preferred name syntax described
|
---|
29 | in section 3.5 of RFC 1034. By default, wildcards are supported
|
---|
30 | and they match only in the left-most label; but they may match
|
---|
31 | part of that label with an explicit prefix or suffix. For example,
|
---|
32 | by default, the host B<name> "www.example.com" would match a
|
---|
33 | certificate with a SAN or CN value of "*.example.com", "w*.example.com"
|
---|
34 | or "*w.example.com".
|
---|
35 |
|
---|
36 | Per section 6.4.2 of RFC 6125, B<name> values representing international
|
---|
37 | domain names must be given in A-label form. The B<namelen> argument
|
---|
38 | must be the number of characters in the name string or zero in which
|
---|
39 | case the length is calculated with strlen(B<name>). When B<name> starts
|
---|
40 | with a dot (e.g. ".example.com"), it will be matched by a certificate
|
---|
41 | valid for any sub-domain of B<name>, (see also
|
---|
42 | B<X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS> below).
|
---|
43 |
|
---|
44 | When the certificate is matched, and B<peername> is not NULL, a
|
---|
45 | pointer to a copy of the matching SAN or CN from the peer certificate
|
---|
46 | is stored at the address passed in B<peername>. The application
|
---|
47 | is responsible for freeing the peername via OPENSSL_free() when it
|
---|
48 | is no longer needed.
|
---|
49 |
|
---|
50 | X509_check_email() checks if the certificate matches the specified
|
---|
51 | email B<address>. The mailbox syntax of RFC 822 is supported,
|
---|
52 | comments are not allowed, and no attempt is made to normalize quoted
|
---|
53 | characters. The mailbox syntax of RFC 6531 is supported for
|
---|
54 | SmtpUTF8Mailbox address in subjectAltName according to RFC 8398,
|
---|
55 | with similar limitations as for RFC 822 syntax, and no attempt
|
---|
56 | is made to convert from A-label to U-label before comparison.
|
---|
57 | The B<addresslen> argument must be the number of
|
---|
58 | characters in the address string or zero in which case the length
|
---|
59 | is calculated with strlen(B<address>).
|
---|
60 |
|
---|
61 | X509_check_ip() checks if the certificate matches a specified IPv4 or
|
---|
62 | IPv6 address. The B<address> array is in binary format, in network
|
---|
63 | byte order. The length is either 4 (IPv4) or 16 (IPv6). Only
|
---|
64 | explicitly marked addresses in the certificates are considered; IP
|
---|
65 | addresses stored in DNS names and Common Names are ignored. There are
|
---|
66 | currently no B<flags> that would affect the behavior of this call.
|
---|
67 |
|
---|
68 | X509_check_ip_asc() is similar, except that the NUL-terminated
|
---|
69 | string B<address> is first converted to the internal representation.
|
---|
70 |
|
---|
71 | The B<flags> argument is usually 0. It can be the bitwise OR of the
|
---|
72 | flags:
|
---|
73 |
|
---|
74 | =over 4
|
---|
75 |
|
---|
76 | =item B<X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT>,
|
---|
77 |
|
---|
78 | =item B<X509_CHECK_FLAG_NEVER_CHECK_SUBJECT>,
|
---|
79 |
|
---|
80 | =item B<X509_CHECK_FLAG_NO_WILDCARDS>,
|
---|
81 |
|
---|
82 | =item B<X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS>,
|
---|
83 |
|
---|
84 | =item B<X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS>.
|
---|
85 |
|
---|
86 | =item B<X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS>.
|
---|
87 |
|
---|
88 | =back
|
---|
89 |
|
---|
90 | The B<X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT> flag causes the function
|
---|
91 | to consider the subject DN even if the certificate contains at least
|
---|
92 | one subject alternative name of the right type (DNS name or email
|
---|
93 | address as appropriate); the default is to ignore the subject DN
|
---|
94 | when at least one corresponding subject alternative names is present.
|
---|
95 |
|
---|
96 | The B<X509_CHECK_FLAG_NEVER_CHECK_SUBJECT> flag causes the function to never
|
---|
97 | consider the subject DN even if the certificate contains no subject alternative
|
---|
98 | names of the right type (DNS name or email address as appropriate); the default
|
---|
99 | is to use the subject DN when no corresponding subject alternative names are
|
---|
100 | present.
|
---|
101 | If both B<X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT> and
|
---|
102 | B<X509_CHECK_FLAG_NEVER_CHECK_SUBJECT> are specified, the latter takes
|
---|
103 | precedence and the subject DN is not checked for matching names.
|
---|
104 |
|
---|
105 | If set, B<X509_CHECK_FLAG_NO_WILDCARDS> disables wildcard
|
---|
106 | expansion; this only applies to B<X509_check_host>.
|
---|
107 |
|
---|
108 | If set, B<X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS> suppresses support
|
---|
109 | for "*" as wildcard pattern in labels that have a prefix or suffix,
|
---|
110 | such as: "www*" or "*www"; this only applies to B<X509_check_host>.
|
---|
111 |
|
---|
112 | If set, B<X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS> allows a "*" that
|
---|
113 | constitutes the complete label of a DNS name (e.g. "*.example.com")
|
---|
114 | to match more than one label in B<name>; this flag only applies
|
---|
115 | to B<X509_check_host>.
|
---|
116 |
|
---|
117 | If set, B<X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS> restricts B<name>
|
---|
118 | values which start with ".", that would otherwise match any sub-domain
|
---|
119 | in the peer certificate, to only match direct child sub-domains.
|
---|
120 | Thus, for instance, with this flag set a B<name> of ".example.com"
|
---|
121 | would match a peer certificate with a DNS name of "www.example.com",
|
---|
122 | but would not match a peer certificate with a DNS name of
|
---|
123 | "www.sub.example.com"; this flag only applies to B<X509_check_host>.
|
---|
124 |
|
---|
125 | =head1 RETURN VALUES
|
---|
126 |
|
---|
127 | The functions return 1 for a successful match, 0 for a failed match
|
---|
128 | and -1 for an internal error: typically a memory allocation failure
|
---|
129 | or an ASN.1 decoding error.
|
---|
130 |
|
---|
131 | All functions can also return -2 if the input is malformed. For example,
|
---|
132 | X509_check_host() returns -2 if the provided B<name> contains embedded
|
---|
133 | NULs.
|
---|
134 |
|
---|
135 | =head1 NOTES
|
---|
136 |
|
---|
137 | Applications are encouraged to use X509_VERIFY_PARAM_set1_host()
|
---|
138 | rather than explicitly calling L<X509_check_host(3)>. Hostname
|
---|
139 | checks may be out of scope with the DANE-EE(3) certificate usage,
|
---|
140 | and the internal checks will be suppressed as appropriate when
|
---|
141 | DANE support is enabled.
|
---|
142 |
|
---|
143 | =head1 SEE ALSO
|
---|
144 |
|
---|
145 | L<SSL_get_verify_result(3)>,
|
---|
146 | L<X509_VERIFY_PARAM_set1_host(3)>,
|
---|
147 | L<X509_VERIFY_PARAM_add1_host(3)>,
|
---|
148 | L<X509_VERIFY_PARAM_set1_email(3)>,
|
---|
149 | L<X509_VERIFY_PARAM_set1_ip(3)>
|
---|
150 |
|
---|
151 | =head1 HISTORY
|
---|
152 |
|
---|
153 | These functions were added in OpenSSL 1.0.2.
|
---|
154 |
|
---|
155 | =head1 COPYRIGHT
|
---|
156 |
|
---|
157 | Copyright 2012-2022 The OpenSSL Project Authors. All Rights Reserved.
|
---|
158 |
|
---|
159 | Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
160 | this file except in compliance with the License. You can obtain a copy
|
---|
161 | in the file LICENSE in the source distribution or at
|
---|
162 | L<https://www.openssl.org/source/license.html>.
|
---|
163 |
|
---|
164 | =cut
|
---|