X509_get_extension_flags.pod 4.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14
=pod

=head1 NAME

X509_get_extension_flags, X509_get_key_usage, X509_get_extended_key_usage -
retrieve certificate extension flags.

=head1 SYNOPSIS

   #include <openssl/x509v3.h>

   uint32_t X509_get_extension_flags(X509 *x);
   uint32_t X509_get_key_usage(X509 *x);
   uint32_t X509_get_extended_key_usage(X509 *x);
15
   const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x);
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93

=head1 DESCRIPTION

These functions retrieve flags related to commonly used certificate extensions.

X509_get_extension_flags() retrieves general information about a certificate,
it will return one or more of the following flags ored together.

=over 4

=item B<EXFLAG_V1>

The certificate is an obsolete version 1 certificate.

=item B<EXFLAG_BCONS>

The certificate contains a basic constraints extension.

=item B<EXFLAG_CA>

The certificate contains basic constraints and asserts the CA flag.

=item B<EXFLAG_PROXY>

The certificate is a valid proxy certificate.

=item B<EXFLAG_SI>

The certificate is self issued (that is subject and issuer names match).

=item B<EXFLAG_SS>

The subject and issuer names match and extension values imply it is self
signed.

=item B<EXFLAG_FRESHEST>

The freshest CRL extension is present in the certificate.

=item B<EXFLAG_CRITICAL>

The certificate contains an unhandled critical extension.

=item B<EXFLAG_INVALID>

Some certificate extension values are invalid or inconsistent. The
certificate should be rejected.

=item B<EXFLAG_KUSAGE>

The certificate contains a key usage extension. The value can be retrieved
using X509_get_key_usage().

=item B<EXFLAG_XKUSAGE>

The certificate contains an extended key usage extension. The value can be
retrieved using X509_get_extended_key_usage().

=back

X509_get_key_usage() returns the value of the key usage extension.  If key
usage is present will return zero or more of the flags:
B<KU_DIGITAL_SIGNATURE>, B<KU_NON_REPUDIATION>, B<KU_KEY_ENCIPHERMENT>,
B<KU_DATA_ENCIPHERMENT>, B<KU_KEY_AGREEMENT>, B<KU_KEY_CERT_SIGN>,
B<KU_CRL_SIGN>, B<KU_ENCIPHER_ONLY> or B<KU_DECIPHER_ONLY> corresponding to
individual key usage bits. If key usage is absent then B<UINT32_MAX> is
returned.

X509_get_extended_key_usage() returns the value of the extended key usage
extension. If extended key usage is present it will return zero or more of the
flags: B<XKU_SSL_SERVER>, B<XKU_SSL_CLIENT>, B<XKU_SMIME>, B<XKU_CODE_SIGN>
B<XKU_OCSP_SIGN>, B<XKU_TIMESTAMP>, B<XKU_DVCS> or B<XKU_ANYEKU>. These
correspond to the OIDs B<id-kp-serverAuth>, B<id-kp-clientAuth>,
B<id-kp-emailProtection>, B<id-kp-codeSigning>, B<id-kp-OCSPSigning>,
B<id-kp-timeStamping>, B<id-kp-dvcs> and B<anyExtendedKeyUsage> respectively.
Additionally B<XKU_SGC> is set if either Netscape or Microsoft SGC OIDs are
present.

94 95 96 97
X509_get_extended_key_usage() return an internal pointer to the subject key
identifier of B<x> as an B<ASN1_OCTET_STRING> or B<NULL> if the extension
is not present or cannot be parsed.

98 99 100 101
=head1 NOTES

The value of the flags correspond to extension values which are cached
in the B<X509> structure. If the flags returned do not provide sufficient
102 103
information an application should examine extension values directly
for example using X509_get_ext_d2i().
104 105 106 107 108 109 110 111

If the key usage or extended key usage extension is absent then typically usage
is unrestricted. For this reason X509_get_key_usage() and
X509_get_extended_key_usage() return B<UINT32_MAX> when the corresponding
extension is absent. Applications can additionally check the return value of
X509_get_extension_flags() and take appropriate action is an extension is
absent.

112 113 114 115
If X509_get0_subject_key_id() returns B<NULL> then the extension may be
absent or malformed. Applications can determine the precise reason using
X509_get_ext_d2i().

116 117
=head1 RETURN VALUE

118 119 120 121 122 123
X509_get_extension_flags(), X509_get_key_usage() and
X509_get_extended_key_usage() return sets of flags corresponding to the
certificate extension values.

X509_get0_subject_key_id() returns the subject key identifier as a
pointer to an B<ASN1_OCTET_STRING> structure or B<NULL> if the extension
A
Alessandro Ghedini 已提交
124
is absent or an error occurred during parsing.
125 126 127 128 129 130

=head1 SEE ALSO

L<X509_check_purpose(3)>

=cut