xref: /openbsd-src/lib/libcrypto/man/X509_STORE_CTX_get_error.3 (revision fc405d53b73a2d73393cb97f684863d17b583e38)
1.\" $OpenBSD: X509_STORE_CTX_get_error.3,v 1.27 2023/04/30 14:49:47 tb Exp $
2.\" full merge up to:
3.\" OpenSSL man3/X509_STORE_CTX_get_error 24a535ea Sep 22 13:14:20 2020 +0100
4.\" OpenSSL man3/X509_STORE_CTX_new 24a535ea Sep 22 13:14:20 2020 +0100
5.\"
6.\" This file is a derived work.
7.\" The changes are covered by the following Copyright and license:
8.\"
9.\" Copyright (c) 2021 Ingo Schwarze <schwarze@openbsd.org>
10.\"
11.\" Permission to use, copy, modify, and distribute this software for any
12.\" purpose with or without fee is hereby granted, provided that the above
13.\" copyright notice and this permission notice appear in all copies.
14.\"
15.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
22.\"
23.\" The original file was written by Dr. Stephen Henson <steve@openssl.org>
24.\" and Rich Salz <rsalz@openssl.org>.
25.\" Copyright (c) 2009, 2016 The OpenSSL Project.  All rights reserved.
26.\"
27.\" Redistribution and use in source and binary forms, with or without
28.\" modification, are permitted provided that the following conditions
29.\" are met:
30.\"
31.\" 1. Redistributions of source code must retain the above copyright
32.\"    notice, this list of conditions and the following disclaimer.
33.\"
34.\" 2. Redistributions in binary form must reproduce the above copyright
35.\"    notice, this list of conditions and the following disclaimer in
36.\"    the documentation and/or other materials provided with the
37.\"    distribution.
38.\"
39.\" 3. All advertising materials mentioning features or use of this
40.\"    software must display the following acknowledgment:
41.\"    "This product includes software developed by the OpenSSL Project
42.\"    for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
43.\"
44.\" 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
45.\"    endorse or promote products derived from this software without
46.\"    prior written permission. For written permission, please contact
47.\"    openssl-core@openssl.org.
48.\"
49.\" 5. Products derived from this software may not be called "OpenSSL"
50.\"    nor may "OpenSSL" appear in their names without prior written
51.\"    permission of the OpenSSL Project.
52.\"
53.\" 6. Redistributions of any form whatsoever must retain the following
54.\"    acknowledgment:
55.\"    "This product includes software developed by the OpenSSL Project
56.\"    for use in the OpenSSL Toolkit (http://www.openssl.org/)"
57.\"
58.\" THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
59.\" EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
60.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
61.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
62.\" ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
63.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
64.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
65.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
66.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
67.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
68.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
69.\" OF THE POSSIBILITY OF SUCH DAMAGE.
70.\"
71.Dd $Mdocdate: April 30 2023 $
72.Dt X509_STORE_CTX_GET_ERROR 3
73.Os
74.Sh NAME
75.Nm X509_STORE_CTX_get_error ,
76.Nm X509_STORE_CTX_set_error ,
77.Nm X509_STORE_CTX_get_error_depth ,
78.Nm X509_STORE_CTX_set_error_depth ,
79.Nm X509_STORE_CTX_get_current_cert ,
80.Nm X509_STORE_CTX_set_current_cert ,
81.Nm X509_STORE_CTX_get0_current_issuer ,
82.Nm X509_STORE_CTX_get0_current_crl ,
83.Nm X509_STORE_CTX_get0_parent_ctx ,
84.Nm X509_STORE_CTX_get_num_untrusted ,
85.Nm X509_STORE_CTX_get0_chain ,
86.Nm X509_STORE_CTX_get_chain ,
87.Nm X509_STORE_CTX_get1_chain ,
88.Nm X509_STORE_CTX_set0_verified_chain ,
89.Nm X509_verify_cert_error_string
90.Nd get or set certificate verification status information
91.Sh SYNOPSIS
92.In openssl/x509_vfy.h
93.Ft int
94.Fo X509_STORE_CTX_get_error
95.Fa "X509_STORE_CTX *ctx"
96.Fc
97.Ft void
98.Fo X509_STORE_CTX_set_error
99.Fa "X509_STORE_CTX *ctx"
100.Fa "int s"
101.Fc
102.Ft int
103.Fo X509_STORE_CTX_get_error_depth
104.Fa "X509_STORE_CTX *ctx"
105.Fc
106.Ft void
107.Fo X509_STORE_CTX_set_error_depth
108.Fa "X509_STORE_CTX *ctx"
109.Fa "int depth"
110.Fc
111.Ft X509 *
112.Fo X509_STORE_CTX_get_current_cert
113.Fa "X509_STORE_CTX *ctx"
114.Fc
115.Ft void
116.Fo X509_STORE_CTX_set_current_cert
117.Fa "X509_STORE_CTX *ctx"
118.Fa "X509 *cert"
119.Fc
120.Ft X509 *
121.Fo X509_STORE_CTX_get0_current_issuer
122.Fa "X509_STORE_CTX *ctx"
123.Fc
124.Ft X509_CRL *
125.Fo X509_STORE_CTX_get0_current_crl
126.Fa "X509_STORE_CTX *ctx"
127.Fc
128.Ft X509_STORE_CTX *
129.Fo X509_STORE_CTX_get0_parent_ctx
130.Fa "X509_STORE_CTX *ctx"
131.Fc
132.Ft int
133.Fo X509_STORE_CTX_get_num_untrusted
134.Fa "X509_STORE_CTX *ctx"
135.Fc
136.Ft STACK_OF(X509) *
137.Fo X509_STORE_CTX_get0_chain
138.Fa "X509_STORE_CTX *ctx"
139.Fc
140.Ft STACK_OF(X509) *
141.Fo X509_STORE_CTX_get_chain
142.Fa "X509_STORE_CTX *ctx"
143.Fc
144.Ft STACK_OF(X509) *
145.Fo X509_STORE_CTX_get1_chain
146.Fa "X509_STORE_CTX *ctx"
147.Fc
148.Ft void
149.Fo X509_STORE_CTX_set0_verified_chain
150.Fa "X509_STORE_CTX *ctx"
151.Fa "STACK_OF(X509) *chain"
152.Fc
153.In openssl/x509.h
154.Ft const char *
155.Fo X509_verify_cert_error_string
156.Fa "long n"
157.Fc
158.Sh DESCRIPTION
159Most of these functions are typically called after
160.Xr X509_verify_cert 3
161to inspect status information related to certificate verification.
162Some may also be called in a verification callback to determine the
163nature of an error.
164.Pp
165.Fn X509_STORE_CTX_get_error
166returns the error code of
167.Fa ctx .
168See the
169.Sy ERROR CODES
170section for a full description of all error codes.
171.Pp
172.Fn X509_STORE_CTX_set_error
173sets the error code of
174.Fa ctx
175to
176.Fa s .
177For example it might be used in a verification callback to set an error
178based on additional checks.
179.Pp
180.Fn X509_STORE_CTX_get_error_depth
181returns the depth of the error.
182This is a non-negative integer representing where in the certificate
183chain the error occurred.
184If it is zero, it occurred in the end entity certificate, one if it is
185the certificate which signed the end entity certificate, and so on.
186.Pp
187.Fn X509_STORE_CTX_set_error_depth
188sets the error depth.
189This can be used in combination with
190.Fn X509_STORE_CTX_set_error
191to set the depth at which an error condition was detected.
192.Pp
193.Fn X509_STORE_CTX_get_current_cert
194returns the certificate in
195.Fa ctx
196which caused the error or
197.Dv NULL
198if no certificate is relevant.
199.Pp
200.Fn X509_STORE_CTX_set_current_cert
201sets the certificate which caused the error in
202.Fa ctx
203to the given
204.Fa cert .
205This value is not intended to remain valid for very long,
206and remains owned by the caller.
207It may be examined by a verification callback invoked to handle
208each error encountered during chain verification and is no longer
209required after such a callback.
210If a callback wishes the save the certificate for use after it returns,
211it needs to increment its reference count via
212.Xr X509_up_ref 3 .
213Once such a saved certificate is no longer needed, it can be freed with
214.Xr X509_free 3 .
215.Pp
216.Fn X509_STORE_CTX_get0_current_issuer
217returns the certificate that caused issuer validation to fail or
218.Dv NULL
219if no CA certificate is relevant.
220.Pp
221.Fn X509_STORE_CTX_get0_current_crl
222returns the certificate revocation list that caused CRL checking to fail or
223.Dv NULL
224if no CRL is relevant.
225.Pp
226When, during certification path validation, the need arises to check
227the validity of the certification path of a CRL issuer certificate,
228the library creates a new, temporary
229.Vt X509_STORE_CTX
230object.
231If
232.Fn X509_STORE_CTX_get0_parent_ctx
233is called on that temporary object, a pointer to the original
234certification path validation context is returned.
235This may be useful in callback functions called from
236.Xr X509_verify_cert 3
237or from its subroutines to find out whether the callback is called
238from the path validation of the target certificate or from the path
239validation of a related CRL issuer certificate, and if the latter,
240what the target certificate is.
241.Pp
242.Fn X509_STORE_CTX_get0_chain
243returns an internal pointer to a complete validate chain
244if a previous call to
245.Xr X509_verify_cert 3
246was successful.
247If the call to
248.Xr X509_verify_cert 3
249was not successful, the returned chain may be incomplete or invalid.
250.Fn X509_STORE_CTX_get_chain
251is a deprecated alias of
252.Fn X509_STORE_CTX_get0_chain .
253.Fn X509_STORE_CTX_get1_chain
254returns a deep copy of the same chain which persists even after the
255.Fa ctx
256structure is freed.
257When it is no longer needed, it should be freed using
258.Fn sk_X509_pop_free chain X509_free .
259.Pp
260.Fn X509_STORE_CTX_set0_verified_chain
261frees the validate chain generated by if a previous call to
262.Xr X509_verify_cert 3 ,
263if any, and replaces it with the given
264.Fa chain .
265Ownership of the
266.Fa chain
267is transferred to the
268.Fa ctx ,
269so it should not be freed by the caller.
270.Pp
271.Fn X509_verify_cert_error_string
272returns a human readable error string for verification error
273.Fa n .
274.Pp
275The above functions should be used instead of directly referencing the
276fields in the
277.Sy X509_VERIFY_CTX
278structure.
279.Pp
280In versions of OpenSSL before 1.0, the current certificate returned by
281.Fn X509_STORE_CTX_get_current_cert
282was never
283.Dv NULL .
284Applications should check the return value before printing out any
285debugging information relating to the current certificate.
286.Pp
287If an unrecognised error code is passed to
288.Fn X509_verify_cert_error_string ,
289"Unknown certificate verification error"
290is returned.
291This should never happen unless an invalid code is passed.
292.Sh RETURN VALUES
293.Fn X509_STORE_CTX_get_error
294returns
295.Dv X509_V_OK
296or an error code.
297.Pp
298.Fn X509_STORE_CTX_get_error_depth
299returns a non-negative error depth.
300.Pp
301.Fn X509_STORE_CTX_get_current_cert ,
302.Fn X509_STORE_CTX_get0_current_issuer ,
303and
304.Fn X509_STORE_CTX_get0_current_crl
305return the object which caused the error or
306.Dv NULL
307if no object of the requested kind is relevant to the error.
308.Pp
309.Fn X509_STORE_CTX_get0_parent_ctx
310returns the parent context or
311.Dv NULL
312if
313.Fa ctx
314is not a temporary child context
315used for path validation of a CRL issuer certificate.
316.Pp
317.Fn X509_STORE_CTX_get_num_untrusted
318returns the number of untrusted certificates
319that were used in building the chain during a call to
320.Xr X509_verify_cert 3 .
321.Pp
322.Fn X509_STORE_CTX_get0_chain ,
323.Fn X509_STORE_CTX_get_chain ,
324and
325.Fn X509_STORE_CTX_get1_chain
326return a pointer to a stack of certificates or
327.Dv NULL
328if an error occurs.
329.Pp
330.Fn X509_verify_cert_error_string
331returns a human readable error string for verification error
332.Fa n .
333.Sh ERROR CODES
334A list of error codes and messages is shown below.
335Some of the error codes are defined but currently never returned:
336these are described as "unused".
337.Bl -tag -width Ds
338.It Dv X509_V_OK : No ok
339The operation was successful.
340.It Dv X509_V_ERR_UNSPECIFIED : \
341 No Unspecified certificate verification error
342An error was encountered during certificate verification and
343the internal routines failed to set a more specific error.
344.It Dv X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT : \
345 No unable to get issuer certificate
346The issuer certificate of a locally looked up certificate could not be found.
347This normally means the list of trusted certificates is not complete.
348.It Dv X509_V_ERR_UNABLE_TO_GET_CRL : No unable to get certificate CRL
349The CRL of a certificate could not be found.
350.It Dv X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE : \
351 No unable to decrypt certificate's signature
352The certificate signature could not be decrypted.
353This means that the actual signature value could not be determined
354rather than it not matching the expected value.
355This is only meaningful for RSA keys.
356.It Dv X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE : \
357 No unable to decrypt CRL's signature
358The CRL signature could not be decrypted: this means that the actual
359signature value could not be determined rather than it not matching the
360expected value.
361Unused.
362.It Dv X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY : \
363 No unable to decode issuer public key
364The public key in the certificate
365.Vt SubjectPublicKeyInfo
366could not be read.
367.It Dv X509_V_ERR_CERT_SIGNATURE_FAILURE : No certificate signature failure
368The signature of the certificate is invalid.
369.It Dv X509_V_ERR_CRL_SIGNATURE_FAILURE : No CRL signature failure
370The signature of the CRL is invalid.
371.It Dv X509_V_ERR_CERT_NOT_YET_VALID : No certificate is not yet valid
372The certificate is not yet valid: the notBefore date is after the
373current time.
374.It Dv X509_V_ERR_CERT_HAS_EXPIRED : No certificate has expired
375The certificate has expired: that is the notAfter date is before the
376current time.
377.It Dv X509_V_ERR_CRL_NOT_YET_VALID : No CRL is not yet valid
378The CRL is not yet valid.
379.It Dv X509_V_ERR_CRL_HAS_EXPIRED : No CRL has expired
380The CRL has expired.
381.It Dv X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD : \
382 No format error in certificate's notBefore field
383The certificate notBefore field contains an invalid time.
384.It Dv X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD : \
385 No format error in certificate's notAfter field
386The certificate notAfter field contains an invalid time.
387.It Dv X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD : \
388 No format error in CRL's lastUpdate field
389The CRL lastUpdate field contains an invalid time.
390.It Dv X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD : \
391 No format error in CRL's nextUpdate field
392The CRL nextUpdate field contains an invalid time.
393.It Dv X509_V_ERR_OUT_OF_MEM : No out of memory
394An error occurred trying to allocate memory.
395This should never happen.
396.It Dv X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT : No self signed certificate
397The passed certificate is self signed and the same certificate cannot be
398found in the list of trusted certificates.
399.It Dv X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN : \
400 No self signed certificate in certificate chain
401The certificate chain could be built up using the untrusted certificates
402but the root could not be found locally.
403.It Dv X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY : \
404 No unable to get local issuer certificate
405The issuer certificate could not be found: this occurs if the issuer
406certificate of an untrusted certificate cannot be found.
407.It Dv X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE : \
408 No unable to verify the first certificate
409No signatures could be verified because the chain contains only one
410certificate and it is not self signed.
411.It Dv X509_V_ERR_CERT_CHAIN_TOO_LONG : No certificate chain too long
412The certificate chain length is greater than the supplied maximum depth.
413.It Dv X509_V_ERR_CERT_REVOKED : No certificate revoked
414The certificate has been revoked.
415.It Dv X509_V_ERR_INVALID_CA : No invalid CA certificate
416A CA certificate is invalid.
417Either it is not a CA or its extensions are not consistent with the
418supplied purpose.
419.It Dv X509_V_ERR_PATH_LENGTH_EXCEEDED : No path length constraint exceeded
420The basicConstraints path-length parameter has been exceeded.
421.It Dv X509_V_ERR_INVALID_PURPOSE : No unsupported certificate purpose
422The supplied certificate cannot be used for the specified purpose.
423.It Dv X509_V_ERR_CERT_UNTRUSTED : No certificate not trusted
424The root CA is not marked as trusted for the specified purpose.
425.It Dv X509_V_ERR_CERT_REJECTED : No certificate rejected
426The root CA is marked to reject the specified purpose.
427.It Dv X509_V_ERR_SUBJECT_ISSUER_MISMATCH : No subject issuer mismatch
428The current candidate issuer certificate was rejected because its
429subject name did not match the issuer name of the current certificate.
430This is only set if issuer check debugging is enabled; it is used for
431status notification and is
432.Sy not
433in itself an error.
434.It Dv X509_V_ERR_AKID_SKID_MISMATCH : \
435 No authority and subject key identifier mismatch
436The current candidate issuer certificate was rejected because its
437subject key identifier was present and did not match the authority key
438identifier current certificate.
439This is only set if issuer check debugging is enabled; it is used for
440status notification and is
441.Sy not
442in itself an error.
443.It Dv X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH : \
444 No authority and issuer serial number mismatch
445The current candidate issuer certificate was rejected because its issuer
446name and serial number was present and did not match the authority key
447identifier of the current certificate.
448This is only set if issuer check debugging is enabled; it is used for
449status notification and is
450.Sy not
451in itself an error.
452.It Dv X509_V_ERR_KEYUSAGE_NO_CERTSIGN : \
453 No key usage does not include certificate signing
454The current candidate issuer certificate was rejected because its
455keyUsage extension does not permit certificate signing.
456This is only set if issuer check debugging is enabled it is used for
457status notification and is
458.Sy not
459in itself an error.
460.It Dv X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER : \
461 No unable to get CRL issuer certificate
462The CRL's issuer could not be found:
463there is no alternative CRL issuer set on
464.Ar ctx
465and the last certificate in the chain is not self signed.
466.It Dv X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION : \
467 No unhandled critical extension
468The certificate contains a critical extension that is unsupported
469by the library.
470.It Dv X509_V_ERR_KEYUSAGE_NO_CRL_SIGN : \
471 No key usage does not include CRL signing
472The CRL issuer has a key usage extension with unset cRLSign bit.
473.It Dv X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION : \
474 No unhandled critical CRL extension
475The CRL contains a critical extension that is unsupported
476by the library.
477.\" XXX - The following are unreachable (X509_V_ERR_INVALID_NON_CA) or unused.
478.\" .It Dv X509_V_ERR_INVALID_NON_CA : \
479.\"  No invalid non-CA certificate (has CA markings)
480.\" .It Dv X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED : \
481.\"  No proxy path length constraint exceeded
482.\" .It Dv X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE : \
483.\"  No key usage does not include digital signature
484.\" .It Dv X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED : \
485.\"  No proxy certificates not allowed, please set the appropriate flag
486.It Dv X509_V_ERR_INVALID_EXTENSION : \
487 No invalid or inconsistent certificate extension
488A certificate extension had an invalid value (for example an incorrect
489encoding) or some value inconsistent with other extensions.
490.It Dv X509_V_ERR_INVALID_POLICY_EXTENSION : \
491 No invalid or inconsistent certificate policy extension
492A certificate policies extension had an invalid value (for example an
493incorrect encoding) or some value inconsistent with other extensions.
494This error only occurs if policy processing is enabled.
495.It Dv X509_V_ERR_NO_EXPLICIT_POLICY : No no explicit policy
496The verification flags were set to require an explicit policy but none
497was present.
498.It Dv X509_V_ERR_DIFFERENT_CRL_SCOPE : No different CRL scope
499The only CRLs that could be found did not match the scope of the
500certificate.
501.It Dv X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE : \
502 No unsupported extension feature
503Some feature of a certificate extension is not supported.
504Unused.
505.It Dv X509_V_ERR_UNNESTED_RESOURCE : \
506 No RFC 3779 resource not subset of parent's resources
507When walking up a certificate chain, all resources specified in
508RFC 3779 extensions must be contained in the resources delegated in
509the issuer's RFC 3779 extensions.
510The error indicates that this is not the case or that the trust anchor
511has inheritance.
512.It Dv X509_V_ERR_PERMITTED_VIOLATION : No permitted subtree violation
513A name constraint violation occurred in the permitted subtrees.
514.It Dv X509_V_ERR_EXCLUDED_VIOLATION : No excluded subtree violation
515A name constraint violation occurred in the excluded subtrees.
516.It Dv X509_V_ERR_SUBTREE_MINMAX : \
517 No name constraints minimum and maximum not supported
518A certificate name constraints extension included a minimum or maximum
519field: this is not supported.
520.It Dv X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE : \
521 No unsupported name constraint type
522An unsupported name constraint type was encountered.
523OpenSSL currently only supports directory name, DNS name, email and URI
524types.
525.It Dv X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX : \
526 No unsupported or invalid name constraint syntax
527The format of the name constraint is not recognised: for example an
528email address format of a form not mentioned in RFC 3280.
529This could be caused by a garbage extension or some new feature not
530currently supported.
531.\" X509_V_ERR_UNSUPPORTED_NAME_SYNTAX : No unsupported or invalid name syntax
532.It Dv X509_V_ERR_CRL_PATH_VALIDATION_ERROR : No CRL path validation error
533An error occurred when attempting to verify the CRL path.
534This error can only happen if extended CRL checking is enabled.
535.It Dv X509_V_ERR_APPLICATION_VERIFICATION : \
536 No application verification failure
537An application specific error.
538This will never be returned unless explicitly set by an application.
539.\" .It Dv X509_V_ERR_HOSTNAME_MISMATCH : No Hostname mismatch
540.\" .It Dv X509_V_ERR_EMAIL_MISMATCH : No Email address mismatch
541.\" .It Dv X509_V_ERR_IP_ADDRESS_MISMATCH : No IP address mismatch
542.\" .It Dv X509_V_ERR_INVALID_CALL : \
543.\"  No Invalid certificate verification context
544.\" .It Dv X509_V_ERR_STORE_LOOKUP : No Issuer certificate lookup error
545.\" .It Dv X509_V_ERR_EE_KEY_TOO_SMALL : No EE certificate key too weak
546.\" .It Dv X509_V_ERR_CA_KEY_TOO_SMALL : No CA certificate key too weak
547.\" .It Dv X509_V_ERR_CA_MD_TOO_WEAK : \
548.\"  No CA signature digest algorithm too weak
549.El
550.Sh SEE ALSO
551.Xr X509_STORE_CTX_new 3 ,
552.Xr X509_STORE_CTX_set_verify 3 ,
553.Xr X509_STORE_CTX_set_verify_cb 3 ,
554.Xr X509_STORE_set_verify_cb 3 ,
555.Xr X509_up_ref 3 ,
556.Xr X509_verify_cert 3
557.Sh HISTORY
558.Fn X509_STORE_CTX_get_error ,
559.Fn X509_STORE_CTX_set_error ,
560.Fn X509_STORE_CTX_get_error_depth ,
561.Fn X509_STORE_CTX_get_current_cert ,
562.Fn X509_STORE_CTX_get_chain ,
563and
564.Fn X509_verify_cert_error_string
565first appeared in SSLeay 0.8.0 and have been available since
566.Ox 2.4 .
567.Pp
568.Fn X509_STORE_CTX_get1_chain
569first appeared in OpenSSL 0.9.5 and has been available since
570.Ox 2.7 .
571.Pp
572.Fn X509_STORE_CTX_get0_current_issuer ,
573.Fn X509_STORE_CTX_get0_current_crl ,
574and
575.Fn X509_STORE_CTX_get0_parent_ctx
576first appeared in OpenSSL 1.0.0 and have been available since
577.Ox 4.9 .
578.Pp
579.Fn X509_STORE_CTX_get0_chain
580first appeared in OpenSSL 1.1.0 and has been available since
581.Ox 6.3 .
582.Pp
583.Fn X509_STORE_CTX_set_error_depth ,
584.Fn X509_STORE_CTX_set_current_cert ,
585.Fn X509_STORE_CTX_get_num_untrusted ,
586and
587.Fn X509_STORE_CTX_set0_verified_chain
588first appeared in OpenSSL 1.1.0 and have been available since
589.Ox 7.1 .
590