]>
Commit | Line | Data |
---|---|---|
361136f4 DSH |
1 | =pod |
2 | ||
3 | =head1 NAME | |
4 | ||
c952780c | 5 | X509_get0_subject_key_id, |
b383aa20 | 6 | X509_get0_authority_key_id, |
74b9ce2d DMSP |
7 | X509_get0_authority_issuer, |
8 | X509_get0_authority_serial, | |
e417070c | 9 | X509_get_pathlen, |
fe0169b0 RL |
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 | |
361136f4 DSH |
16 | |
17 | =head1 SYNOPSIS | |
18 | ||
e9b77246 | 19 | #include <openssl/x509v3.h> |
361136f4 | 20 | |
e9b77246 BB |
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); | |
b383aa20 | 26 | const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x); |
74b9ce2d DMSP |
27 | const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x); |
28 | const ASN1_INTEGER *X509_get0_authority_serial(X509 *x); | |
e9b77246 BB |
29 | void X509_set_proxy_flag(X509 *x); |
30 | void X509_set_proxy_pathlen(int l); | |
31 | long X509_get_proxy_pathlen(X509 *x); | |
361136f4 DSH |
32 | |
33 | =head1 DESCRIPTION | |
34 | ||
e417070c RS |
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. | |
361136f4 DSH |
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. The | |
82 | certificate should be rejected. | |
ba4356ae BE |
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_INVALID_POLICY> | |
88 | ||
89 | The NID_certificate_policies certificate extension is invalid or | |
90 | inconsistent. The certificate should be rejected. | |
91 | This bit may also be raised after an out-of-memory error while | |
92 | processing the X509 object, so it may not be related to the processed | |
93 | ASN1 object itself. | |
361136f4 DSH |
94 | |
95 | =item B<EXFLAG_KUSAGE> | |
96 | ||
97 | The certificate contains a key usage extension. The value can be retrieved | |
98 | using X509_get_key_usage(). | |
99 | ||
100 | =item B<EXFLAG_XKUSAGE> | |
101 | ||
102 | The certificate contains an extended key usage extension. The value can be | |
103 | retrieved using X509_get_extended_key_usage(). | |
104 | ||
105 | =back | |
106 | ||
107 | X509_get_key_usage() returns the value of the key usage extension. If key | |
108 | usage is present will return zero or more of the flags: | |
109 | B<KU_DIGITAL_SIGNATURE>, B<KU_NON_REPUDIATION>, B<KU_KEY_ENCIPHERMENT>, | |
110 | B<KU_DATA_ENCIPHERMENT>, B<KU_KEY_AGREEMENT>, B<KU_KEY_CERT_SIGN>, | |
111 | B<KU_CRL_SIGN>, B<KU_ENCIPHER_ONLY> or B<KU_DECIPHER_ONLY> corresponding to | |
112 | individual key usage bits. If key usage is absent then B<UINT32_MAX> is | |
113 | returned. | |
114 | ||
115 | X509_get_extended_key_usage() returns the value of the extended key usage | |
116 | extension. If extended key usage is present it will return zero or more of the | |
117 | flags: B<XKU_SSL_SERVER>, B<XKU_SSL_CLIENT>, B<XKU_SMIME>, B<XKU_CODE_SIGN> | |
118 | B<XKU_OCSP_SIGN>, B<XKU_TIMESTAMP>, B<XKU_DVCS> or B<XKU_ANYEKU>. These | |
119 | correspond to the OIDs B<id-kp-serverAuth>, B<id-kp-clientAuth>, | |
120 | B<id-kp-emailProtection>, B<id-kp-codeSigning>, B<id-kp-OCSPSigning>, | |
121 | B<id-kp-timeStamping>, B<id-kp-dvcs> and B<anyExtendedKeyUsage> respectively. | |
122 | Additionally B<XKU_SGC> is set if either Netscape or Microsoft SGC OIDs are | |
123 | present. | |
124 | ||
fbc9eeaa | 125 | X509_get0_subject_key_id() returns an internal pointer to the subject key |
69d492ea DSH |
126 | identifier of B<x> as an B<ASN1_OCTET_STRING> or B<NULL> if the extension |
127 | is not present or cannot be parsed. | |
128 | ||
b383aa20 MP |
129 | X509_get0_authority_key_id() returns an internal pointer to the authority key |
130 | identifier of B<x> as an B<ASN1_OCTET_STRING> or B<NULL> if the extension | |
131 | is not present or cannot be parsed. | |
132 | ||
74b9ce2d DMSP |
133 | X509_get0_authority_issuer() returns an internal pointer to the authority |
134 | certificate issuer of B<x> as a stack of B<GENERAL_NAME> structures or | |
135 | B<NULL> if the extension is not present or cannot be parsed. | |
136 | ||
137 | X509_get0_authority_serial() returns an internal pointer to the authority | |
138 | certificate serial number of B<x> as an B<ASN1_INTEGER> or B<NULL> if the | |
139 | extension is not present or cannot be parsed. | |
140 | ||
9961cb77 RL |
141 | X509_set_proxy_flag() marks the certificate with the B<EXFLAG_PROXY> flag. |
142 | This is for the users who need to mark non-RFC3820 proxy certificates as | |
143 | such, as OpenSSL only detects RFC3820 compliant ones. | |
144 | ||
fe0169b0 RL |
145 | X509_set_proxy_pathlen() sets the proxy certificate path length for the given |
146 | certificate B<x>. This is for the users who need to mark non-RFC3820 proxy | |
147 | certificates as such, as OpenSSL only detects RFC3820 compliant ones. | |
148 | ||
149 | X509_get_proxy_pathlen() returns the proxy certificate path length for the | |
60250017 | 150 | given certificate B<x> if it is a proxy certificate. |
fe0169b0 | 151 | |
361136f4 DSH |
152 | =head1 NOTES |
153 | ||
154 | The value of the flags correspond to extension values which are cached | |
155 | in the B<X509> structure. If the flags returned do not provide sufficient | |
69d492ea DSH |
156 | information an application should examine extension values directly |
157 | for example using X509_get_ext_d2i(). | |
361136f4 DSH |
158 | |
159 | If the key usage or extended key usage extension is absent then typically usage | |
160 | is unrestricted. For this reason X509_get_key_usage() and | |
161 | X509_get_extended_key_usage() return B<UINT32_MAX> when the corresponding | |
162 | extension is absent. Applications can additionally check the return value of | |
163 | X509_get_extension_flags() and take appropriate action is an extension is | |
164 | absent. | |
165 | ||
69d492ea DSH |
166 | If X509_get0_subject_key_id() returns B<NULL> then the extension may be |
167 | absent or malformed. Applications can determine the precise reason using | |
168 | X509_get_ext_d2i(). | |
169 | ||
1f13ad31 | 170 | =head1 RETURN VALUES |
361136f4 | 171 | |
e417070c RS |
172 | X509_get_pathlen() returns the path length value, or -1 if the extension |
173 | is not present. | |
174 | ||
69d492ea DSH |
175 | X509_get_extension_flags(), X509_get_key_usage() and |
176 | X509_get_extended_key_usage() return sets of flags corresponding to the | |
177 | certificate extension values. | |
178 | ||
179 | X509_get0_subject_key_id() returns the subject key identifier as a | |
180 | pointer to an B<ASN1_OCTET_STRING> structure or B<NULL> if the extension | |
d900a015 | 181 | is absent or an error occurred during parsing. |
361136f4 | 182 | |
fe0169b0 RL |
183 | X509_get_proxy_pathlen() returns the path length value if the given |
184 | certificate is a proxy one and has a path length set, and -1 otherwise. | |
185 | ||
361136f4 DSH |
186 | =head1 SEE ALSO |
187 | ||
188 | L<X509_check_purpose(3)> | |
189 | ||
e417070c RS |
190 | =head1 HISTORY |
191 | ||
fe0169b0 RL |
192 | X509_get_pathlen(), X509_set_proxy_flag(), X509_set_proxy_pathlen() and |
193 | X509_get_proxy_pathlen() were added in OpenSSL 1.1.0. | |
e417070c | 194 | |
e2f92610 RS |
195 | =head1 COPYRIGHT |
196 | ||
ba4356ae | 197 | Copyright 2015-2020 The OpenSSL Project Authors. All Rights Reserved. |
e2f92610 RS |
198 | |
199 | Licensed under the OpenSSL license (the "License"). You may not use | |
200 | this file except in compliance with the License. You can obtain a copy | |
201 | in the file LICENSE in the source distribution or at | |
202 | L<https://www.openssl.org/source/license.html>. | |
203 | ||
204 | =cut |