Document additions for X509 chain verification from HEAD
This commit is contained in:
parent
c90a1ae0c9
commit
5b2b60ae98
@ -6,7 +6,7 @@ DSA_get_ex_new_index, DSA_set_ex_data, DSA_get_ex_data - add application specifi
|
|||||||
|
|
||||||
=head1 SYNOPSIS
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
#include <openssl/DSA.h>
|
#include <openssl/dsa.h>
|
||||||
|
|
||||||
int DSA_get_ex_new_index(long argl, void *argp,
|
int DSA_get_ex_new_index(long argl, void *argp,
|
||||||
CRYPTO_EX_new *new_func,
|
CRYPTO_EX_new *new_func,
|
||||||
|
303
doc/crypto/X509_STORE_CTX_get_error.pod
Normal file
303
doc/crypto/X509_STORE_CTX_get_error.pod
Normal file
@ -0,0 +1,303 @@
|
|||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
X509_STORE_CTX_get_error, X509_STORE_CTX_set_error, X509_STORE_CTX_get_error_depth, X509_STORE_CTX_get_current_cert, X509_STORE_CTX_get1_chain, X509_verify_cert_error_string - get or set certificate verification status information
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
#include <openssl/x509.h>
|
||||||
|
#include <openssl/x509_vfy.h>
|
||||||
|
|
||||||
|
int X509_STORE_CTX_get_error(X509_STORE_CTX *ctx);
|
||||||
|
void X509_STORE_CTX_set_error(X509_STORE_CTX *ctx,int s);
|
||||||
|
int X509_STORE_CTX_get_error_depth(X509_STORE_CTX *ctx);
|
||||||
|
X509 * X509_STORE_CTX_get_current_cert(X509_STORE_CTX *ctx);
|
||||||
|
|
||||||
|
STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx);
|
||||||
|
|
||||||
|
const char *X509_verify_cert_error_string(long n);
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
These functions are typically called after X509_verify_cert() 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 B<ctx>, see
|
||||||
|
the B<ERROR CODES> section for a full description of all error codes.
|
||||||
|
|
||||||
|
X509_STORE_CTX_set_error() sets the error code of B<ctx> to B<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 B<depth> of the error. This is a
|
||||||
|
non-negative integer representing where in the certificate chain the error
|
||||||
|
occurred. If it is zero it occured in the end entity certificate, one if
|
||||||
|
it is the certificate which signed the end entity certificate and so on.
|
||||||
|
|
||||||
|
X509_STORE_CTX_get_current_cert() returns the certificate in B<ctx> which
|
||||||
|
caused the error or B<NULL> if no certificate is relevant.
|
||||||
|
|
||||||
|
X509_STORE_CTX_get1_chain() returns a complete validate chain if a previous
|
||||||
|
call to X509_verify_cert() is successful. If the call to X509_verify_cert()
|
||||||
|
is B<not> successful the returned chain may be incomplete or invalid. The
|
||||||
|
returned chain persists after the B<ctx> structure is freed, when it is
|
||||||
|
no longer needed it should be free up using:
|
||||||
|
|
||||||
|
sk_X509_pop_free(chain, X509_free);
|
||||||
|
|
||||||
|
X509_verify_cert_error_string() returns a human readable error string for
|
||||||
|
verification error B<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 non-negative error depth.
|
||||||
|
|
||||||
|
X509_STORE_CTX_get_current_cert() returns the cerificate which caused the
|
||||||
|
error or B<NULL> if no certificate is relevant to the error.
|
||||||
|
|
||||||
|
X509_verify_cert_error_string() returns a human readable error string for
|
||||||
|
verification error B<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_UNABLE_TO_GET_ISSUER_CERT: unable to get 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_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 SubjectPublicKeyInfo 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 certificate is invalid.
|
||||||
|
|
||||||
|
=item B<X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid>
|
||||||
|
|
||||||
|
the certificate is not yet valid: the 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 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 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 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 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 nextUpdate field contains an invalid time.
|
||||||
|
|
||||||
|
=item B<X509_V_ERR_OUT_OF_MEM: out of memory>
|
||||||
|
|
||||||
|
an error occurred trying to allocate memory. This should never happen.
|
||||||
|
|
||||||
|
=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
|
||||||
|
the root could not be found locally.
|
||||||
|
|
||||||
|
=item B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local 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.
|
||||||
|
|
||||||
|
=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.
|
||||||
|
|
||||||
|
=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 pathlength parameter has been exceeded.
|
||||||
|
|
||||||
|
=item B<X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose>
|
||||||
|
|
||||||
|
the supplied 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. This is only set
|
||||||
|
if issuer check debugging is enabled it is used for status notification and
|
||||||
|
is B<not> in itself an error.
|
||||||
|
|
||||||
|
=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. This is only set if issuer check debugging is enabled it is used
|
||||||
|
for status notification and is B<not> in itself an error.
|
||||||
|
|
||||||
|
=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. This is only set if issuer check debugging is enabled
|
||||||
|
it is used for status notification and is B<not> in itself an error.
|
||||||
|
|
||||||
|
=item B<X509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing>
|
||||||
|
|
||||||
|
the current candidate issuer certificate was rejected because its keyUsage
|
||||||
|
extension does not permit certificate signing. This is only set if issuer check
|
||||||
|
debugging is enabled it is used for status notification and is B<not> in itself
|
||||||
|
an error.
|
||||||
|
|
||||||
|
=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 occured in the permitted subtrees.
|
||||||
|
|
||||||
|
=item B<X509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation>
|
||||||
|
|
||||||
|
A name constraint violation occured 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 occured 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.
|
||||||
|
|
||||||
|
=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 B<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 SEE ALSO
|
||||||
|
|
||||||
|
L<X509_verify_cert(3)|X509_verify_cert(3)>
|
||||||
|
|
||||||
|
=head1 HISTORY
|
||||||
|
|
||||||
|
TBA
|
||||||
|
|
||||||
|
=cut
|
41
doc/crypto/X509_STORE_CTX_get_ex_new_index.pod
Normal file
41
doc/crypto/X509_STORE_CTX_get_ex_new_index.pod
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
X509_STORE_CTX_get_ex_new_index, X509_STORE_CTX_set_ex_data, X509_STORE_CTX_get_ex_data - add application specific data to X509_STORE_CTX structures
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
#include <openssl/x509_vfy.h>
|
||||||
|
|
||||||
|
int X509_STORE_CTX_get_ex_new_index(long argl, void *argp,
|
||||||
|
CRYPTO_EX_new *new_func,
|
||||||
|
CRYPTO_EX_dup *dup_func,
|
||||||
|
CRYPTO_EX_free *free_func);
|
||||||
|
|
||||||
|
int X509_STORE_CTX_set_ex_data(X509_STORE_CTX *d, int idx, void *arg);
|
||||||
|
|
||||||
|
char *X509_STORE_CTX_get_ex_data(X509_STORE_CTX *d, int idx);
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
These functions handle application specific data in X509_STORE_CTX structures.
|
||||||
|
Their usage is identical to that of RSA_get_ex_new_index(), RSA_set_ex_data()
|
||||||
|
and RSA_get_ex_data() as described in L<RSA_get_ex_new_index(3)>.
|
||||||
|
|
||||||
|
=head1 NOTES
|
||||||
|
|
||||||
|
This mechanism is used internally by the B<ssl> library to store the B<SSL>
|
||||||
|
structure associated with a verification operation in an B<X509_STORE_CTX>
|
||||||
|
structure.
|
||||||
|
|
||||||
|
=head1 SEE ALSO
|
||||||
|
|
||||||
|
L<RSA_get_ex_new_index(3)|RSA_get_ex_new_index(3)>
|
||||||
|
|
||||||
|
=head1 HISTORY
|
||||||
|
|
||||||
|
X509_STORE_CTX_get_ex_new_index(), X509_STORE_CTX_set_ex_data() and
|
||||||
|
X509_STORE_CTX_get_ex_data() are available since OpenSSL 0.9.5.
|
||||||
|
|
||||||
|
=cut
|
122
doc/crypto/X509_STORE_CTX_new.pod
Normal file
122
doc/crypto/X509_STORE_CTX_new.pod
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
X509_STORE_CTX_new, X509_STORE_CTX_cleanup, X509_STORE_CTX_free, X509_STORE_CTX_init, X509_STORE_CTX_trusted_stack, X509_STORE_CTX_set_cert, X509_STORE_CTX_set_chain, X509_STORE_CTX_set0_crls, X509_STORE_CTX_get0_param, X509_STORE_CTX_set0_param, X509_STORE_CTX_set_default - X509_STORE_CTX initialisation
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
#include <openssl/x509_vfy.h>
|
||||||
|
|
||||||
|
X509_STORE_CTX *X509_STORE_CTX_new(void);
|
||||||
|
void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx);
|
||||||
|
void X509_STORE_CTX_free(X509_STORE_CTX *ctx);
|
||||||
|
|
||||||
|
int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store,
|
||||||
|
X509 *x509, STACK_OF(X509) *chain);
|
||||||
|
|
||||||
|
void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
|
||||||
|
|
||||||
|
void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx,X509 *x);
|
||||||
|
void X509_STORE_CTX_set_chain(X509_STORE_CTX *ctx,STACK_OF(X509) *sk);
|
||||||
|
void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk);
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(X509_STORE_CTX *ctx);
|
||||||
|
void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param);
|
||||||
|
int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name);
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
These functions initialise an B<X509_STORE_CTX> structure for subsequent use
|
||||||
|
by X509_verify_cert().
|
||||||
|
|
||||||
|
X509_STORE_CTX_new() returns a newly initialised B<X509_STORE_CTX> structure.
|
||||||
|
|
||||||
|
X509_STORE_CTX_cleanup() internally cleans up an B<X509_STORE_CTX> structure.
|
||||||
|
The context can then be reused with an new call to X509_STORE_CTX_init().
|
||||||
|
|
||||||
|
X509_STORE_CTX_free() completely frees up B<ctx>. After this call B<ctx>
|
||||||
|
is no longer valid.
|
||||||
|
|
||||||
|
X509_STORE_CTX_init() sets up B<ctx> for a subsequent verification operation.
|
||||||
|
The trusted certificate store is set to B<store>, the end entity certificate
|
||||||
|
to be verified is set to B<x509> and a set of additional certificates (which
|
||||||
|
will be untrusted but may be used to build the chain) in B<chain>. Any or
|
||||||
|
all of the B<store>, B<x509> and B<chain> parameters can be B<NULL>.
|
||||||
|
|
||||||
|
X509_STORE_CTX_trusted_stack() sets the set of trusted certificates of B<ctx>
|
||||||
|
to B<sk>. This is an alternative way of specifying trusted certificates
|
||||||
|
instead of using an B<X509_STORE>.
|
||||||
|
|
||||||
|
X509_STORE_CTX_set_cert() sets the certificate to be vertified in B<ctx> to
|
||||||
|
B<x>.
|
||||||
|
|
||||||
|
X509_STORE_CTX_set_chain() sets the additional certificate chain used by B<ctx>
|
||||||
|
to B<sk>.
|
||||||
|
|
||||||
|
X509_STORE_CTX_set0_crls() sets a set of CRLs to use to aid certificate
|
||||||
|
verification to B<sk>. These CRLs will only be used if CRL verification is
|
||||||
|
enabled in the associated B<X509_VERIFY_PARAM> structure. This might be
|
||||||
|
used where additional "useful" CRLs are supplied as part of a protocol,
|
||||||
|
for example in a PKCS#7 structure.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM *X509_STORE_CTX_get0_param() retrieves an intenal pointer
|
||||||
|
to the verification parameters associated with B<ctx>.
|
||||||
|
|
||||||
|
X509_STORE_CTX_set0_param() sets the intenal verification parameter pointer
|
||||||
|
to B<param>. After this call B<param> should not be used.
|
||||||
|
|
||||||
|
X509_STORE_CTX_set_default() looks up and sets the default verification
|
||||||
|
method to B<name>. This uses the function X509_VERIFY_PARAM_lookup() to
|
||||||
|
find an appropriate set of parameters from B<name>.
|
||||||
|
|
||||||
|
=head1 NOTES
|
||||||
|
|
||||||
|
The certificates and CRLs in a store are used internally and should B<not>
|
||||||
|
be freed up until after the associated B<X509_STORE_CTX> is freed. Legacy
|
||||||
|
applications might implicitly use an B<X509_STORE_CTX> like this:
|
||||||
|
|
||||||
|
X509_STORE_CTX ctx;
|
||||||
|
X509_STORE_CTX_init(&ctx, store, cert, chain);
|
||||||
|
|
||||||
|
this is B<not> recommended in new applications they should instead do:
|
||||||
|
|
||||||
|
X509_STORE_CTX *ctx;
|
||||||
|
ctx = X509_STORE_CTX_new();
|
||||||
|
if (ctx == NULL)
|
||||||
|
/* Bad error */
|
||||||
|
X509_STORE_CTX_init(ctx, store, cert, chain);
|
||||||
|
|
||||||
|
=head1 BUGS
|
||||||
|
|
||||||
|
The certificates and CRLs in a context are used internally and should B<not>
|
||||||
|
be freed up until after the associated B<X509_STORE_CTX> is freed. Copies
|
||||||
|
should be made or reference counts increased instead.
|
||||||
|
|
||||||
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
X509_STORE_CTX_new() returns an newly allocates context or B<NULL> is an
|
||||||
|
error occurred.
|
||||||
|
|
||||||
|
X509_STORE_CTX_init() returns 1 for success or 0 if an error occurred.
|
||||||
|
|
||||||
|
X509_STORE_CTX_get0_param() returns a pointer to an B<X509_VERIFY_PARAM>
|
||||||
|
structure or B<NULL> if an error occurred.
|
||||||
|
|
||||||
|
X509_STORE_CTX_cleanup(), X509_STORE_CTX_free(), X509_STORE_CTX_trusted_stack(),
|
||||||
|
X509_STORE_CTX_set_cert(), X509_STORE_CTX_set_chain(),
|
||||||
|
X509_STORE_CTX_set0_crls() and X509_STORE_CTX_set0_param() do not return
|
||||||
|
values.
|
||||||
|
|
||||||
|
X509_STORE_CTX_set_default() returns 1 for success or 0 if an error occurred.
|
||||||
|
|
||||||
|
=head1 SEE ALSO
|
||||||
|
|
||||||
|
L<X509_verify_cert(3)|X509_verify_cert(3)>
|
||||||
|
L<X509_VERIFY_PARAM_set_flags(3)|X509_VERIFY_PARAM_set_flags(3)>
|
||||||
|
|
||||||
|
=head1 HISTORY
|
||||||
|
|
||||||
|
X509_STORE_CTX_set0_crls() was first added to OpenSSL 1.0.0
|
||||||
|
|
||||||
|
=cut
|
161
doc/crypto/X509_STORE_CTX_set_verify_cb.pod
Normal file
161
doc/crypto/X509_STORE_CTX_set_verify_cb.pod
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
X509_STORE_CTX_set_verify_cb - set verification callback
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
#include <openssl/x509_vfy.h>
|
||||||
|
|
||||||
|
void X509_STORE_CTX_set_verify_cb(X509_STORE_CTX *ctx,
|
||||||
|
int (*verify_cb)(int ok, X509_STORE_CTX *ctx));
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
X509_STORE_CTX_set_verify_cb() sets the verification callback of B<ctx> to
|
||||||
|
B<verify_cb> overwriting any existing callback.
|
||||||
|
|
||||||
|
The verification callback can be used to customise the operation of certificate
|
||||||
|
verification, either by overriding error conditions or logging errors for
|
||||||
|
debugging purposes.
|
||||||
|
|
||||||
|
However a verification callback is B<not> essential and the default operation
|
||||||
|
is often sufficient.
|
||||||
|
|
||||||
|
The B<ok> parameter to the callback indicates the value the callback should
|
||||||
|
return to retain the default behaviour. If it is zero then and error condition
|
||||||
|
is indicated. If it is 1 then no error occurred. If the flag
|
||||||
|
B<X509_V_FLAG_NOTIFY_POLICY> is set then B<ok> is set to 2 to indicate the
|
||||||
|
policy checking is complete.
|
||||||
|
|
||||||
|
The B<ctx> parameter to the callback is the B<X509_STORE_CTX> structure that
|
||||||
|
is performing the verification operation. A callback can examine this
|
||||||
|
structure and receive additional information about the error, for example
|
||||||
|
by calling X509_STORE_CTX_get_current_cert(). Additional application data can
|
||||||
|
be passed to the callback via the B<ex_data> mechanism.
|
||||||
|
|
||||||
|
=head1 WARNING
|
||||||
|
|
||||||
|
In general a verification callback should B<NOT> unconditionally return 1 in
|
||||||
|
all circumstances because this will allow verification to succeed no matter
|
||||||
|
what the error. This effectively removes all security from the application
|
||||||
|
because B<any> certificate (including untrusted generated ones) will be
|
||||||
|
accepted.
|
||||||
|
|
||||||
|
=head1 NOTES
|
||||||
|
|
||||||
|
The verification callback can be set and inherited from the parent structure
|
||||||
|
performing the operation. In some cases (such as S/MIME verification) the
|
||||||
|
B<X509_STORE_CTX> structure is created and destroyed internally and the
|
||||||
|
only way to set a custom verification callback is by inheriting it from the
|
||||||
|
associated B<X509_STORE>.
|
||||||
|
|
||||||
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
X509_STORE_CTX_set_verify_cb() does not return a value.
|
||||||
|
|
||||||
|
=head1 EXAMPLES
|
||||||
|
|
||||||
|
Default callback operation:
|
||||||
|
|
||||||
|
int verify_callback(int ok, X509_STORE_CTX *ctx)
|
||||||
|
{
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
Simple example, suppose a certificate in the chain is expired and we wish
|
||||||
|
to continue after this error:
|
||||||
|
|
||||||
|
int verify_callback(int ok, X509_STORE_CTX *ctx)
|
||||||
|
{
|
||||||
|
/* Tolerate certificate expiration */
|
||||||
|
if (X509_STORE_CTX_get_error(ctx) == X509_V_ERR_CERT_HAS_EXPIRED)
|
||||||
|
return 1;
|
||||||
|
/* Otherwise don't override */
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
More complex example, we don't wish to continue after B<any> certificate has
|
||||||
|
expired just one specific case:
|
||||||
|
|
||||||
|
int verify_callback(int ok, X509_STORE_CTX *ctx)
|
||||||
|
{
|
||||||
|
int err = X509_STORE_CTX_get_error(ctx);
|
||||||
|
X509 *err_cert = X509_STORE_CTX_get_current_cert(ctx);
|
||||||
|
if (err == X509_V_ERR_CERT_HAS_EXPIRED)
|
||||||
|
{
|
||||||
|
if (check_is_acceptable_expired_cert(err_cert)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
|
Full featured logging callback. In this case the B<bio_err> is assumed to be
|
||||||
|
a global logging B<BIO>, an alternative would to store a BIO in B<ctx> using
|
||||||
|
B<ex_data>.
|
||||||
|
|
||||||
|
int verify_callback(int ok, X509_STORE_CTX *ctx)
|
||||||
|
{
|
||||||
|
X509 *err_cert;
|
||||||
|
int err,depth;
|
||||||
|
|
||||||
|
err_cert = X509_STORE_CTX_get_current_cert(ctx);
|
||||||
|
err = X509_STORE_CTX_get_error(ctx);
|
||||||
|
depth = X509_STORE_CTX_get_error_depth(ctx);
|
||||||
|
|
||||||
|
BIO_printf(bio_err,"depth=%d ",depth);
|
||||||
|
if (err_cert)
|
||||||
|
{
|
||||||
|
X509_NAME_print_ex(bio_err, X509_get_subject_name(err_cert),
|
||||||
|
0, XN_FLAG_ONELINE);
|
||||||
|
BIO_puts(bio_err, "\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
BIO_puts(bio_err, "<no cert>\n");
|
||||||
|
if (!ok)
|
||||||
|
BIO_printf(bio_err,"verify error:num=%d:%s\n",err,
|
||||||
|
X509_verify_cert_error_string(err));
|
||||||
|
switch (err)
|
||||||
|
{
|
||||||
|
case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT:
|
||||||
|
BIO_puts(bio_err,"issuer= ");
|
||||||
|
X509_NAME_print_ex(bio_err, X509_get_issuer_name(err_cert),
|
||||||
|
0, XN_FLAG_ONELINE);
|
||||||
|
BIO_puts(bio_err, "\n");
|
||||||
|
break;
|
||||||
|
case X509_V_ERR_CERT_NOT_YET_VALID:
|
||||||
|
case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD:
|
||||||
|
BIO_printf(bio_err,"notBefore=");
|
||||||
|
ASN1_TIME_print(bio_err,X509_get_notBefore(err_cert));
|
||||||
|
BIO_printf(bio_err,"\n");
|
||||||
|
break;
|
||||||
|
case X509_V_ERR_CERT_HAS_EXPIRED:
|
||||||
|
case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD:
|
||||||
|
BIO_printf(bio_err,"notAfter=");
|
||||||
|
ASN1_TIME_print(bio_err,X509_get_notAfter(err_cert));
|
||||||
|
BIO_printf(bio_err,"\n");
|
||||||
|
break;
|
||||||
|
case X509_V_ERR_NO_EXPLICIT_POLICY:
|
||||||
|
policies_print(bio_err, ctx);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (err == X509_V_OK && ok == 2)
|
||||||
|
/* print out policies */
|
||||||
|
|
||||||
|
BIO_printf(bio_err,"verify return:%d\n",ok);
|
||||||
|
return(ok);
|
||||||
|
}
|
||||||
|
|
||||||
|
=head1 SEE ALSO
|
||||||
|
|
||||||
|
L<X509_STORE_CTX_get_error(3)|X509_STORE_CTX_get_error(3)>
|
||||||
|
L<X509_STORE_set_verify_cb_func(3)|X509_STORE_set_verify_cb_func(3)>
|
||||||
|
L<X509_STORE_CTX_get_ex_new_index(3)|X509_STORE_CTX_get_ex_new_index(3)>
|
||||||
|
|
||||||
|
=head1 HISTORY
|
||||||
|
|
||||||
|
X509_STORE_CTX_set_verify_cb() is available in all versions of SSLeay and
|
||||||
|
OpenSSL.
|
||||||
|
|
||||||
|
=cut
|
54
doc/crypto/X509_STORE_set_verify_cb_func.pod
Normal file
54
doc/crypto/X509_STORE_set_verify_cb_func.pod
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
X509_STORE_set_verify_cb_func, X509_STORE_set_verify_cb - set verification callback
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
#include <openssl/x509_vfy.h>
|
||||||
|
|
||||||
|
void X509_STORE_set_verify_cb(X509_STORE *st,
|
||||||
|
int (*verify_cb)(int ok, X509_STORE_CTX *ctx));
|
||||||
|
|
||||||
|
void X509_STORE_set_verify_cb_func(X509_STORE *st,
|
||||||
|
int (*verify_cb)(int ok, X509_STORE_CTX *ctx));
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
X509_STORE_set_verify_cb() sets the verification callback of B<ctx> to
|
||||||
|
B<verify_cb> overwriting any existing callback.
|
||||||
|
|
||||||
|
X509_STORE_set_verify_cb_func() also sets the verification callback but it
|
||||||
|
is implemented as a macro.
|
||||||
|
|
||||||
|
=head 1 NOTES
|
||||||
|
|
||||||
|
The verification callback from an B<X509_STORE> is inherited by
|
||||||
|
the corresponding B<X509_STORE_CTX> structure when it is initialized. This can
|
||||||
|
be used to set the verification callback when the B<X509_STORE_CTX> is
|
||||||
|
otherwise inaccessible (for example during S/MIME verification).
|
||||||
|
|
||||||
|
=head1 BUGS
|
||||||
|
|
||||||
|
The macro version of this function was the only one available before
|
||||||
|
OpenSSL 1.0.0.
|
||||||
|
|
||||||
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
X509_STORE_set_verify_cb() and X509_STORE_set_verify_cb_func() do not return
|
||||||
|
a value.
|
||||||
|
|
||||||
|
=head1 SEE ALSO
|
||||||
|
|
||||||
|
L<X509_STORE_CTX_set_verify_cb(3)|X509_STORE_CTX_set_verify_cb(3)>
|
||||||
|
L<CMS_verify(3)|CMS_verify(3)>
|
||||||
|
|
||||||
|
=head1 HISTORY
|
||||||
|
|
||||||
|
X509_STORE_set_verify_cb_func() is available in all versions of SSLeay and
|
||||||
|
OpenSSL.
|
||||||
|
|
||||||
|
X509_STORE_set_verify_cb() was added to OpenSSL 1.0.0.
|
||||||
|
|
||||||
|
=cut
|
171
doc/crypto/X509_VERIFY_PARAM_set_flags.pod
Normal file
171
doc/crypto/X509_VERIFY_PARAM_set_flags.pod
Normal file
@ -0,0 +1,171 @@
|
|||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_get_flags, X509_VERIFY_PARAM_set_purpose, X509_VERIFY_PARAM_set_trust, X509_VERIFY_PARAM_set_depth, X509_VERIFY_PARAM_get_depth, X509_VERIFY_PARAM_set_time, X509_VERIFY_PARAM_add0_policy, X509_VERIFY_PARAM_set1_policies - X509 verification parameters
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
#include <openssl/x509_vfy.h>
|
||||||
|
|
||||||
|
int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags);
|
||||||
|
int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param,
|
||||||
|
unsigned long flags);
|
||||||
|
unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param);
|
||||||
|
|
||||||
|
int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose);
|
||||||
|
int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust);
|
||||||
|
|
||||||
|
void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t);
|
||||||
|
|
||||||
|
int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param,
|
||||||
|
ASN1_OBJECT *policy);
|
||||||
|
int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,
|
||||||
|
STACK_OF(ASN1_OBJECT) *policies);
|
||||||
|
|
||||||
|
void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth);
|
||||||
|
int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param);
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
These functions manipulate the B<X509_VERIFY_PARAM> structure associated with
|
||||||
|
a certificate verification operation.
|
||||||
|
|
||||||
|
The X509_VERIFY_PARAM_set_flags() function sets the flags in B<param> by oring
|
||||||
|
it with B<flags>. See the B<VERIFICATION FLAGS> section for a complete
|
||||||
|
description of values the B<flags> parameter can take.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_get_flags() returns the flags in B<param>.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_clear_flags() clears the flags B<flags> in B<param>.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_set_purpose() sets the verification purpose in B<param>
|
||||||
|
to B<purpose>. This determines the acceptable purpose of the certificate
|
||||||
|
chain, for example SSL client or SSL server.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_set_trust() sets the trust setting in B<param> to
|
||||||
|
B<trust>.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_set_time() sets the verification time in B<param> to
|
||||||
|
B<t>. Normally the current time is used.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_add0_policy() enables policy checking (it is disabled
|
||||||
|
by default) and adds B<policy> to the acceptable policy set.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_set1_policies() enables policy checking (it is disabled
|
||||||
|
by default) and sets the acceptable policy set to B<policies>. Any existing
|
||||||
|
policy set is cleared. The B<policies> parameter can be B<NULL> to clear
|
||||||
|
an existing policy set.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_set_depth() sets the maximum verification depth to B<depth>.
|
||||||
|
That is the maximum number of untrusted CA certificates that can appear in a
|
||||||
|
chain.
|
||||||
|
|
||||||
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_set_flags(), X509_VERIFY_PARAM_clear_flags(),
|
||||||
|
X509_VERIFY_PARAM_set_purpose(), X509_VERIFY_PARAM_set_trust(),
|
||||||
|
X509_VERIFY_PARAM_add0_policy() and X509_VERIFY_PARAM_set1_policies() return 1
|
||||||
|
for success and 0 for failure.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_get_flags() returns the current verification flags.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_set_time() and X509_VERIFY_PARAM_set_depth() do not return
|
||||||
|
values.
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM_get_depth() returns the current verification depth.
|
||||||
|
|
||||||
|
=head1 VERIFICATION FLAGS
|
||||||
|
|
||||||
|
The verification flags consists of zero or more of the following flags
|
||||||
|
ored together.
|
||||||
|
|
||||||
|
B<X509_V_FLAG_CRL_CHECK> enables CRL checking for the certificate chain leaf
|
||||||
|
certificate. An error occurs if a suitable CRL cannot be found.
|
||||||
|
|
||||||
|
B<X509_V_FLAG_CRL_CHECK_ALL> enables CRL checking for the entire certificate
|
||||||
|
chain.
|
||||||
|
|
||||||
|
B<X509_V_FLAG_IGNORE_CRITICAL> disabled critical extension checking. By default
|
||||||
|
any unhandled critical extensions in certificates or (if checked) CRLs results
|
||||||
|
in a fatal error. If this flag is set unhandled critical extensions are
|
||||||
|
ignored. B<WARNING> setting this option for anything other than debugging
|
||||||
|
purposes can be a security risk. Finer control over which extensions are
|
||||||
|
supported can be performed in the verification callback.
|
||||||
|
|
||||||
|
THe B<X509_V_FLAG_X509_STRICT> flag disables workarounds for some broken
|
||||||
|
certificates and makes the verification strictly apply B<X509> rules.
|
||||||
|
|
||||||
|
B<X509_V_FLAG_ALLOW_PROXY_CERTS> enables proxy certificate verification.
|
||||||
|
|
||||||
|
B<X509_V_FLAG_POLICY_CHECK> enables certificate policy checking, by default
|
||||||
|
no policy checking is peformed. Additional information is sent to the
|
||||||
|
verification callback relating to policy checking.
|
||||||
|
|
||||||
|
B<X509_V_FLAG_EXPLICIT_POLICY>, B<X509_V_FLAG_INHIBIT_ANY> and
|
||||||
|
B<X509_V_FLAG_INHIBIT_MAP> set the B<require explicit policy>, B<inhibit any
|
||||||
|
policy> and B<inhibit policy mapping> flags respectively as defined in
|
||||||
|
B<RFC3280>. Policy checking is automatically enabled if any of these flags
|
||||||
|
are set.
|
||||||
|
|
||||||
|
If B<X509_V_FLAG_NOTIFY_POLICY> is set and the policy checking is successful
|
||||||
|
a special status code is set to the verification callback. This permits it
|
||||||
|
to examine the valid policy tree and perform additional checks or simply
|
||||||
|
log it for debugging purposes.
|
||||||
|
|
||||||
|
By default some addtional features such as indirect CRLs and CRLs signed by
|
||||||
|
different keys are disabled. If B<X509_V_FLAG_EXTENDED_CRL_SUPPORT> is set
|
||||||
|
they are enabled.
|
||||||
|
|
||||||
|
If B<X509_V_FLAG_USE_DELTAS> ise set delta CRLs (if present) are used to
|
||||||
|
determine certificate status. If not set deltas are ignored.
|
||||||
|
|
||||||
|
B<X509_V_FLAG_CHECK_SS_SIGNATURE> enables checking of the root CA self signed
|
||||||
|
cerificate signature. By default this check is disabled because it doesn't
|
||||||
|
add any additional security but in some cases applications might want to
|
||||||
|
check the signature anyway. A side effect of not checking the root CA
|
||||||
|
signature is that disabled or unsupported message digests on the root CA
|
||||||
|
are not treated as fatal errors.
|
||||||
|
|
||||||
|
The B<X509_V_FLAG_CB_ISSUER_CHECK> flag enables debugging of certificate
|
||||||
|
issuer checks. It is B<not> needed unless you are logging certificate
|
||||||
|
verification. If this flag is set then additional status codes will be sent
|
||||||
|
to the verification callback and it B<must> be prepared to handle such cases
|
||||||
|
without assuming they are hard errors.
|
||||||
|
|
||||||
|
=head1 NOTES
|
||||||
|
|
||||||
|
The above functions should be used to manipulate verification parameters
|
||||||
|
instead of legacy functions which work in specific structures such as
|
||||||
|
X509_STORE_CTX_set_flags().
|
||||||
|
|
||||||
|
=head1 BUGS
|
||||||
|
|
||||||
|
Delta CRL checking is currently primitive. Only a single delta can be used and
|
||||||
|
(partly due to limitations of B<X509_STORE>) constructed CRLs are not
|
||||||
|
maintained.
|
||||||
|
|
||||||
|
If CRLs checking is enable CRLs are expected to be available in the
|
||||||
|
corresponding B<X509_STORE> structure. No attempt is made to download
|
||||||
|
CRLs from the CRL distribution points extension.
|
||||||
|
|
||||||
|
=head1 EXAMPLE
|
||||||
|
|
||||||
|
Enable CRL checking when performing certificate verification during SSL
|
||||||
|
connections associated with an B<SSL_CTX> structure B<ctx>:
|
||||||
|
|
||||||
|
X509_VERIFY_PARAM *param;
|
||||||
|
param = X509_VERIFY_PARAM_new();
|
||||||
|
X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
|
||||||
|
SSL_CTX_set1_param(ctx, param);
|
||||||
|
X509_VERIFY_PARAM_free(param);
|
||||||
|
|
||||||
|
=head1 SEE ALSO
|
||||||
|
|
||||||
|
L<X509_verify_cert(3)|X509_verify_cert(3)>
|
||||||
|
|
||||||
|
=head1 HISTORY
|
||||||
|
|
||||||
|
TBA
|
||||||
|
|
||||||
|
=cut
|
53
doc/crypto/X509_verify_cert.pod
Normal file
53
doc/crypto/X509_verify_cert.pod
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
=pod
|
||||||
|
|
||||||
|
=head1 NAME
|
||||||
|
|
||||||
|
X509_verify_cert - discover and verify X509 certificte chain
|
||||||
|
|
||||||
|
=head1 SYNOPSIS
|
||||||
|
|
||||||
|
#include <openssl/x509.h>
|
||||||
|
|
||||||
|
int X509_verify_cert(X509_STORE_CTX *ctx);
|
||||||
|
|
||||||
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
|
The X509_verify_cert() function attempts to discover and validate a
|
||||||
|
certificate chain based on parameters in B<ctx>. A complete description of
|
||||||
|
the process is contained in the L<verify(1)|verify(1)> manual page.
|
||||||
|
|
||||||
|
=head1 RETURN VALUES
|
||||||
|
|
||||||
|
If a complete chain can be built and validated this function returns 1,
|
||||||
|
otherwise it return zero, in exceptional circumstances it can also
|
||||||
|
return a negative code.
|
||||||
|
|
||||||
|
If the function fails additional error information can be obtained by
|
||||||
|
examining B<ctx> using, for example X509_STORE_CTX_get_error().
|
||||||
|
|
||||||
|
=head1 NOTES
|
||||||
|
|
||||||
|
Applications rarely call this function directly but it is used by
|
||||||
|
OpenSSL internally for certificate validation, in both the S/MIME and
|
||||||
|
SSL/TLS code.
|
||||||
|
|
||||||
|
The negative return value from X509_verify_cert() can only occur if no
|
||||||
|
certificate is set in B<ctx> (due to a programming error) or if a retry
|
||||||
|
operation is requested during internal lookups (which never happens with
|
||||||
|
standard lookup methods). It is however recommended that application check
|
||||||
|
for <= 0 return value on error.
|
||||||
|
|
||||||
|
=head1 BUGS
|
||||||
|
|
||||||
|
This function uses the header B<x509.h> as opposed to most chain verification
|
||||||
|
functiosn which use B<x509_vfy.h>.
|
||||||
|
|
||||||
|
=head1 SEE ALSO
|
||||||
|
|
||||||
|
L<X509_STORE_CTX_get_error(3)|X509_STORE_CTX_get_error(3)>
|
||||||
|
|
||||||
|
=head1 HISTORY
|
||||||
|
|
||||||
|
X509_verify_cert() is available in all versions of SSLeay and OpenSSL.
|
||||||
|
|
||||||
|
=cut
|
Loading…
x
Reference in New Issue
Block a user