xref: /openbsd-src/lib/libcrypto/man/X509_STORE_CTX_set_verify.3 (revision 3b7446ee9a32814042b912df65432eceda9f87ab)
1*3b7446eeStb.\" $OpenBSD: X509_STORE_CTX_set_verify.3,v 1.8 2024/06/07 05:51:39 tb Exp $
2491f2bffSschwarze.\"
3e38e0490Sschwarze.\" Copyright (c) 2021, 2022 Ingo Schwarze <schwarze@openbsd.org>
42c347fa6Sschwarze.\" Copyright (c) 2023 Job Snijders <job@openbsd.org>
5491f2bffSschwarze.\"
6491f2bffSschwarze.\" Permission to use, copy, modify, and distribute this software for any
7491f2bffSschwarze.\" purpose with or without fee is hereby granted, provided that the above
8491f2bffSschwarze.\" copyright notice and this permission notice appear in all copies.
9491f2bffSschwarze.\"
10491f2bffSschwarze.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11491f2bffSschwarze.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12491f2bffSschwarze.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13491f2bffSschwarze.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14491f2bffSschwarze.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15491f2bffSschwarze.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16491f2bffSschwarze.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17491f2bffSschwarze.\"
18*3b7446eeStb.Dd $Mdocdate: June 7 2024 $
19491f2bffSschwarze.Dt X509_STORE_CTX_SET_VERIFY 3
20491f2bffSschwarze.Os
21491f2bffSschwarze.Sh NAME
22491f2bffSschwarze.Nm X509_STORE_CTX_verify_fn ,
23491f2bffSschwarze.Nm X509_STORE_CTX_set_verify ,
24491f2bffSschwarze.Nm X509_STORE_CTX_get_verify ,
25491f2bffSschwarze.Nm X509_STORE_set_verify ,
26e38e0490Sschwarze.Nm X509_STORE_set_verify_func ,
27efc80f80Sjob.Nm X509_STORE_get_verify ,
282c347fa6Sschwarze.Nm X509_STORE_CTX_check_issued_fn ,
29efc80f80Sjob.Nm X509_STORE_set_check_issued ,
30efc80f80Sjob.Nm X509_STORE_get_check_issued ,
31efc80f80Sjob.Nm X509_STORE_CTX_get_check_issued
32491f2bffSschwarze.Nd user-defined certificate chain verification function
33491f2bffSschwarze.Sh SYNOPSIS
34491f2bffSschwarze.In openssl/x509_vfy.h
35491f2bffSschwarze.Ft typedef int
3619a92ca5Sjsg.Fo (*X509_STORE_CTX_verify_fn)
37491f2bffSschwarze.Fa "X509_STORE_CTX *ctx"
38491f2bffSschwarze.Fc
39491f2bffSschwarze.Ft void
40491f2bffSschwarze.Fo X509_STORE_CTX_set_verify
41491f2bffSschwarze.Fa "X509_STORE_CTX *ctx"
42491f2bffSschwarze.Fa "X509_STORE_CTX_verify_fn verify"
43491f2bffSschwarze.Fc
44491f2bffSschwarze.Ft X509_STORE_CTX_verify_fn
45491f2bffSschwarze.Fo X509_STORE_CTX_get_verify
46491f2bffSschwarze.Fa "X509_STORE_CTX *ctx"
47491f2bffSschwarze.Fc
48491f2bffSschwarze.Ft void
49491f2bffSschwarze.Fo X509_STORE_set_verify
50491f2bffSschwarze.Fa "X509_STORE *store"
51491f2bffSschwarze.Fa "X509_STORE_CTX_verify_fn verify"
52491f2bffSschwarze.Fc
53491f2bffSschwarze.Ft void
54491f2bffSschwarze.Fo X509_STORE_set_verify_func
55491f2bffSschwarze.Fa "X509_STORE *store"
56491f2bffSschwarze.Fa "X509_STORE_CTX_verify_fn verify"
57491f2bffSschwarze.Fc
58e38e0490Sschwarze.Ft X509_STORE_CTX_verify_fn
59e38e0490Sschwarze.Fo X509_STORE_get_verify
60e38e0490Sschwarze.Fa "X509_STORE_CTX *ctx"
61e38e0490Sschwarze.Fc
62efc80f80Sjob.Ft typedef int
6319a92ca5Sjsg.Fo (*X509_STORE_CTX_check_issued_fn)
64efc80f80Sjob.Fa "X509_STORE_CTX *ctx"
65efc80f80Sjob.Fa "X509 *subject"
66efc80f80Sjob.Fa "X509 *issuer"
67efc80f80Sjob.Fc
68efc80f80Sjob.Ft void
69efc80f80Sjob.Fo X509_STORE_set_check_issued
70efc80f80Sjob.Fa "X509_STORE *store"
71efc80f80Sjob.Fa "X509_STORE_CTX_check_issued_fn check_issued"
72efc80f80Sjob.Fc
73efc80f80Sjob.Ft X509_STORE_CTX_check_issued_fn
74efc80f80Sjob.Fo X509_STORE_get_check_issued
75efc80f80Sjob.Fa "X509_STORE *store"
76efc80f80Sjob.Fc
77efc80f80Sjob.Ft X509_STORE_CTX_check_issued_fn
78efc80f80Sjob.Fo X509_STORE_CTX_get_check_issued
79efc80f80Sjob.Fa "X509_STORE_CTX *ctx"
80efc80f80Sjob.Fc
81491f2bffSschwarze.Sh DESCRIPTION
82491f2bffSschwarze.Fn X509_STORE_CTX_set_verify
83491f2bffSschwarzeconfigures
84491f2bffSschwarze.Fa ctx
85491f2bffSschwarzeto use the
86491f2bffSschwarze.Fa verify
87491f2bffSschwarzeargument as the X.509 certificate chain verification function instead
88491f2bffSschwarzeof the default verification function built into the library when
89491f2bffSschwarze.Xr X509_verify_cert 3
90491f2bffSschwarzeis called.
91491f2bffSschwarze.Pp
92491f2bffSschwarzeThe
93491f2bffSschwarze.Fa verify
94491f2bffSschwarzefunction provided by the user is only called if the
95491f2bffSschwarze.Dv X509_V_FLAG_LEGACY_VERIFY
96491f2bffSschwarzeor
97491f2bffSschwarze.Dv X509_V_FLAG_NO_ALT_CHAINS
98491f2bffSschwarzeflag was set on
99491f2bffSschwarze.Fa ctx
100491f2bffSschwarzeusing
101491f2bffSschwarze.Xr X509_STORE_CTX_set_flags 3
102491f2bffSschwarzeor
103491f2bffSschwarze.Xr X509_VERIFY_PARAM_set_flags 3 .
104491f2bffSschwarzeOtherwise, it is ignored and a different algorithm is used that does
105491f2bffSschwarzenot support replacing the verification function.
106491f2bffSschwarze.Pp
107491f2bffSschwarze.Fn X509_STORE_set_verify
108491f2bffSschwarzesaves the function pointer
109491f2bffSschwarze.Fa verify
110491f2bffSschwarzein the given
111491f2bffSschwarze.Fa store
112491f2bffSschwarzeobject.
113491f2bffSschwarzeThat pointer will be copied to an
114491f2bffSschwarze.Vt X509_STORE_CTX
115491f2bffSschwarzeobject when
116491f2bffSschwarze.Fa store
117491f2bffSschwarzeis later passed as an argument to
118491f2bffSschwarze.Xr X509_STORE_CTX_init 3 .
119491f2bffSschwarze.Pp
120491f2bffSschwarze.Fn X509_STORE_set_verify_func
121491f2bffSschwarzeis an alias for
122491f2bffSschwarze.Fn X509_STORE_set_verify
123491f2bffSschwarzeimplemented as a macro.
124efc80f80Sjob.Pp
125efc80f80Sjob.Fn X509_STORE_set_check_issued
126efc80f80Sjobsaves the function pointer
127efc80f80Sjob.Fa check_issued
128efc80f80Sjobin the given
129efc80f80Sjob.Fa store
130efc80f80Sjobobject.
131efc80f80SjobThat pointer will be copied to an
132efc80f80Sjob.Vt X509_STORE_CTX
133efc80f80Sjobobject when
134efc80f80Sjob.Fa store
135efc80f80Sjobis later passed as an argument to
136efc80f80Sjob.Fn X509_STORE_CTX_init 3 .
137efc80f80Sjob.Pp
138efc80f80SjobThe
139efc80f80Sjob.Fa check_issued
140efc80f80Sjobfunction provided by the user should check whether a given certificate
141efc80f80Sjob.Fa subject
142efc80f80Sjobwas issued using the CA certificate
143efc80f80Sjob.Fa issuer ,
144efc80f80Sjoband must return 0 on failure and 1 on success.
145*3b7446eeStbThe default implementation ignores the
146*3b7446eeStb.Fa ctx
147*3b7446eeStbargument and returns success if and only if
148*3b7446eeStb.Xr X509_check_issued 3
149*3b7446eeStbreturns
150*3b7446eeStb.Dv X509_V_OK .
151*3b7446eeStbIt is important to pay close attention to the order of the
152*3b7446eeStb.Fa issuer
153*3b7446eeStband
154*3b7446eeStb.Fa subject
155*3b7446eeStbarguments.
156*3b7446eeStbIn
157*3b7446eeStb.Xr X509_check_issued 3
158*3b7446eeStbthe
159*3b7446eeStb.Fa issuer
160*3b7446eeStbprecedes the
161*3b7446eeStb.Fa subject
162*3b7446eeStbwhile in
163*3b7446eeStb.Fn check_issued
164*3b7446eeStbthe
165*3b7446eeStb.Fa subject
166*3b7446eeStbcomes first.
167491f2bffSschwarze.Sh RETURN VALUES
168491f2bffSschwarze.Fn X509_STORE_CTX_verify_fn
169491f2bffSschwarzeis supposed to return 1 to indicate that the chain is valid
170491f2bffSschwarzeor 0 if it is not or if an error occurred.
171491f2bffSschwarze.Pp
172491f2bffSschwarze.Fn X509_STORE_CTX_get_verify
173e38e0490Sschwarzereturns a function pointer previously set with
174491f2bffSschwarze.Fn X509_STORE_CTX_set_verify
175491f2bffSschwarzeor
176491f2bffSschwarze.Xr X509_STORE_CTX_init 3 ,
177491f2bffSschwarzeor
178491f2bffSschwarze.Dv NULL
179491f2bffSschwarzeif
180491f2bffSschwarze.Fa ctx
181491f2bffSschwarzeis uninitialized.
182e38e0490Sschwarze.Pp
183e38e0490Sschwarze.Fn X509_STORE_get_verify
184e38e0490Sschwarzereturns the function pointer previously set with
185e38e0490Sschwarze.Fn X509_STORE_set_verify ,
186e38e0490Sschwarzeor
187e38e0490Sschwarze.Dv NULL
188e38e0490Sschwarzeif that function was not called on the
189e38e0490Sschwarze.Fa store .
190efc80f80Sjob.Pp
191efc80f80Sjob.Fn X509_STORE_get_check_issued
192efc80f80Sjobreturns the function pointer previously set with
193efc80f80Sjob.Fn X509_STORE_set_check_issued ,
194efc80f80Sjobor
195efc80f80Sjob.Dv NULL
196efc80f80Sjobif that function was not called on the
197efc80f80Sjob.Fa store .
198efc80f80Sjob.Pp
199efc80f80Sjob.Fn X509_STORE_CTX_get_check_issued
200efc80f80Sjobreturns the
201efc80f80Sjob.Fn check_issued
2023d9f13a7Sjobfunction pointer set on the
203efc80f80Sjob.Vt X509_STORE_CTX .
204efc80f80SjobThis is either the
205efc80f80Sjob.Fn check_issued
206efc80f80Sjobfunction inherited from the
207efc80f80Sjob.Fa store
208efc80f80Sjobused in
209efc80f80Sjob.Xr X509_STORE_CTX_init 3
210efc80f80Sjobor the library's default implementation.
211491f2bffSschwarze.Sh SEE ALSO
21219a92ca5Sjsg.Xr X509_check_issued 3 ,
213491f2bffSschwarze.Xr X509_STORE_CTX_init 3 ,
214491f2bffSschwarze.Xr X509_STORE_CTX_set_error 3 ,
215491f2bffSschwarze.Xr X509_STORE_CTX_set_flags 3 ,
216491f2bffSschwarze.Xr X509_STORE_CTX_set_verify_cb 3 ,
217491f2bffSschwarze.Xr X509_STORE_new 3 ,
218491f2bffSschwarze.Xr X509_STORE_set_flags 3 ,
219491f2bffSschwarze.Xr X509_STORE_set_verify_cb 3 ,
220491f2bffSschwarze.Xr X509_verify_cert 3 ,
221491f2bffSschwarze.Xr X509_VERIFY_PARAM_set_flags 3
222491f2bffSschwarze.Sh HISTORY
223491f2bffSschwarze.Fn X509_STORE_set_verify_func
224491f2bffSschwarzefirst appeared in SSLeay 0.8.0 and has been available since
225491f2bffSschwarze.Ox 2.4 .
226491f2bffSschwarze.Pp
227491f2bffSschwarze.Fn X509_STORE_CTX_set_verify
228491f2bffSschwarzeand
229491f2bffSschwarze.Fn X509_STORE_CTX_get_verify
230491f2bffSschwarzefirst appeared in OpenSSL 1.1.0 and have been available since
231491f2bffSschwarze.Ox 7.1 .
232491f2bffSschwarze.Pp
233e38e0490Sschwarze.Fn X509_STORE_CTX_verify_fn ,
234e38e0490Sschwarze.Fn X509_STORE_set_verify ,
235491f2bffSschwarzeand
236e38e0490Sschwarze.Fn X509_STORE_get_verify
237491f2bffSschwarzefirst appeared in OpenSSL 1.1.0 and have been available since
238e38e0490Sschwarze.Ox 7.2 .
239efc80f80Sjob.Pp
240efc80f80Sjob.Fn X509_STORE_set_check_issued ,
241efc80f80Sjob.Fn X509_STORE_get_check_issued ,
242efc80f80Sjoband
243efc80f80Sjob.Fn X509_STORE_CTX_get_check_issued
244efc80f80Sjobfirst appeared in OpenSSL 1.1.0 and have been available since
245efc80f80Sjob.Ox 7.3 .
246*3b7446eeStb.Sh BUGS
247*3b7446eeStbThe reversal of order of
248*3b7446eeStb.Fa subject
249*3b7446eeStband
250*3b7446eeStb.Fa issuer
251*3b7446eeStbbetween
252*3b7446eeStb.Fn check_issued
253*3b7446eeStband
254*3b7446eeStb.Xr X509_check_issued 3
255*3b7446eeStbis very confusing.
256*3b7446eeStbIt has led to bugs and will cause many more.
257