]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man3/X509_STORE_CTX_new.pod
RFC7250 (RPK) support
[thirdparty/openssl.git] / doc / man3 / X509_STORE_CTX_new.pod
CommitLineData
db576632
DSH
1=pod
2
3=head1 NAME
4
d8652be0 5X509_STORE_CTX_new_ex, X509_STORE_CTX_new, X509_STORE_CTX_cleanup,
3c95ef22
TS
6X509_STORE_CTX_free, X509_STORE_CTX_init,
7X509_STORE_CTX_init_rpk,
8X509_STORE_CTX_set0_trusted_stack,
cc45a884 9X509_STORE_CTX_set_cert, X509_STORE_CTX_set0_crls,
3c95ef22 10X509_STORE_CTX_set0_rpk,
f0e0fd51 11X509_STORE_CTX_get0_param, X509_STORE_CTX_set0_param,
4dba585f 12X509_STORE_CTX_get0_untrusted, X509_STORE_CTX_set0_untrusted,
f0e0fd51 13X509_STORE_CTX_get_num_untrusted,
f9ac6f69 14X509_STORE_CTX_get0_chain, X509_STORE_CTX_set0_verified_chain,
3c95ef22 15X509_STORE_CTX_get0_rpk,
f0e0fd51 16X509_STORE_CTX_set_default,
121677b4 17X509_STORE_CTX_set_verify,
7b75b973
MC
18X509_STORE_CTX_verify_fn,
19X509_STORE_CTX_set_purpose,
20X509_STORE_CTX_set_trust,
21X509_STORE_CTX_purpose_inherit
99d63d46 22- X509_STORE_CTX initialisation
db576632
DSH
23
24=head1 SYNOPSIS
25
26 #include <openssl/x509_vfy.h>
27
b4250010 28 X509_STORE_CTX *X509_STORE_CTX_new_ex(OSSL_LIB_CTX *libctx, const char *propq);
db576632
DSH
29 X509_STORE_CTX *X509_STORE_CTX_new(void);
30 void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx);
31 void X509_STORE_CTX_free(X509_STORE_CTX *ctx);
32
11ddbf84 33 int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *trust_store,
2576b9c3 34 X509 *target, STACK_OF(X509) *untrusted);
3c95ef22
TS
35 int X509_STORE_CTX_init_rpk(X509_STORE_CTX *ctx, X509_STORE *trust_store,
36 EVP_PKEY *rpk);
db576632 37
f0e0fd51 38 void X509_STORE_CTX_set0_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
db576632 39
2576b9c3 40 void X509_STORE_CTX_set_cert(X509_STORE_CTX *ctx, X509 *target);
f0e0fd51 41 void X509_STORE_CTX_set0_crls(X509_STORE_CTX *ctx, STACK_OF(X509_CRL) *sk);
3c95ef22 42 void X509_STORE_CTX_set0_rpk(X509_STORE_CTX *ctx, EVP_PKEY *target);
db576632 43
8cc86b81 44 X509_VERIFY_PARAM *X509_STORE_CTX_get0_param(const X509_STORE_CTX *ctx);
db576632 45 void X509_STORE_CTX_set0_param(X509_STORE_CTX *ctx, X509_VERIFY_PARAM *param);
db576632 46
8cc86b81 47 STACK_OF(X509)* X509_STORE_CTX_get0_untrusted(const X509_STORE_CTX *ctx);
4dba585f 48 void X509_STORE_CTX_set0_untrusted(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
f0e0fd51 49
8cc86b81 50 int X509_STORE_CTX_get_num_untrusted(const X509_STORE_CTX *ctx);
f9ac6f69
DDO
51 STACK_OF(X509) *X509_STORE_CTX_get0_chain(const X509_STORE_CTX *ctx);
52 void X509_STORE_CTX_set0_verified_chain(X509_STORE_CTX *ctx, STACK_OF(X509) *chain);
3c95ef22 53 EVP_PKEY *X509_STORE_CTX_get0_rpk(const X509_STORE_CTX *ctx);
7f3f41d8 54
f9ac6f69 55 int X509_STORE_CTX_set_default(X509_STORE_CTX *ctx, const char *name);
4a7b3a7b 56 typedef int (*X509_STORE_CTX_verify_fn)(X509_STORE_CTX *);
4a7b3a7b 57 void X509_STORE_CTX_set_verify(X509_STORE_CTX *ctx, X509_STORE_CTX_verify_fn verify);
f0e0fd51 58
7b75b973
MC
59 int X509_STORE_CTX_set_purpose(X509_STORE_CTX *ctx, int purpose);
60 int X509_STORE_CTX_set_trust(X509_STORE_CTX *ctx, int trust);
61 int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose,
62 int purpose, int trust);
63
db576632
DSH
64=head1 DESCRIPTION
65
66These functions initialise an B<X509_STORE_CTX> structure for subsequent use
11ddbf84 67by L<X509_verify_cert(3)> or L<X509_STORE_CTX_verify(3)>.
db576632 68
d8652be0 69X509_STORE_CTX_new_ex() returns a newly initialised B<X509_STORE_CTX>
cc45a884
MC
70structure associated with the specified library context I<libctx> and property
71query string I<propq>. Any cryptographic algorithms fetched while performing
72processing with the X509_STORE_CTX will use that library context and property
73query string.
74
d8652be0 75X509_STORE_CTX_new() is the same as X509_STORE_CTX_new_ex() except that
cc45a884 76the default library context and a NULL property query string are used.
db576632
DSH
77
78X509_STORE_CTX_cleanup() internally cleans up an B<X509_STORE_CTX> structure.
c926a5ec 79It is used by X509_STORE_CTX_init() and X509_STORE_CTX_free().
db576632 80
cc45a884 81X509_STORE_CTX_free() completely frees up I<ctx>. After this call I<ctx>
db576632 82is no longer valid.
cc45a884 83If I<ctx> is NULL nothing is done.
db576632 84
c34e7876 85X509_STORE_CTX_init() sets up I<ctx> for a subsequent verification operation.
c926a5ec
DDO
86It must be called before each call to L<X509_verify_cert(3)> or
87L<X509_STORE_CTX_verify(3)>, i.e., a context is only good for one verification.
88If you want to verify a further certificate or chain with the same I<ctx>
89then you must call X509_STORE_CTX_init() again.
11ddbf84
DDO
90The trusted certificate store is set to I<trust_store> of type B<X509_STORE>.
91This may be NULL because there are no trusted certificates or because
92they are provided simply as a list using X509_STORE_CTX_set0_trusted_stack().
c926a5ec 93The certificate to be verified is set to I<target>,
2576b9c3 94and a list of additional certificates may be provided in I<untrusted>,
c926a5ec 95which will be untrusted but may be used to build the chain.
3c95ef22
TS
96The I<target> certificate is not copied (its reference count is not updated),
97and the caller must not free it before verification is complete.
2576b9c3 98Each of the I<trust_store>, I<target> and I<untrusted> parameters can be NULL.
c926a5ec 99Yet note that L<X509_verify_cert(3)> and L<X509_STORE_CTX_verify(3)>
11ddbf84
DDO
100will need a verification target.
101This can also be set using X509_STORE_CTX_set_cert().
102For L<X509_STORE_CTX_verify(3)>, which takes by default the first element of the
103list of untrusted certificates as its verification target,
104this can be also set indirectly using X509_STORE_CTX_set0_untrusted().
db576632 105
3c95ef22
TS
106X509_STORE_CTX_init_rpk() sets up I<ctx> for a subsequent verification
107operation for the I<target> raw public key.
108It behaves similarly to X509_STORE_CTX_init().
109The I<target> raw public key can aslo be supplied separately, via
110X509_STORE_CTX_set0_rpk().
111The I<target> public key is not copied (its reference count is not updated),
112and the caller must not free it before verification is complete.
113
f0e0fd51 114X509_STORE_CTX_set0_trusted_stack() sets the set of trusted certificates of
cc45a884 115I<ctx> to I<sk>. This is an alternative way of specifying trusted certificates
f9ac6f69
DDO
116instead of using an B<X509_STORE> where its complexity is not needed
117or to make sure that only the given set I<sk> of certificates are trusted.
db576632 118
11ddbf84 119X509_STORE_CTX_set_cert() sets the target certificate to be verified in I<ctx>
2576b9c3 120to I<target>.
3c95ef22
TS
121The target certificate is not copied (its reference count is not updated),
122and the caller must not free it before verification is complete.
123
124X509_STORE_CTX_set0_rpk() sets the target raw public key to be verified in I<ctx>
125to I<target>, a non-NULL raw public key preempts any target certificate, which
126is then ignored.
127The I<target> public key is not copied (its reference count is not updated),
128and the caller must not free it before verification is complete.
db576632 129
f9ac6f69
DDO
130X509_STORE_CTX_set0_verified_chain() sets the validated chain to I<chain>.
131Ownership of the chain is transferred to I<ctx>,
132and so it should not be free'd by the caller.
133
8c1cbc72 134X509_STORE_CTX_get0_chain() returns the internal pointer used by the
f9ac6f69 135I<ctx> that contains the constructed (output) chain.
db576632 136
3c95ef22
TS
137X509_STORE_CTX_get0_rpk() returns the internal pointer used by the
138I<ctx> that contains the raw public key.
139
db576632 140X509_STORE_CTX_set0_crls() sets a set of CRLs to use to aid certificate
cc45a884 141verification to I<sk>. These CRLs will only be used if CRL verification is
db576632
DSH
142enabled in the associated B<X509_VERIFY_PARAM> structure. This might be
143used where additional "useful" CRLs are supplied as part of a protocol,
144for example in a PKCS#7 structure.
145
f0e0fd51 146X509_STORE_CTX_get0_param() retrieves an internal pointer
cc45a884 147to the verification parameters associated with I<ctx>.
db576632 148
f9ac6f69
DDO
149X509_STORE_CTX_set0_param() sets the internal verification parameter pointer
150to I<param>. After this call B<param> should not be used.
151
f0e0fd51 152X509_STORE_CTX_get0_untrusted() retrieves an internal pointer to the
cc45a884 153stack of untrusted certificates associated with I<ctx>.
f0e0fd51 154
11ddbf84 155X509_STORE_CTX_set0_untrusted() sets the internal pointer to the stack
cc45a884 156of untrusted certificates associated with I<ctx> to I<sk>.
11ddbf84
DDO
157X509_STORE_CTX_verify() will take the first element, if any,
158as its default target if the target certificate is not set explicitly.
4dba585f 159
f9ac6f69
DDO
160X509_STORE_CTX_get_num_untrusted() returns the number of untrusted certificates
161that were used in building the chain.
162This is can be used after calling L<X509_verify_cert(3)> and similar functions.
163With L<X509_STORE_CTX_verify(3)>, this does not count the first chain element.
164
165X509_STORE_CTX_get0_chain() returns the internal pointer used by the
166I<ctx> that contains the validated chain.
167
168Details of the chain building and checking process are described in
169L<openssl-verification-options(1)/Certification Path Building> and
170L<openssl-verification-options(1)/Certification Path Validation>.
171
172X509_STORE_CTX_set0_verified_chain() sets the validated chain used
173by I<ctx> to be I<chain>.
174Ownership of the chain is transferred to I<ctx>,
175and so it should not be free'd by the caller.
db576632
DSH
176
177X509_STORE_CTX_set_default() looks up and sets the default verification
cc45a884 178method to I<name>. This uses the function X509_VERIFY_PARAM_lookup() to
4acda863
DDO
179find an appropriate set of parameters from the purpose identifier I<name>.
180Currently defined purposes are C<sslclient>, C<sslserver>, C<nssslserver>,
181C<smimesign>, C<smimeencrypt>, C<crlsign>, C<ocsphelper>, C<timestampsign>,
182and C<any>.
db576632 183
7cafbb4b
MC
184X509_STORE_CTX_set_verify() provides the capability for overriding the default
185verify function. This function is responsible for verifying chain signatures and
99d63d46 186expiration times.
7cafbb4b
MC
187
188A verify function is defined as an X509_STORE_CTX_verify type which has the
189following signature:
190
1bc74519 191 int (*verify)(X509_STORE_CTX *);
7cafbb4b
MC
192
193This function should receive the current X509_STORE_CTX as a parameter and
194return 1 on success or 0 on failure.
195
7b75b973
MC
196X509 certificates may contain information about what purposes keys contained
197within them can be used for. For example "TLS WWW Server Authentication" or
198"Email Protection". This "key usage" information is held internally to the
199certificate itself. In addition the trust store containing trusted certificates
200can declare what purposes we trust different certificates for. This "trust"
201information is not held within the certificate itself but is "meta" information
202held alongside it. This "meta" information is associated with the certificate
203after it is issued and could be determined by a system administrator. For
204example a certificate might declare that it is suitable for use for both
205"TLS WWW Server Authentication" and "TLS Client Authentication", but a system
206administrator might only trust it for the former. An X.509 certificate extension
207exists that can record extended key usage information to supplement the purpose
208information described above. This extended mechanism is arbitrarily extensible
209and not well suited for a generic library API; applications that need to
2d17290d 210validate extended key usage information in certificates will need to define a
7b75b973
MC
211custom "purpose" (see below) or supply a nondefault verification callback
212(L<X509_STORE_set_verify_cb_func(3)>).
213
214X509_STORE_CTX_set_purpose() sets the purpose for the target certificate being
215verified in the I<ctx>. Built-in available values for the I<purpose> argument
216are B<X509_PURPOSE_SSL_CLIENT>, B<X509_PURPOSE_SSL_SERVER>,
217B<X509_PURPOSE_NS_SSL_SERVER>, B<X509_PURPOSE_SMIME_SIGN>,
218B<X509_PURPOSE_SMIME_ENCRYPT>, B<X509_PURPOSE_CRL_SIGN>, B<X509_PURPOSE_ANY>,
178696d6
LJ
219B<X509_PURPOSE_OCSP_HELPER>, B<X509_PURPOSE_TIMESTAMP_SIGN> and
220B<X509_PURPOSE_CODE_SIGN>. It is also
3fa6dbd1
DDO
221possible to create a custom purpose value. Setting a purpose requests that
222the key usage and extended key usage (EKU) extensions optionally declared within
223the certificate and its chain are verified to be consistent with that purpose.
224For SSL client, SSL server, and S/MIME purposes, the EKU is checked also for the
225CA certificates along the chain, including any given trust anchor certificate.
226Potentially also further checks are done (depending on the purpose given).
227Every purpose also has an associated default trust value, which will also be set
228at the same time. During verification, this trust setting will be verified
229to check whether it is consistent with the trust set by the system administrator
230for certificates in the chain.
7b75b973
MC
231
232X509_STORE_CTX_set_trust() sets the trust value for the target certificate
233being verified in the I<ctx>. Built-in available values for the I<trust>
234argument are B<X509_TRUST_COMPAT>, B<X509_TRUST_SSL_CLIENT>,
235B<X509_TRUST_SSL_SERVER>, B<X509_TRUST_EMAIL>, B<X509_TRUST_OBJECT_SIGN>,
236B<X509_TRUST_OCSP_SIGN>, B<X509_TRUST_OCSP_REQUEST> and B<X509_TRUST_TSA>. It is
237also possible to create a custom trust value. Since X509_STORE_CTX_set_purpose()
238also sets the trust value it is normally sufficient to only call that function.
239If both are called then X509_STORE_CTX_set_trust() should be called after
240X509_STORE_CTX_set_purpose() since the trust setting of the last call will be
241used.
242
243It should not normally be necessary for end user applications to call
244X509_STORE_CTX_purpose_inherit() directly. Typically applications should call
245X509_STORE_CTX_set_purpose() or X509_STORE_CTX_set_trust() instead. Using this
246function it is possible to set the purpose and trust values for the I<ctx> at
c00fd2de
DDO
247the same time.
248Both I<ctx> and its internal verification parameter pointer must not be NULL.
249The I<def_purpose> and I<purpose> arguments can have the same
7b75b973
MC
250purpose values as described for X509_STORE_CTX_set_purpose() above. The I<trust>
251argument can have the same trust values as described in
252X509_STORE_CTX_set_trust() above. Any of the I<def_purpose>, I<purpose> or
253I<trust> values may also have the value 0 to indicate that the supplied
254parameter should be ignored. After calling this function the purpose to be used
c00fd2de
DDO
255for verification is set from the I<purpose> argument unless the purpose was
256already set in I<ctx> before, and the trust is set from the I<trust> argument
257unless the trust was already set in I<ctx> before.
258If I<trust> is 0 then the trust value will be set from
7b75b973
MC
259the default trust value for I<purpose>. If the default trust value for the
260purpose is I<X509_TRUST_DEFAULT> and I<trust> is 0 then the default trust value
261associated with the I<def_purpose> value is used for the trust setting instead.
262
db576632
DSH
263=head1 NOTES
264
265The certificates and CRLs in a store are used internally and should B<not>
f0e0fd51 266be freed up until after the associated B<X509_STORE_CTX> is freed.
db576632
DSH
267
268=head1 BUGS
269
270The certificates and CRLs in a context are used internally and should B<not>
271be freed up until after the associated B<X509_STORE_CTX> is freed. Copies
272should be made or reference counts increased instead.
273
274=head1 RETURN VALUES
275
c926a5ec 276X509_STORE_CTX_new() returns a newly allocated context or NULL if an
db576632
DSH
277error occurred.
278
3c95ef22
TS
279X509_STORE_CTX_init() and X509_STORE_CTX_init_rpk() return 1 for success
280or 0 if an error occurred.
db576632
DSH
281
282X509_STORE_CTX_get0_param() returns a pointer to an B<X509_VERIFY_PARAM>
c926a5ec 283structure or NULL if an error occurred.
db576632 284
3c95ef22
TS
285X509_STORE_CTX_get0_rpk() returns a pointer to an B<EVP_PKEY> structure if
286present, or NULL if absent.
287
f0e0fd51
RS
288X509_STORE_CTX_cleanup(), X509_STORE_CTX_free(),
289X509_STORE_CTX_set0_trusted_stack(),
290X509_STORE_CTX_set_cert(),
db576632
DSH
291X509_STORE_CTX_set0_crls() and X509_STORE_CTX_set0_param() do not return
292values.
293
294X509_STORE_CTX_set_default() returns 1 for success or 0 if an error occurred.
295
7f3f41d8
MC
296X509_STORE_CTX_get_num_untrusted() returns the number of untrusted certificates
297used.
298
db576632
DSH
299=head1 SEE ALSO
300
11ddbf84 301L<X509_verify_cert(3)>, L<X509_STORE_CTX_verify(3)>,
9b86974e 302L<X509_VERIFY_PARAM_set_flags(3)>
db576632
DSH
303
304=head1 HISTORY
305
fc5ecadd
DMSP
306The X509_STORE_CTX_set0_crls() function was added in OpenSSL 1.0.0.
307The X509_STORE_CTX_get_num_untrusted() function was added in OpenSSL 1.1.0.
d8652be0 308The X509_STORE_CTX_new_ex() function was added in OpenSSL 3.0.
3c95ef22
TS
309The X509_STORE_CTX_init_rpk(), X509_STORE_CTX_get0_rpk(), and
310X509_STORE_CTX_set0_rpk() functions were added in OpenSSL 3.2.
db576632 311
c926a5ec
DDO
312There is no need to call X509_STORE_CTX_cleanup() explicitly since OpenSSL 3.0.
313
e2f92610
RS
314=head1 COPYRIGHT
315
3c95ef22 316Copyright 2009-2023 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 317
4746f25a 318Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
319this file except in compliance with the License. You can obtain a copy
320in the file LICENSE in the source distribution or at
321L<https://www.openssl.org/source/license.html>.
322
323=cut