xref: /openbsd-src/lib/libcrypto/man/X509_STORE_CTX_get_error.3 (revision a9630e5b24317a53917fa45a98e81ddf0d77dd5f)
1.\" $OpenBSD: X509_STORE_CTX_get_error.3,v 1.28 2023/06/06 16:20:13 schwarze 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: June 6 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 thisUpdate field (sic!) contains an invalid time.
390Both the name of the error constant and the text of the error message
391give a wrong name for the field that contains the problem.
392.It Dv X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD : \
393 No format error in CRL's nextUpdate field
394The CRL nextUpdate field contains an invalid time.
395.It Dv X509_V_ERR_OUT_OF_MEM : No out of memory
396An error occurred trying to allocate memory.
397This should never happen.
398.It Dv X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT : No self signed certificate
399The passed certificate is self signed and the same certificate cannot be
400found in the list of trusted certificates.
401.It Dv X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN : \
402 No self signed certificate in certificate chain
403The certificate chain could be built up using the untrusted certificates
404but the root could not be found locally.
405.It Dv X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY : \
406 No unable to get local issuer certificate
407The issuer certificate could not be found: this occurs if the issuer
408certificate of an untrusted certificate cannot be found.
409.It Dv X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE : \
410 No unable to verify the first certificate
411No signatures could be verified because the chain contains only one
412certificate and it is not self signed.
413.It Dv X509_V_ERR_CERT_CHAIN_TOO_LONG : No certificate chain too long
414The certificate chain length is greater than the supplied maximum depth.
415.It Dv X509_V_ERR_CERT_REVOKED : No certificate revoked
416The certificate has been revoked.
417.It Dv X509_V_ERR_INVALID_CA : No invalid CA certificate
418A CA certificate is invalid.
419Either it is not a CA or its extensions are not consistent with the
420supplied purpose.
421.It Dv X509_V_ERR_PATH_LENGTH_EXCEEDED : No path length constraint exceeded
422The basicConstraints path-length parameter has been exceeded.
423.It Dv X509_V_ERR_INVALID_PURPOSE : No unsupported certificate purpose
424The supplied certificate cannot be used for the specified purpose.
425.It Dv X509_V_ERR_CERT_UNTRUSTED : No certificate not trusted
426The root CA is not marked as trusted for the specified purpose.
427.It Dv X509_V_ERR_CERT_REJECTED : No certificate rejected
428The root CA is marked to reject the specified purpose.
429.It Dv X509_V_ERR_SUBJECT_ISSUER_MISMATCH : No subject issuer mismatch
430The current candidate issuer certificate was rejected because its
431subject name did not match the issuer name of the current certificate.
432This is only set if issuer check debugging is enabled; it is used for
433status notification and is
434.Sy not
435in itself an error.
436.It Dv X509_V_ERR_AKID_SKID_MISMATCH : \
437 No authority and subject key identifier mismatch
438The current candidate issuer certificate was rejected because its
439subject key identifier was present and did not match the authority key
440identifier current certificate.
441This is only set if issuer check debugging is enabled; it is used for
442status notification and is
443.Sy not
444in itself an error.
445.It Dv X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH : \
446 No authority and issuer serial number mismatch
447The current candidate issuer certificate was rejected because its issuer
448name and serial number was present and did not match the authority key
449identifier of the current certificate.
450This is only set if issuer check debugging is enabled; it is used for
451status notification and is
452.Sy not
453in itself an error.
454.It Dv X509_V_ERR_KEYUSAGE_NO_CERTSIGN : \
455 No key usage does not include certificate signing
456The current candidate issuer certificate was rejected because its
457keyUsage extension does not permit certificate signing.
458This is only set if issuer check debugging is enabled it is used for
459status notification and is
460.Sy not
461in itself an error.
462.It Dv X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER : \
463 No unable to get CRL issuer certificate
464The CRL's issuer could not be found:
465there is no alternative CRL issuer set on
466.Ar ctx
467and the last certificate in the chain is not self signed.
468.It Dv X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION : \
469 No unhandled critical extension
470The certificate contains a critical extension that is unsupported
471by the library.
472.It Dv X509_V_ERR_KEYUSAGE_NO_CRL_SIGN : \
473 No key usage does not include CRL signing
474The CRL issuer has a key usage extension with unset cRLSign bit.
475.It Dv X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION : \
476 No unhandled critical CRL extension
477The CRL contains a critical extension that is unsupported
478by the library.
479.\" XXX - The following are unreachable (X509_V_ERR_INVALID_NON_CA) or unused.
480.\" .It Dv X509_V_ERR_INVALID_NON_CA : \
481.\"  No invalid non-CA certificate (has CA markings)
482.\" .It Dv X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED : \
483.\"  No proxy path length constraint exceeded
484.\" .It Dv X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE : \
485.\"  No key usage does not include digital signature
486.\" .It Dv X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED : \
487.\"  No proxy certificates not allowed, please set the appropriate flag
488.It Dv X509_V_ERR_INVALID_EXTENSION : \
489 No invalid or inconsistent certificate extension
490A certificate extension had an invalid value (for example an incorrect
491encoding) or some value inconsistent with other extensions.
492.It Dv X509_V_ERR_INVALID_POLICY_EXTENSION : \
493 No invalid or inconsistent certificate policy extension
494A certificate policies extension had an invalid value (for example an
495incorrect encoding) or some value inconsistent with other extensions.
496This error only occurs if policy processing is enabled.
497.It Dv X509_V_ERR_NO_EXPLICIT_POLICY : No no explicit policy
498The verification flags were set to require an explicit policy but none
499was present.
500.It Dv X509_V_ERR_DIFFERENT_CRL_SCOPE : No different CRL scope
501The only CRLs that could be found did not match the scope of the
502certificate.
503.It Dv X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE : \
504 No unsupported extension feature
505Some feature of a certificate extension is not supported.
506Unused.
507.It Dv X509_V_ERR_UNNESTED_RESOURCE : \
508 No RFC 3779 resource not subset of parent's resources
509When walking up a certificate chain, all resources specified in
510RFC 3779 extensions must be contained in the resources delegated in
511the issuer's RFC 3779 extensions.
512The error indicates that this is not the case or that the trust anchor
513has inheritance.
514.It Dv X509_V_ERR_PERMITTED_VIOLATION : No permitted subtree violation
515A name constraint violation occurred in the permitted subtrees.
516.It Dv X509_V_ERR_EXCLUDED_VIOLATION : No excluded subtree violation
517A name constraint violation occurred in the excluded subtrees.
518.It Dv X509_V_ERR_SUBTREE_MINMAX : \
519 No name constraints minimum and maximum not supported
520A certificate name constraints extension included a minimum or maximum
521field: this is not supported.
522.It Dv X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE : \
523 No unsupported name constraint type
524An unsupported name constraint type was encountered.
525OpenSSL currently only supports directory name, DNS name, email and URI
526types.
527.It Dv X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX : \
528 No unsupported or invalid name constraint syntax
529The format of the name constraint is not recognised: for example an
530email address format of a form not mentioned in RFC 3280.
531This could be caused by a garbage extension or some new feature not
532currently supported.
533.\" X509_V_ERR_UNSUPPORTED_NAME_SYNTAX : No unsupported or invalid name syntax
534.It Dv X509_V_ERR_CRL_PATH_VALIDATION_ERROR : No CRL path validation error
535An error occurred when attempting to verify the CRL path.
536This error can only happen if extended CRL checking is enabled.
537.It Dv X509_V_ERR_APPLICATION_VERIFICATION : \
538 No application verification failure
539An application specific error.
540This will never be returned unless explicitly set by an application.
541.\" .It Dv X509_V_ERR_HOSTNAME_MISMATCH : No Hostname mismatch
542.\" .It Dv X509_V_ERR_EMAIL_MISMATCH : No Email address mismatch
543.\" .It Dv X509_V_ERR_IP_ADDRESS_MISMATCH : No IP address mismatch
544.\" .It Dv X509_V_ERR_INVALID_CALL : \
545.\"  No Invalid certificate verification context
546.\" .It Dv X509_V_ERR_STORE_LOOKUP : No Issuer certificate lookup error
547.\" .It Dv X509_V_ERR_EE_KEY_TOO_SMALL : No EE certificate key too weak
548.\" .It Dv X509_V_ERR_CA_KEY_TOO_SMALL : No CA certificate key too weak
549.\" .It Dv X509_V_ERR_CA_MD_TOO_WEAK : \
550.\"  No CA signature digest algorithm too weak
551.El
552.Sh SEE ALSO
553.Xr X509_STORE_CTX_new 3 ,
554.Xr X509_STORE_CTX_set_verify 3 ,
555.Xr X509_STORE_CTX_set_verify_cb 3 ,
556.Xr X509_STORE_set_verify_cb 3 ,
557.Xr X509_up_ref 3 ,
558.Xr X509_verify_cert 3
559.Sh HISTORY
560.Fn X509_STORE_CTX_get_error ,
561.Fn X509_STORE_CTX_set_error ,
562.Fn X509_STORE_CTX_get_error_depth ,
563.Fn X509_STORE_CTX_get_current_cert ,
564.Fn X509_STORE_CTX_get_chain ,
565and
566.Fn X509_verify_cert_error_string
567first appeared in SSLeay 0.8.0 and have been available since
568.Ox 2.4 .
569.Pp
570.Fn X509_STORE_CTX_get1_chain
571first appeared in OpenSSL 0.9.5 and has been available since
572.Ox 2.7 .
573.Pp
574.Fn X509_STORE_CTX_get0_current_issuer ,
575.Fn X509_STORE_CTX_get0_current_crl ,
576and
577.Fn X509_STORE_CTX_get0_parent_ctx
578first appeared in OpenSSL 1.0.0 and have been available since
579.Ox 4.9 .
580.Pp
581.Fn X509_STORE_CTX_get0_chain
582first appeared in OpenSSL 1.1.0 and has been available since
583.Ox 6.3 .
584.Pp
585.Fn X509_STORE_CTX_set_error_depth ,
586.Fn X509_STORE_CTX_set_current_cert ,
587.Fn X509_STORE_CTX_get_num_untrusted ,
588and
589.Fn X509_STORE_CTX_set0_verified_chain
590first appeared in OpenSSL 1.1.0 and have been available since
591.Ox 7.1 .
592