=pod

=head1 NAME

X509_STORE_CTX_get_error, X509_STORE_CTX_set_error,
X509_STORE_CTX_get_error_depth, X509_STORE_CTX_set_error_depth,
X509_STORE_CTX_get_current_cert, X509_STORE_CTX_set_current_cert,
X509_STORE_CTX_get0_cert, X509_STORE_CTX_get1_chain,
X509_verify_cert_error_string - get or set certificate verification status
information

=head1 SYNOPSIS

 #include <openssl/x509.h>

 int   X509_STORE_CTX_get_error(const X509_STORE_CTX *ctx);
 void  X509_STORE_CTX_set_error(X509_STORE_CTX *ctx, int s);
 int   X509_STORE_CTX_get_error_depth(const X509_STORE_CTX *ctx);
 void  X509_STORE_CTX_set_error_depth(X509_STORE_CTX *ctx, int depth);
 X509 *X509_STORE_CTX_get_current_cert(const X509_STORE_CTX *ctx);
 void  X509_STORE_CTX_set_current_cert(X509_STORE_CTX *ctx, X509 *x);
 X509 *X509_STORE_CTX_get0_cert(const X509_STORE_CTX *ctx);

 STACK_OF(X509) *X509_STORE_CTX_get1_chain(const X509_STORE_CTX *ctx);

 const char *X509_verify_cert_error_string(long n);

=head1 DESCRIPTION

These functions are typically called after certificate or chain verification
using L<X509_verify_cert(3)> or L<X509_STORE_CTX_verify(3)> has indicated
an error or in a verification callback to determine the nature of an error.

X509_STORE_CTX_get_error() returns the error code of I<ctx>.
See the L</ERROR CODES> section for a full description of all error codes.
It may return a code != X509_V_OK even if X509_verify_cert() did not indicate
an error, likely because a verification callback function has waived the error.

X509_STORE_CTX_set_error() sets the error code of I<ctx> to I<s>. For example
it might be used in a verification callback to set an error based on additional
checks.

X509_STORE_CTX_get_error_depth() returns the I<depth> of the error. This is a
nonnegative integer representing where in the certificate chain the error
occurred. If it is zero it occurred in the end entity certificate, one if
it is the certificate which signed the end entity certificate and so on.

X509_STORE_CTX_set_error_depth() sets the error I<depth>.
This can be used in combination with X509_STORE_CTX_set_error() to set the
depth at which an error condition was detected.

X509_STORE_CTX_get_current_cert() returns the certificate in I<ctx> which
caused the error or NULL if no certificate is relevant.

X509_STORE_CTX_set_current_cert() sets the certificate I<x> in I<ctx> which
caused the error.
This value is not intended to remain valid for very long, and remains owned by
the caller.
It may be examined by a verification callback invoked to handle each error
encountered during chain verification and is no longer required after such a
callback.
If a callback wishes the save the certificate for use after it returns, it
needs to increment its reference count via L<X509_up_ref(3)>.
Once such a I<saved> certificate is no longer needed it can be freed with
L<X509_free(3)>.

X509_STORE_CTX_get0_cert() retrieves an internal pointer to the
certificate being verified by the I<ctx>.

X509_STORE_CTX_get1_chain() returns a complete validate chain if a previous
verification is successful. Otherwise the returned chain may be incomplete or
invalid.  The returned chain persists after the I<ctx> structure is freed.
When it is no longer needed it should be free up using:

 OSSL_STACK_OF_X509_free(chain);

X509_verify_cert_error_string() returns a human readable error string for
verification error I<n>.

=head1 RETURN VALUES

X509_STORE_CTX_get_error() returns B<X509_V_OK> or an error code.

X509_STORE_CTX_get_error_depth() returns a nonnegative error depth.

X509_STORE_CTX_get_current_cert() returns the certificate which caused the
error or NULL if no certificate is relevant to the error.

X509_verify_cert_error_string() returns a human readable error string for
verification error I<n>.

=head1 ERROR CODES

A list of error codes and messages is shown below.  Some of the
error codes are defined but currently never returned: these are described as
"unused".

=over 4

=item B<X509_V_OK: ok>

The operation was successful.

=item B<X509_V_ERR_UNSPECIFIED: unspecified certificate verification error>

Unspecified error; should not happen.

=item B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate>

The issuer certificate of a locally looked up certificate could not be found.
This normally means the list of trusted certificates is not complete.
To allow any certificate (not only a self-signed one) in the trust store
to terminate the chain the B<X509_V_FLAG_PARTIAL_CHAIN> flag may be set.

=item B<X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL>

The CRL of a certificate could not be found.

=item B<X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE:
unable to decrypt certificate's signature>

The certificate signature could not be decrypted. This means that the actual
signature value could not be determined rather than it not matching the
expected value, this is only meaningful for RSA keys.

=item B<X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE:
unable to decrypt CRL's signature>

The CRL signature could not be decrypted: this means that the actual signature
value could not be determined rather than it not matching the expected value.
Unused.

=item B<X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY:
unable to decode issuer public key>

The public key in the certificate C<SubjectPublicKeyInfo> field could
not be read.

=item B<X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure>

The signature of the certificate is invalid.

=item B<X509_V_ERR_CRL_SIGNATURE_FAILURE: CRL signature failure>

The signature of the CRL is invalid.

=item B<X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid>

The certificate is not yet valid: the C<notBefore> date is after the
current time.

=item B<X509_V_ERR_CERT_HAS_EXPIRED: certificate has expired>

The certificate has expired: that is the C<notAfter> date is before the
current time.

=item B<X509_V_ERR_CRL_NOT_YET_VALID: CRL is not yet valid>

The CRL is not yet valid.

=item B<X509_V_ERR_CRL_HAS_EXPIRED: CRL has expired>

The CRL has expired.

=item B<X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
format error in certificate's notBefore field>

The certificate C<notBefore> field contains an invalid time.

=item B<X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
format error in certificate's notAfter field>

The certificate C<notAfter> field contains an invalid time.

=item B<X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD:
format error in CRL's lastUpdate field>

The CRL B<lastUpdate> field contains an invalid time.

=item B<X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD:
format error in CRL's nextUpdate field>

The CRL C<nextUpdate> field contains an invalid time.

=item B<X509_V_ERR_OUT_OF_MEM: out of memory>

An error occurred trying to allocate memory.

=item B<X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self-signed certificate>

The passed certificate is self-signed and the same certificate cannot be found
in the list of trusted certificates.

=item B<X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:
self-signed certificate in certificate chain>

The certificate chain could be built up using the untrusted certificates
but no suitable trust anchor (which typically is a self-signed root certificate)
could be found in the trust store.

=item B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY:
unable to get local issuer certificate>

The issuer certificate could not be found: this occurs if the issuer certificate
of an untrusted certificate cannot be found.

=item B<X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE:
unable to verify the first certificate>

No signatures could be verified because the chain contains only one certificate
and it is not self-signed and the B<X509_V_FLAG_PARTIAL_CHAIN> flag is not set.

=item B<X509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long>

The certificate chain length is greater than the supplied maximum depth. Unused.

=item B<X509_V_ERR_CERT_REVOKED: certificate revoked>

The certificate has been revoked.

=item B<X509_V_ERR_INVALID_CA: invalid CA certificate>

A CA certificate is invalid. Either it is not a CA or its extensions are not
consistent with the supplied purpose.

=item B<X509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded>

The basicConstraints path-length parameter has been exceeded.

=item B<X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose>

The target certificate cannot be used for the specified purpose.

=item B<X509_V_ERR_CERT_UNTRUSTED: certificate not trusted>

The root CA is not marked as trusted for the specified purpose.

=item B<X509_V_ERR_CERT_REJECTED: certificate rejected>

The root CA is marked to reject the specified purpose.

=item B<X509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch>

The current candidate issuer certificate was rejected because its subject name
did not match the issuer name of the current certificate.

=item B<X509_V_ERR_AKID_SKID_MISMATCH:
authority and subject key identifier mismatch>

The current candidate issuer certificate was rejected because its subject key
identifier was present and did not match the authority key identifier current
certificate.

=item B<X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH:
authority and issuer serial number mismatch>

The current candidate issuer certificate was rejected because its issuer name
and serial number was present and did not match the authority key identifier of
the current certificate.

=item B<X509_V_ERR_KEYUSAGE_NO_CERTSIGN:
key usage does not include certificate signing>

The current candidate issuer certificate was rejected because its C<keyUsage>
extension does not permit certificate signing.

=item B<X509_V_ERR_INVALID_EXTENSION:
invalid or inconsistent certificate extension>

A certificate extension had an invalid value (for example an incorrect
encoding) or some value inconsistent with other extensions.

=item B<X509_V_ERR_INVALID_POLICY_EXTENSION:
invalid or inconsistent certificate policy extension>

A certificate policies extension had an invalid value (for example an incorrect
encoding) or some value inconsistent with other extensions. This error only
occurs if policy processing is enabled.

=item B<X509_V_ERR_NO_EXPLICIT_POLICY: no explicit policy>

The verification flags were set to require and explicit policy but none was
present.

=item B<X509_V_ERR_DIFFERENT_CRL_SCOPE: different CRL scope>

The only CRLs that could be found did not match the scope of the certificate.

=item B<X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE: Unsupported extension feature>

Some feature of a certificate extension is not supported. Unused.

=item B<X509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation>

A name constraint violation occurred in the permitted subtrees.

=item B<X509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation>

A name constraint violation occurred in the excluded subtrees.

=item B<X509_V_ERR_SUBTREE_MINMAX:
name constraints minimum and maximum not supported>

A certificate name constraints extension included a minimum or maximum field:
this is not supported.

=item B<X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE:
unsupported name constraint type>

An unsupported name constraint type was encountered. OpenSSL currently only
supports directory name, DNS name, email and URI types.

=item B<X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX:
unsupported or invalid name constraint syntax>

The format of the name constraint is not recognised: for example an email
address format of a form not mentioned in RFC3280. This could be caused by
a garbage extension or some new feature not currently supported.

=item B<X509_V_ERR_CRL_PATH_VALIDATION_ERROR: CRL path validation error>

An error occurred when attempting to verify the CRL path. This error can only
happen if extended CRL checking is enabled.

=item B<X509_V_ERR_APPLICATION_VERIFICATION: application verification failure>

An application specific error. This will never be returned unless explicitly
set by an application callback.

=item B<X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER: unable to get CRL issuer certificate>

Unable to get CRL issuer certificate.

=item B<X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION: unhandled critical extension>

Unhandled critical extension.

=item B<X509_V_ERR_KEYUSAGE_NO_CRL_SIGN: key usage does not include CRL signing>

Key usage does not include CRL signing.

=item B<X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION: unhandled critical CRL extension>

Unhandled critical CRL extension.

=item B<X509_V_ERR_INVALID_NON_CA: invalid non-CA certificate (has CA markings)>

Invalid non-CA certificate has CA markings.

=item B<X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED: proxy path length constraint exceeded>

Proxy path length constraint exceeded.

=item B<X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE: key usage does not include digital signature>

Key usage does not include digital signature, and therefore cannot sign
certificates.

=item B<X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED: proxy certificates not allowed, please set the appropriate flag>

Proxy certificates not allowed unless the B<X509_V_FLAG_ALLOW_PROXY_CERTS> flag
is set.

=item B<X509_V_ERR_UNNESTED_RESOURCE: RFC 3779 resource not subset of parent's resources>

See RFC 3779 for details.

=item B<X509_V_ERR_UNSUPPORTED_NAME_SYNTAX: unsupported or invalid name syntax>

Unsupported or invalid name syntax.

=item B<X509_V_ERR_PATH_LOOP: path loop>

Path loop.

=item B<X509_V_ERR_HOSTNAME_MISMATCH: hostname mismatch>

Hostname mismatch.

=item B<X509_V_ERR_EMAIL_MISMATCH: email address mismatch>

Email address mismatch.

=item B<X509_V_ERR_IP_ADDRESS_MISMATCH: IP address mismatch>

IP address mismatch.

=item B<X509_V_ERR_DANE_NO_MATCH: no matching DANE TLSA records>

DANE TLSA authentication is enabled, but no TLSA records matched the
certificate chain.
This error is only possible in L<openssl-s_client(1)>.

=item B<X509_V_ERR_EE_KEY_TOO_SMALL: EE certificate key too weak>

EE certificate key too weak.

=item B<X509_V_ERR_CA_KEY_TOO_SMALL: CA certificate key too weak>

CA certificate key too weak.

=item B<X509_V_ERR_CA_MD_TOO_WEAK: CA signature digest algorithm too weak>

CA signature digest algorithm too weak.

=item B<X509_V_ERR_INVALID_CALL: invalid certificate verification context>

Invalid certificate verification context.

=item B<X509_V_ERR_STORE_LOOKUP: issuer certificate lookup error>

Issuer certificate lookup error.

=item B<X509_V_ERR_NO_VALID_SCTS: certificate transparency required, but no valid SCTs found>

Certificate Transparency required, but no valid SCTs found.

=item B<X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION: proxy subject name violation>

Proxy subject name violation.

=item B<X509_V_ERR_OCSP_VERIFY_NEEDED: OCSP verification needed>

Returned by the verify callback to indicate an OCSP verification is needed.

=item B<X509_V_ERR_OCSP_VERIFY_FAILED: OCSP verification failed>

Returned by the verify callback to indicate OCSP verification failed.

=item B<X509_V_ERR_OCSP_CERT_UNKNOWN: OCSP unknown cert>

Returned by the verify callback to indicate that the certificate is not
recognized by the OCSP responder.

=item B<X509_V_ERR_NO_ISSUER_PUBLIC_KEY: issuer certificate doesn't have a public key>

The issuer certificate does not have a public key.

=item B<X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH: subject signature algorithm and issuer public key algorithm mismatch>

The issuer's public key is not of the type required by the signature in
the subject's certificate.

=back

=head1 NOTES

The above functions should be used instead of directly referencing the fields
in the B<X509_VERIFY_CTX> structure.

In versions of OpenSSL before 1.0 the current certificate returned by
X509_STORE_CTX_get_current_cert() was never NULL. Applications should
check the return value before printing out any debugging information relating
to the current certificate.

If an unrecognised error code is passed to X509_verify_cert_error_string() the
numerical value of the unknown code is returned in a static buffer. This is not
thread safe but will never happen unless an invalid code is passed.

=head1 BUGS

Previous versions of this documentation swapped the meaning of the
B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT> and
B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY> error codes.

=head1 SEE ALSO

L<X509_verify_cert(3)>, L<X509_STORE_CTX_verify(3)>,
L<X509_up_ref(3)>,
L<X509_free(3)>.

=head1 COPYRIGHT

Copyright 2009-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
