| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- .\" -*- mode: troff; coding: utf-8 -*-
- .\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
- .\"
- .\" Standard preamble:
- .\" ========================================================================
- .de Sp \" Vertical space (when we can't use .PP)
- .if t .sp .5v
- .if n .sp
- ..
- .de Vb \" Begin verbatim text
- .ft CW
- .nf
- .ne \\$1
- ..
- .de Ve \" End verbatim text
- .ft R
- .fi
- ..
- .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
- .ie n \{\
- . ds C` ""
- . ds C' ""
- 'br\}
- .el\{\
- . ds C`
- . ds C'
- 'br\}
- .\"
- .\" Escape single quotes in literal strings from groff's Unicode transform.
- .ie \n(.g .ds Aq \(aq
- .el .ds Aq '
- .\"
- .\" If the F register is >0, we'll generate index entries on stderr for
- .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
- .\" entries marked with X<> in POD. Of course, you'll have to process the
- .\" output yourself in some meaningful fashion.
- .\"
- .\" Avoid warning from groff about undefined register 'F'.
- .de IX
- ..
- .nr rF 0
- .if \n(.g .if rF .nr rF 1
- .if (\n(rF:(\n(.g==0)) \{\
- . if \nF \{\
- . de IX
- . tm Index:\\$1\t\\n%\t"\\$2"
- ..
- . if !\nF==2 \{\
- . nr % 0
- . nr F 2
- . \}
- . \}
- .\}
- .rr rF
- .\" ========================================================================
- .\"
- .IX Title "X509_STORE_CTX_NEW 3ossl"
- .TH X509_STORE_CTX_NEW 3ossl 2025-01-17 3.4.0 OpenSSL
- .\" For nroff, turn off justification. Always turn off hyphenation; it makes
- .\" way too many mistakes in technical documents.
- .if n .ad l
- .nh
- .SH NAME
- X509_STORE_CTX_new_ex, X509_STORE_CTX_new, X509_STORE_CTX_cleanup,
- X509_STORE_CTX_free, X509_STORE_CTX_init,
- X509_STORE_CTX_init_rpk,
- X509_STORE_CTX_set0_trusted_stack,
- X509_STORE_CTX_set_cert, X509_STORE_CTX_set0_crls,
- X509_STORE_CTX_set0_rpk,
- X509_STORE_CTX_get0_param, X509_STORE_CTX_set0_param,
- X509_STORE_CTX_get0_untrusted, X509_STORE_CTX_set0_untrusted,
- X509_STORE_CTX_get_num_untrusted,
- X509_STORE_CTX_get0_chain, X509_STORE_CTX_set0_verified_chain,
- X509_STORE_CTX_get0_rpk,
- X509_STORE_CTX_set_default,
- X509_STORE_CTX_set_verify,
- X509_STORE_CTX_verify_fn,
- X509_STORE_CTX_set_purpose,
- X509_STORE_CTX_set_trust,
- X509_STORE_CTX_purpose_inherit
- \&\- X509_STORE_CTX initialisation
- .SH SYNOPSIS
- .IX Header "SYNOPSIS"
- .Vb 1
- \& #include <openssl/x509_vfy.h>
- \&
- \& X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
- \& 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 *trust_store,
- \& X509 *target, STACK_OF(X509) *untrusted);
- \& int X509_STORE_CTX_init_rpk(X509_STORE_CTX *ctx, X509_STORE *trust_store,
- \& EVP_PKEY *rpk);
- \&
- \& void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
- \&
- \& void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target);
- \& void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk);
- \& void X509_STORE_CTX_set0_rpk(X509_STORE_CTX *ctx, EVP_PKEY *target);
- \&
- \& X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx);
- \& void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param);
- \&
- \& STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx);
- \& void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
- \&
- \& int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx);
- \& STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx);
- \& void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *ctx, STACK_OF(X509) *chain);
- \& EVP_PKEY *X509_STORE_CTX_get0_rpk(const X509_STORE_CTX *ctx);
- \&
- \& int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name);
- \& typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *);
- \& void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_fn verify);
- \&
- \& int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);
- \& int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust);
- \& int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose,
- \& int purpose, int trust);
- .Ve
- .SH DESCRIPTION
- .IX Header "DESCRIPTION"
- These functions initialise an \fBX509_STORE_CTX\fR structure for subsequent use
- by \fBX509_verify_cert\fR\|(3) or \fBX509_STORE_CTX_verify\fR\|(3).
- .PP
- \&\fBX509_STORE_CTX_new_ex()\fR returns a newly initialised \fBX509_STORE_CTX\fR
- structure associated with the specified library context \fIlibctx\fR and property
- query string \fIpropq\fR. Any cryptographic algorithms fetched while performing
- processing with the X509_STORE_CTX will use that library context and property
- query string.
- .PP
- \&\fBX509_STORE_CTX_new()\fR is the same as \fBX509_STORE_CTX_new_ex()\fR except that
- the default library context and a NULL property query string are used.
- .PP
- \&\fBX509_STORE_CTX_cleanup()\fR internally cleans up an \fBX509_STORE_CTX\fR structure.
- It is used by \fBX509_STORE_CTX_init()\fR and \fBX509_STORE_CTX_free()\fR.
- .PP
- \&\fBX509_STORE_CTX_free()\fR completely frees up \fIctx\fR. After this call \fIctx\fR
- is no longer valid.
- If \fIctx\fR is NULL nothing is done.
- .PP
- \&\fBX509_STORE_CTX_init()\fR sets up \fIctx\fR for a subsequent verification operation.
- .PP
- \&\fBX509_STORE_CTX_init()\fR initializes the internal state and resources of the
- X509_STORE_CTX, and must be called before each call to \fBX509_verify_cert\fR\|(3) or
- \&\fBX509_STORE_CTX_verify\fR\|(3), i.e., a context is only good for one verification.
- If you want to verify a further certificate or chain with the same \fIctx\fR
- then you must call \fBX509_STORE_CTX_init()\fR again.
- The trusted certificate store is set to \fItrust_store\fR of type \fBX509_STORE\fR.
- This may be NULL because there are no trusted certificates or because
- they are provided simply as a list using \fBX509_STORE_CTX_set0_trusted_stack()\fR.
- The certificate to be verified is set to \fItarget\fR,
- and a list of additional certificates may be provided in \fIuntrusted\fR,
- which will be untrusted but may be used to build the chain.
- The \fItarget\fR certificate is not copied (its reference count is not updated),
- and the caller must not free it before verification is complete.
- Each of the \fItrust_store\fR, \fItarget\fR and \fIuntrusted\fR parameters can be NULL.
- Yet note that \fBX509_verify_cert\fR\|(3) and \fBX509_STORE_CTX_verify\fR\|(3)
- will need a verification target.
- This can also be set using \fBX509_STORE_CTX_set_cert()\fR.
- For \fBX509_STORE_CTX_verify\fR\|(3), which takes by default the first element of the
- list of untrusted certificates as its verification target,
- this can be also set indirectly using \fBX509_STORE_CTX_set0_untrusted()\fR.
- .PP
- \&\fBX509_STORE_CTX_init_rpk()\fR sets up \fIctx\fR for a subsequent verification
- operation for the \fItarget\fR raw public key.
- It behaves similarly to \fBX509_STORE_CTX_init()\fR.
- The \fItarget\fR raw public key can also be supplied separately, via
- \&\fBX509_STORE_CTX_set0_rpk()\fR.
- The \fItarget\fR public key is not copied (its reference count is not updated),
- and the caller must not free it before verification is complete.
- .PP
- \&\fBX509_STORE_CTX_set0_trusted_stack()\fR sets the set of trusted certificates of
- \&\fIctx\fR to \fIsk\fR. This is an alternative way of specifying trusted certificates
- instead of using an \fBX509_STORE\fR where its complexity is not needed
- or to make sure that only the given set \fIsk\fR of certificates are trusted.
- .PP
- \&\fBX509_STORE_CTX_set_cert()\fR sets the target certificate to be verified in \fIctx\fR
- to \fItarget\fR.
- The target certificate is not copied (its reference count is not updated),
- and the caller must not free it before verification is complete.
- .PP
- \&\fBX509_STORE_CTX_set0_rpk()\fR sets the target raw public key to be verified in \fIctx\fR
- to \fItarget\fR, a non-NULL raw public key preempts any target certificate, which
- is then ignored.
- The \fItarget\fR public key is not copied (its reference count is not updated),
- and the caller must not free it before verification is complete.
- .PP
- \&\fBX509_STORE_CTX_set0_verified_chain()\fR sets the validated chain to \fIchain\fR.
- Ownership of the chain is transferred to \fIctx\fR,
- and so it should not be free'd by the caller.
- .PP
- \&\fBX509_STORE_CTX_get0_chain()\fR returns the internal pointer used by the
- \&\fIctx\fR that contains the constructed (output) chain.
- .PP
- \&\fBX509_STORE_CTX_get0_rpk()\fR returns the internal pointer used by the
- \&\fIctx\fR that contains the raw public key.
- .PP
- \&\fBX509_STORE_CTX_set0_crls()\fR sets a set of CRLs to use to aid certificate
- verification to \fIsk\fR. These CRLs will only be used if CRL verification is
- enabled in the associated \fBX509_VERIFY_PARAM\fR structure. This might be
- used where additional "useful" CRLs are supplied as part of a protocol,
- for example in a PKCS#7 structure.
- .PP
- \&\fBX509_STORE_CTX_get0_param()\fR retrieves an internal pointer
- to the verification parameters associated with \fIctx\fR.
- .PP
- \&\fBX509_STORE_CTX_set0_param()\fR sets the internal verification parameter pointer
- to \fIparam\fR. After this call \fBparam\fR should not be used.
- .PP
- \&\fBX509_STORE_CTX_get0_untrusted()\fR retrieves an internal pointer to the
- stack of untrusted certificates associated with \fIctx\fR.
- .PP
- \&\fBX509_STORE_CTX_set0_untrusted()\fR sets the internal pointer to the stack
- of untrusted certificates associated with \fIctx\fR to \fIsk\fR.
- \&\fBX509_STORE_CTX_verify()\fR will take the first element, if any,
- as its default target if the target certificate is not set explicitly.
- .PP
- \&\fBX509_STORE_CTX_get_num_untrusted()\fR returns the number of untrusted certificates
- that were used in building the chain.
- This is can be used after calling \fBX509_verify_cert\fR\|(3) and similar functions.
- With \fBX509_STORE_CTX_verify\fR\|(3), this does not count the first chain element.
- .PP
- \&\fBX509_STORE_CTX_get0_chain()\fR returns the internal pointer used by the
- \&\fIctx\fR that contains the validated chain.
- .PP
- Details of the chain building and checking process are described in
- "Certification Path Building" in \fBopenssl\-verification\-options\fR\|(1) and
- "Certification Path Validation" in \fBopenssl\-verification\-options\fR\|(1).
- .PP
- \&\fBX509_STORE_CTX_set0_verified_chain()\fR sets the validated chain used
- by \fIctx\fR to be \fIchain\fR.
- Ownership of the chain is transferred to \fIctx\fR,
- and so it should not be free'd by the caller.
- .PP
- \&\fBX509_STORE_CTX_set_default()\fR looks up and sets the default verification
- method to \fIname\fR. This uses the function \fBX509_VERIFY_PARAM_lookup()\fR to
- find an appropriate set of parameters from the purpose identifier \fIname\fR.
- Currently defined purposes are \f(CW\*(C`sslclient\*(C'\fR, \f(CW\*(C`sslserver\*(C'\fR, \f(CW\*(C`nssslserver\*(C'\fR,
- \&\f(CW\*(C`smimesign\*(C'\fR, \f(CW\*(C`smimeencrypt\*(C'\fR, \f(CW\*(C`crlsign\*(C'\fR, \f(CW\*(C`ocsphelper\*(C'\fR, \f(CW\*(C`timestampsign\*(C'\fR,
- and \f(CW\*(C`any\*(C'\fR.
- .PP
- \&\fBX509_STORE_CTX_set_verify()\fR provides the capability for overriding the default
- verify function. This function is responsible for verifying chain signatures and
- expiration times.
- .PP
- A verify function is defined as an X509_STORE_CTX_verify type which has the
- following signature:
- .PP
- .Vb 1
- \& int (*verify)(X509_STORE_CTX *);
- .Ve
- .PP
- This function should receive the current X509_STORE_CTX as a parameter and
- return 1 on success or 0 on failure.
- .PP
- X509 certificates may contain information about what purposes keys contained
- within them can be used for. For example "TLS WWW Server Authentication" or
- "Email Protection". This "key usage" information is held internally to the
- certificate itself. In addition the trust store containing trusted certificates
- can declare what purposes we trust different certificates for. This "trust"
- information is not held within the certificate itself but is "meta" information
- held alongside it. This "meta" information is associated with the certificate
- after it is issued and could be determined by a system administrator. For
- example a certificate might declare that it is suitable for use for both
- "TLS WWW Server Authentication" and "TLS Client Authentication", but a system
- administrator might only trust it for the former. An X.509 certificate extension
- exists that can record extended key usage information to supplement the purpose
- information described above. This extended mechanism is arbitrarily extensible
- and not well suited for a generic library API; applications that need to
- validate extended key usage information in certificates will need to define a
- custom "purpose" (see below) or supply a nondefault verification callback
- (\fBX509_STORE_set_verify_cb_func\fR\|(3)).
- .PP
- \&\fBX509_STORE_CTX_set_purpose()\fR sets the purpose for the target certificate being
- verified in the \fIctx\fR. Built-in available values for the \fIpurpose\fR argument
- are \fBX509_PURPOSE_SSL_CLIENT\fR, \fBX509_PURPOSE_SSL_SERVER\fR,
- \&\fBX509_PURPOSE_NS_SSL_SERVER\fR, \fBX509_PURPOSE_SMIME_SIGN\fR,
- \&\fBX509_PURPOSE_SMIME_ENCRYPT\fR, \fBX509_PURPOSE_CRL_SIGN\fR, \fBX509_PURPOSE_ANY\fR,
- \&\fBX509_PURPOSE_OCSP_HELPER\fR, \fBX509_PURPOSE_TIMESTAMP_SIGN\fR and
- \&\fBX509_PURPOSE_CODE_SIGN\fR. It is also
- possible to create a custom purpose value. Setting a purpose requests that
- the key usage and extended key usage (EKU) extensions optionally declared within
- the certificate and its chain are verified to be consistent with that purpose.
- For SSL client, SSL server, and S/MIME purposes, the EKU is checked also for the
- CA certificates along the chain, including any given trust anchor certificate.
- Potentially also further checks are done (depending on the purpose given).
- Every purpose also has an associated default trust value, which will also be set
- at the same time. During verification, this trust setting will be verified
- to check whether it is consistent with the trust set by the system administrator
- for certificates in the chain.
- .PP
- \&\fBX509_STORE_CTX_set_trust()\fR sets the trust value for the target certificate
- being verified in the \fIctx\fR. Built-in available values for the \fItrust\fR
- argument are \fBX509_TRUST_COMPAT\fR, \fBX509_TRUST_SSL_CLIENT\fR,
- \&\fBX509_TRUST_SSL_SERVER\fR, \fBX509_TRUST_EMAIL\fR, \fBX509_TRUST_OBJECT_SIGN\fR,
- \&\fBX509_TRUST_OCSP_SIGN\fR, \fBX509_TRUST_OCSP_REQUEST\fR and \fBX509_TRUST_TSA\fR. It is
- also possible to create a custom trust value. Since \fBX509_STORE_CTX_set_purpose()\fR
- also sets the trust value it is normally sufficient to only call that function.
- If both are called then \fBX509_STORE_CTX_set_trust()\fR should be called after
- \&\fBX509_STORE_CTX_set_purpose()\fR since the trust setting of the last call will be
- used.
- .PP
- It should not normally be necessary for end user applications to call
- \&\fBX509_STORE_CTX_purpose_inherit()\fR directly. Typically applications should call
- \&\fBX509_STORE_CTX_set_purpose()\fR or \fBX509_STORE_CTX_set_trust()\fR instead. Using this
- function it is possible to set the purpose and trust values for the \fIctx\fR at
- the same time.
- Both \fIctx\fR and its internal verification parameter pointer must not be NULL.
- The \fIdef_purpose\fR and \fIpurpose\fR arguments can have the same
- purpose values as described for \fBX509_STORE_CTX_set_purpose()\fR above. The \fItrust\fR
- argument can have the same trust values as described in
- \&\fBX509_STORE_CTX_set_trust()\fR above. Any of the \fIdef_purpose\fR, \fIpurpose\fR or
- \&\fItrust\fR values may also have the value 0 to indicate that the supplied
- parameter should be ignored. After calling this function the purpose to be used
- for verification is set from the \fIpurpose\fR argument unless the purpose was
- already set in \fIctx\fR before, and the trust is set from the \fItrust\fR argument
- unless the trust was already set in \fIctx\fR before.
- If \fItrust\fR is 0 then the trust value will be set from
- the default trust value for \fIpurpose\fR. If the default trust value for the
- purpose is \fIX509_TRUST_DEFAULT\fR and \fItrust\fR is 0 then the default trust value
- associated with the \fIdef_purpose\fR value is used for the trust setting instead.
- .SH NOTES
- .IX Header "NOTES"
- The certificates and CRLs in a store are used internally and should \fBnot\fR
- be freed up until after the associated \fBX509_STORE_CTX\fR is freed.
- .SH BUGS
- .IX Header "BUGS"
- The certificates and CRLs in a context are used internally and should \fBnot\fR
- be freed up until after the associated \fBX509_STORE_CTX\fR is freed. Copies
- should be made or reference counts increased instead.
- .SH "RETURN VALUES"
- .IX Header "RETURN VALUES"
- \&\fBX509_STORE_CTX_new()\fR returns a newly allocated context or NULL if an
- error occurred.
- .PP
- \&\fBX509_STORE_CTX_init()\fR and \fBX509_STORE_CTX_init_rpk()\fR return 1 for success
- or 0 if an error occurred.
- .PP
- \&\fBX509_STORE_CTX_get0_param()\fR returns a pointer to an \fBX509_VERIFY_PARAM\fR
- structure or NULL if an error occurred.
- .PP
- \&\fBX509_STORE_CTX_get0_rpk()\fR returns a pointer to an \fBEVP_PKEY\fR structure if
- present, or NULL if absent.
- .PP
- \&\fBX509_STORE_CTX_cleanup()\fR, \fBX509_STORE_CTX_free()\fR,
- \&\fBX509_STORE_CTX_set0_trusted_stack()\fR,
- \&\fBX509_STORE_CTX_set_cert()\fR,
- \&\fBX509_STORE_CTX_set0_crls()\fR and \fBX509_STORE_CTX_set0_param()\fR do not return
- values.
- .PP
- \&\fBX509_STORE_CTX_set_default()\fR returns 1 for success or 0 if an error occurred.
- .PP
- \&\fBX509_STORE_CTX_get_num_untrusted()\fR returns the number of untrusted certificates
- used.
- .SH "SEE ALSO"
- .IX Header "SEE ALSO"
- \&\fBX509_verify_cert\fR\|(3), \fBX509_STORE_CTX_verify\fR\|(3),
- \&\fBX509_VERIFY_PARAM_set_flags\fR\|(3)
- .SH HISTORY
- .IX Header "HISTORY"
- The \fBX509_STORE_CTX_set0_crls()\fR function was added in OpenSSL 1.0.0.
- The \fBX509_STORE_CTX_get_num_untrusted()\fR function was added in OpenSSL 1.1.0.
- The \fBX509_STORE_CTX_new_ex()\fR function was added in OpenSSL 3.0.
- The \fBX509_STORE_CTX_init_rpk()\fR, \fBX509_STORE_CTX_get0_rpk()\fR, and
- \&\fBX509_STORE_CTX_set0_rpk()\fR functions were added in OpenSSL 3.2.
- .PP
- There is no need to call \fBX509_STORE_CTX_cleanup()\fR explicitly since OpenSSL 3.0.
- .SH COPYRIGHT
- .IX Header "COPYRIGHT"
- Copyright 2009\-2024 The OpenSSL Project Authors. All Rights Reserved.
- .PP
- 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
- <https://www.openssl.org/source/license.html>.
|