1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | X509_get0_subject_key_id,
|
---|
6 | X509_get0_authority_key_id,
|
---|
7 | X509_get0_authority_issuer,
|
---|
8 | X509_get0_authority_serial,
|
---|
9 | X509_get_pathlen,
|
---|
10 | X509_get_extension_flags,
|
---|
11 | X509_get_key_usage,
|
---|
12 | X509_get_extended_key_usage,
|
---|
13 | X509_set_proxy_flag,
|
---|
14 | X509_set_proxy_pathlen,
|
---|
15 | X509_get_proxy_pathlen - retrieve certificate extension data
|
---|
16 |
|
---|
17 | =head1 SYNOPSIS
|
---|
18 |
|
---|
19 | #include <openssl/x509v3.h>
|
---|
20 |
|
---|
21 | long X509_get_pathlen(X509 *x);
|
---|
22 | uint32_t X509_get_extension_flags(X509 *x);
|
---|
23 | uint32_t X509_get_key_usage(X509 *x);
|
---|
24 | uint32_t X509_get_extended_key_usage(X509 *x);
|
---|
25 | const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x);
|
---|
26 | const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x);
|
---|
27 | const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x);
|
---|
28 | const ASN1_INTEGER *X509_get0_authority_serial(X509 *x);
|
---|
29 | void X509_set_proxy_flag(X509 *x);
|
---|
30 | void X509_set_proxy_pathlen(int l);
|
---|
31 | long X509_get_proxy_pathlen(X509 *x);
|
---|
32 |
|
---|
33 | =head1 DESCRIPTION
|
---|
34 |
|
---|
35 | These functions retrieve information related to commonly used certificate extensions.
|
---|
36 |
|
---|
37 | X509_get_pathlen() retrieves the path length extension from a certificate.
|
---|
38 | This extension is used to limit the length of a cert chain that may be
|
---|
39 | issued from that CA.
|
---|
40 |
|
---|
41 | X509_get_extension_flags() retrieves general information about a certificate,
|
---|
42 | it will return one or more of the following flags ored together.
|
---|
43 |
|
---|
44 | =over 4
|
---|
45 |
|
---|
46 | =item B<EXFLAG_V1>
|
---|
47 |
|
---|
48 | The certificate is an obsolete version 1 certificate.
|
---|
49 |
|
---|
50 | =item B<EXFLAG_BCONS>
|
---|
51 |
|
---|
52 | The certificate contains a basic constraints extension.
|
---|
53 |
|
---|
54 | =item B<EXFLAG_CA>
|
---|
55 |
|
---|
56 | The certificate contains basic constraints and asserts the CA flag.
|
---|
57 |
|
---|
58 | =item B<EXFLAG_PROXY>
|
---|
59 |
|
---|
60 | The certificate is a valid proxy certificate.
|
---|
61 |
|
---|
62 | =item B<EXFLAG_SI>
|
---|
63 |
|
---|
64 | The certificate is self issued (that is subject and issuer names match).
|
---|
65 |
|
---|
66 | =item B<EXFLAG_SS>
|
---|
67 |
|
---|
68 | The subject and issuer names match and extension values imply it is self
|
---|
69 | signed.
|
---|
70 |
|
---|
71 | =item B<EXFLAG_FRESHEST>
|
---|
72 |
|
---|
73 | The freshest CRL extension is present in the certificate.
|
---|
74 |
|
---|
75 | =item B<EXFLAG_CRITICAL>
|
---|
76 |
|
---|
77 | The certificate contains an unhandled critical extension.
|
---|
78 |
|
---|
79 | =item B<EXFLAG_INVALID>
|
---|
80 |
|
---|
81 | Some certificate extension values are invalid or inconsistent.
|
---|
82 | The certificate should be rejected.
|
---|
83 | This bit may also be raised after an out-of-memory error while
|
---|
84 | processing the X509 object, so it may not be related to the processed
|
---|
85 | ASN1 object itself.
|
---|
86 |
|
---|
87 | =item B<EXFLAG_NO_FINGERPRINT>
|
---|
88 |
|
---|
89 | Failed to compute the internal SHA1 hash value of the certificate.
|
---|
90 | This may be due to malloc failure or because no SHA1 implementation was found.
|
---|
91 |
|
---|
92 | =item B<EXFLAG_INVALID_POLICY>
|
---|
93 |
|
---|
94 | The NID_certificate_policies certificate extension is invalid or
|
---|
95 | inconsistent. The certificate should be rejected.
|
---|
96 | This bit may also be raised after an out-of-memory error while
|
---|
97 | processing the X509 object, so it may not be related to the processed
|
---|
98 | ASN1 object itself.
|
---|
99 |
|
---|
100 | =item B<EXFLAG_KUSAGE>
|
---|
101 |
|
---|
102 | The certificate contains a key usage extension. The value can be retrieved
|
---|
103 | using X509_get_key_usage().
|
---|
104 |
|
---|
105 | =item B<EXFLAG_XKUSAGE>
|
---|
106 |
|
---|
107 | The certificate contains an extended key usage extension. The value can be
|
---|
108 | retrieved using X509_get_extended_key_usage().
|
---|
109 |
|
---|
110 | =back
|
---|
111 |
|
---|
112 | X509_get_key_usage() returns the value of the key usage extension. If key
|
---|
113 | usage is present will return zero or more of the flags:
|
---|
114 | B<KU_DIGITAL_SIGNATURE>, B<KU_NON_REPUDIATION>, B<KU_KEY_ENCIPHERMENT>,
|
---|
115 | B<KU_DATA_ENCIPHERMENT>, B<KU_KEY_AGREEMENT>, B<KU_KEY_CERT_SIGN>,
|
---|
116 | B<KU_CRL_SIGN>, B<KU_ENCIPHER_ONLY> or B<KU_DECIPHER_ONLY> corresponding to
|
---|
117 | individual key usage bits. If key usage is absent then B<UINT32_MAX> is
|
---|
118 | returned.
|
---|
119 |
|
---|
120 | X509_get_extended_key_usage() returns the value of the extended key usage
|
---|
121 | extension. If extended key usage is present it will return zero or more of the
|
---|
122 | flags: B<XKU_SSL_SERVER>, B<XKU_SSL_CLIENT>, B<XKU_SMIME>, B<XKU_CODE_SIGN>
|
---|
123 | B<XKU_OCSP_SIGN>, B<XKU_TIMESTAMP>, B<XKU_DVCS> or B<XKU_ANYEKU>. These
|
---|
124 | correspond to the OIDs B<id-kp-serverAuth>, B<id-kp-clientAuth>,
|
---|
125 | B<id-kp-emailProtection>, B<id-kp-codeSigning>, B<id-kp-OCSPSigning>,
|
---|
126 | B<id-kp-timeStamping>, B<id-kp-dvcs> and B<anyExtendedKeyUsage> respectively.
|
---|
127 | Additionally B<XKU_SGC> is set if either Netscape or Microsoft SGC OIDs are
|
---|
128 | present.
|
---|
129 |
|
---|
130 | X509_get0_subject_key_id() returns an internal pointer to the subject key
|
---|
131 | identifier of B<x> as an B<ASN1_OCTET_STRING> or B<NULL> if the extension
|
---|
132 | is not present or cannot be parsed.
|
---|
133 |
|
---|
134 | X509_get0_authority_key_id() returns an internal pointer to the authority key
|
---|
135 | identifier of B<x> as an B<ASN1_OCTET_STRING> or B<NULL> if the extension
|
---|
136 | is not present or cannot be parsed.
|
---|
137 |
|
---|
138 | X509_get0_authority_issuer() returns an internal pointer to the authority
|
---|
139 | certificate issuer of B<x> as a stack of B<GENERAL_NAME> structures or
|
---|
140 | B<NULL> if the extension is not present or cannot be parsed.
|
---|
141 |
|
---|
142 | X509_get0_authority_serial() returns an internal pointer to the authority
|
---|
143 | certificate serial number of B<x> as an B<ASN1_INTEGER> or B<NULL> if the
|
---|
144 | extension is not present or cannot be parsed.
|
---|
145 |
|
---|
146 | X509_set_proxy_flag() marks the certificate with the B<EXFLAG_PROXY> flag.
|
---|
147 | This is for the users who need to mark non-RFC3820 proxy certificates as
|
---|
148 | such, as OpenSSL only detects RFC3820 compliant ones.
|
---|
149 |
|
---|
150 | X509_set_proxy_pathlen() sets the proxy certificate path length for the given
|
---|
151 | certificate B<x>. This is for the users who need to mark non-RFC3820 proxy
|
---|
152 | certificates as such, as OpenSSL only detects RFC3820 compliant ones.
|
---|
153 |
|
---|
154 | X509_get_proxy_pathlen() returns the proxy certificate path length for the
|
---|
155 | given certificate B<x> if it is a proxy certificate.
|
---|
156 |
|
---|
157 | =head1 NOTES
|
---|
158 |
|
---|
159 | The value of the flags correspond to extension values which are cached
|
---|
160 | in the B<X509> structure. If the flags returned do not provide sufficient
|
---|
161 | information an application should examine extension values directly
|
---|
162 | for example using X509_get_ext_d2i().
|
---|
163 |
|
---|
164 | If the key usage or extended key usage extension is absent then typically usage
|
---|
165 | is unrestricted. For this reason X509_get_key_usage() and
|
---|
166 | X509_get_extended_key_usage() return B<UINT32_MAX> when the corresponding
|
---|
167 | extension is absent. Applications can additionally check the return value of
|
---|
168 | X509_get_extension_flags() and take appropriate action is an extension is
|
---|
169 | absent.
|
---|
170 |
|
---|
171 | If X509_get0_subject_key_id() returns B<NULL> then the extension may be
|
---|
172 | absent or malformed. Applications can determine the precise reason using
|
---|
173 | X509_get_ext_d2i().
|
---|
174 |
|
---|
175 | =head1 RETURN VALUES
|
---|
176 |
|
---|
177 | X509_get_pathlen() returns the path length value, or -1 if the extension
|
---|
178 | is not present.
|
---|
179 |
|
---|
180 | X509_get_extension_flags(), X509_get_key_usage() and
|
---|
181 | X509_get_extended_key_usage() return sets of flags corresponding to the
|
---|
182 | certificate extension values.
|
---|
183 |
|
---|
184 | X509_get0_subject_key_id() returns the subject key identifier as a
|
---|
185 | pointer to an B<ASN1_OCTET_STRING> structure or B<NULL> if the extension
|
---|
186 | is absent or an error occurred during parsing.
|
---|
187 |
|
---|
188 | X509_get_proxy_pathlen() returns the path length value if the given
|
---|
189 | certificate is a proxy one and has a path length set, and -1 otherwise.
|
---|
190 |
|
---|
191 | =head1 SEE ALSO
|
---|
192 |
|
---|
193 | L<X509_check_purpose(3)>
|
---|
194 |
|
---|
195 | =head1 HISTORY
|
---|
196 |
|
---|
197 | X509_get_pathlen(), X509_set_proxy_flag(), X509_set_proxy_pathlen() and
|
---|
198 | X509_get_proxy_pathlen() were added in OpenSSL 1.1.0.
|
---|
199 |
|
---|
200 | =head1 COPYRIGHT
|
---|
201 |
|
---|
202 | Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
|
---|
203 |
|
---|
204 | Licensed under the OpenSSL license (the "License"). You may not use
|
---|
205 | this file except in compliance with the License. You can obtain a copy
|
---|
206 | in the file LICENSE in the source distribution or at
|
---|
207 | L<https://www.openssl.org/source/license.html>.
|
---|
208 |
|
---|
209 | =cut
|
---|