mirror of https://github.com/openssl/openssl.git
				
				
				
			
		
			
				
	
	
		
			210 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			7.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
=pod
 | 
						|
 | 
						|
=head1 NAME
 | 
						|
 | 
						|
X509_get0_subject_key_id,
 | 
						|
X509_get0_authority_key_id,
 | 
						|
X509_get0_authority_issuer,
 | 
						|
X509_get0_authority_serial,
 | 
						|
X509_get_pathlen,
 | 
						|
X509_get_extension_flags,
 | 
						|
X509_get_key_usage,
 | 
						|
X509_get_extended_key_usage,
 | 
						|
X509_set_proxy_flag,
 | 
						|
X509_set_proxy_pathlen,
 | 
						|
X509_get_proxy_pathlen - retrieve certificate extension data
 | 
						|
 | 
						|
=head1 SYNOPSIS
 | 
						|
 | 
						|
 #include <openssl/x509v3.h>
 | 
						|
 | 
						|
 long X509_get_pathlen(X509 *x);
 | 
						|
 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);
 | 
						|
 const ASN1_OCTET_STRING *X509_get0_subject_key_id(X509 *x);
 | 
						|
 const ASN1_OCTET_STRING *X509_get0_authority_key_id(X509 *x);
 | 
						|
 const GENERAL_NAMES *X509_get0_authority_issuer(X509 *x);
 | 
						|
 const ASN1_INTEGER *X509_get0_authority_serial(X509 *x);
 | 
						|
 void X509_set_proxy_flag(X509 *x);
 | 
						|
 void X509_set_proxy_pathlen(int l);
 | 
						|
 long X509_get_proxy_pathlen(X509 *x);
 | 
						|
 | 
						|
=head1 DESCRIPTION
 | 
						|
 | 
						|
These functions retrieve information related to commonly used certificate extensions.
 | 
						|
 | 
						|
X509_get_pathlen() retrieves the path length extension from a certificate.
 | 
						|
This extension is used to limit the length of a cert chain that may be
 | 
						|
issued from that CA.
 | 
						|
 | 
						|
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.
 | 
						|
This bit may also be raised after an out-of-memory error while
 | 
						|
processing the X509 object, so it may not be related to the processed
 | 
						|
ASN1 object itself.
 | 
						|
 | 
						|
=item B<EXFLAG_NO_FINGERPRINT>
 | 
						|
 | 
						|
Failed to compute the internal SHA1 hash value of the certificate or CRL.
 | 
						|
This may be due to malloc failure or because no SHA1 implementation was found.
 | 
						|
 | 
						|
=item B<EXFLAG_INVALID_POLICY>
 | 
						|
 | 
						|
The NID_certificate_policies certificate extension is invalid or
 | 
						|
inconsistent. The certificate should be rejected.
 | 
						|
This bit may also be raised after an out-of-memory error while
 | 
						|
processing the X509 object, so it may not be related to the processed
 | 
						|
ASN1 object itself.
 | 
						|
 | 
						|
=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.
 | 
						|
 | 
						|
X509_get0_subject_key_id() returns 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.
 | 
						|
 | 
						|
X509_get0_authority_key_id() returns an internal pointer to the authority key
 | 
						|
identifier of B<x> as an B<ASN1_OCTET_STRING> or B<NULL> if the extension
 | 
						|
is not present or cannot be parsed.
 | 
						|
 | 
						|
X509_get0_authority_issuer() returns an internal pointer to the authority
 | 
						|
certificate issuer of B<x> as a stack of B<GENERAL_NAME> structures or
 | 
						|
B<NULL> if the extension is not present or cannot be parsed.
 | 
						|
 | 
						|
X509_get0_authority_serial() returns an internal pointer to the authority
 | 
						|
certificate serial number of B<x> as an B<ASN1_INTEGER> or B<NULL> if the
 | 
						|
extension is not present or cannot be parsed.
 | 
						|
 | 
						|
X509_set_proxy_flag() marks the certificate with the B<EXFLAG_PROXY> flag.
 | 
						|
This is for the users who need to mark non-RFC3820 proxy certificates as
 | 
						|
such, as OpenSSL only detects RFC3820 compliant ones.
 | 
						|
 | 
						|
X509_set_proxy_pathlen() sets the proxy certificate path length for the given
 | 
						|
certificate B<x>.  This is for the users who need to mark non-RFC3820 proxy
 | 
						|
certificates as such, as OpenSSL only detects RFC3820 compliant ones.
 | 
						|
 | 
						|
X509_get_proxy_pathlen() returns the proxy certificate path length for the
 | 
						|
given certificate B<x> if it is a proxy certificate.
 | 
						|
 | 
						|
=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
 | 
						|
information an application should examine extension values directly
 | 
						|
for example using X509_get_ext_d2i().
 | 
						|
 | 
						|
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.
 | 
						|
 | 
						|
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().
 | 
						|
 | 
						|
=head1 RETURN VALUES
 | 
						|
 | 
						|
X509_get_pathlen() returns the path length value, or -1 if the extension
 | 
						|
is not present.
 | 
						|
 | 
						|
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
 | 
						|
is absent or an error occurred during parsing.
 | 
						|
 | 
						|
X509_get_proxy_pathlen() returns the path length value if the given
 | 
						|
certificate is a proxy one and has a path length set, and -1 otherwise.
 | 
						|
 | 
						|
=head1 SEE ALSO
 | 
						|
 | 
						|
L<X509_check_purpose(3)>
 | 
						|
 | 
						|
=head1 HISTORY
 | 
						|
 | 
						|
X509_get_pathlen(), X509_set_proxy_flag(), X509_set_proxy_pathlen() and
 | 
						|
X509_get_proxy_pathlen() were added in OpenSSL 1.1.0.
 | 
						|
 | 
						|
=head1 COPYRIGHT
 | 
						|
 | 
						|
Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved.
 | 
						|
 | 
						|
Licensed under the Apache License 2.0 (the "License").  You may not use
 | 
						|
this file except in compliance with the License.  You can obtain a copy
 | 
						|
in the file LICENSE in the source distribution or at
 | 
						|
L<https://www.openssl.org/source/license.html>.
 | 
						|
 | 
						|
=cut
 |