1 | =pod
|
---|
2 |
|
---|
3 | =head1 NAME
|
---|
4 |
|
---|
5 | X509_build_chain,
|
---|
6 | X509_verify_cert,
|
---|
7 | X509_STORE_CTX_verify - build and verify X509 certificate chain
|
---|
8 |
|
---|
9 | =head1 SYNOPSIS
|
---|
10 |
|
---|
11 | #include <openssl/x509_vfy.h>
|
---|
12 |
|
---|
13 | STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs,
|
---|
14 | X509_STORE *store, int with_self_signed,
|
---|
15 | OSSL_LIB_CTX *libctx, const char *propq);
|
---|
16 | int X509_verify_cert(X509_STORE_CTX *ctx);
|
---|
17 | int X509_STORE_CTX_verify(X509_STORE_CTX *ctx);
|
---|
18 |
|
---|
19 | =head1 DESCRIPTION
|
---|
20 |
|
---|
21 | X509_build_chain() builds a certificate chain starting from I<target>
|
---|
22 | using the optional list of intermediate CA certificates I<certs>.
|
---|
23 | If I<store> is NULL it builds the chain as far down as possible, ignoring errors.
|
---|
24 | Else the chain must reach a trust anchor contained in I<store>.
|
---|
25 | It internally uses a B<X509_STORE_CTX> structure associated with the library
|
---|
26 | context I<libctx> and property query string I<propq>, both of which may be NULL.
|
---|
27 | In case there is more than one possibility for the chain, only one is taken.
|
---|
28 |
|
---|
29 | On success it returns a pointer to a new stack of (up_ref'ed) certificates
|
---|
30 | starting with I<target> and followed by all available intermediate certificates.
|
---|
31 | A self-signed trust anchor is included only if I<target> is the trust anchor
|
---|
32 | of I<with_self_signed> is 1.
|
---|
33 | If a non-NULL stack is returned the caller is responsible for freeing it.
|
---|
34 |
|
---|
35 | The X509_verify_cert() function attempts to discover and validate a
|
---|
36 | certificate chain based on parameters in I<ctx>.
|
---|
37 | The verification context, of type B<X509_STORE_CTX>, can be constructed
|
---|
38 | using L<X509_STORE_CTX_new(3)> and L<X509_STORE_CTX_init(3)>.
|
---|
39 | It usually includes a target certificate to be verified,
|
---|
40 | a set of certificates serving as trust anchors,
|
---|
41 | a list of non-trusted certificates that may be helpful for chain construction,
|
---|
42 | flags such as X509_V_FLAG_X509_STRICT, and various other optional components
|
---|
43 | such as a callback function that allows customizing the verification outcome.
|
---|
44 | A complete description of the certificate verification process is contained in
|
---|
45 | the L<openssl-verification-options(1)> manual page.
|
---|
46 |
|
---|
47 | Applications rarely call this function directly but it is used by
|
---|
48 | OpenSSL internally for certificate validation, in both the S/MIME and
|
---|
49 | SSL/TLS code.
|
---|
50 |
|
---|
51 | A negative return value from X509_verify_cert() can occur if it is invoked
|
---|
52 | incorrectly, such as with no certificate set in I<ctx>, or when it is called
|
---|
53 | twice in succession without reinitialising I<ctx> for the second call.
|
---|
54 | A negative return value can also happen due to internal resource problems
|
---|
55 | or because an internal inconsistency has been detected.
|
---|
56 | Applications must interpret any return value <= 0 as an error.
|
---|
57 |
|
---|
58 | The X509_STORE_CTX_verify() behaves like X509_verify_cert() except that its
|
---|
59 | target certificate is the first element of the list of untrusted certificates
|
---|
60 | in I<ctx> unless a target certificate is set explicitly.
|
---|
61 |
|
---|
62 | =head1 RETURN VALUES
|
---|
63 |
|
---|
64 | X509_build_chain() returns NULL on error, else a stack of certificates.
|
---|
65 |
|
---|
66 | Both X509_verify_cert() and X509_STORE_CTX_verify()
|
---|
67 | return 1 if a complete chain can be built and validated,
|
---|
68 | otherwise they return 0, and in exceptional circumstances (such as malloc
|
---|
69 | failure and internal errors) they can also return a negative code.
|
---|
70 |
|
---|
71 | If a complete chain can be built and validated both functions return 1.
|
---|
72 | If the certificate must be rejected on the basis of the data available
|
---|
73 | or any required certificate status data is not available they return 0.
|
---|
74 | If no definite answer possible they usually return a negative code.
|
---|
75 |
|
---|
76 | On error or failure additional error information can be obtained by
|
---|
77 | examining I<ctx> using, for example, L<X509_STORE_CTX_get_error(3)>. Even if
|
---|
78 | verification indicated success, the stored error code may be different from
|
---|
79 | X509_V_OK, likely because a verification callback function has waived the error.
|
---|
80 |
|
---|
81 | =head1 SEE ALSO
|
---|
82 |
|
---|
83 | L<X509_STORE_CTX_new(3)>, L<X509_STORE_CTX_init(3)>,
|
---|
84 | L<X509_STORE_CTX_get_error(3)>
|
---|
85 |
|
---|
86 | =head1 HISTORY
|
---|
87 |
|
---|
88 | X509_build_chain() and X509_STORE_CTX_verify() were added in OpenSSL 3.0.
|
---|
89 |
|
---|
90 | =head1 COPYRIGHT
|
---|
91 |
|
---|
92 | Copyright 2009-2022 The OpenSSL Project Authors. All Rights Reserved.
|
---|
93 |
|
---|
94 | Licensed under the Apache License 2.0 (the "License"). You may not use
|
---|
95 | this file except in compliance with the License. You can obtain a copy
|
---|
96 | in the file LICENSE in the source distribution or at
|
---|
97 | L<https://www.openssl.org/source/license.html>.
|
---|
98 |
|
---|
99 | =cut
|
---|