X509_verify_cert.pod 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. =pod
  2. =head1 NAME
  3. X509_build_chain,
  4. X509_verify_cert,
  5. X509_STORE_CTX_verify - build and verify X509 certificate chain
  6. =head1 SYNOPSIS
  7. #include <openssl/x509_vfy.h>
  8. STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs,
  9. X509_STORE *store, int with_self_signed,
  10. OSSL_LIB_CTX *libctx, const char *propq);
  11. int X509_verify_cert(X509_STORE_CTX *ctx);
  12. int X509_STORE_CTX_verify(X509_STORE_CTX *ctx);
  13. =head1 DESCRIPTION
  14. X509_build_chain() builds a certificate chain starting from I<target>
  15. using the optional list of intermediate CA certificates I<certs>.
  16. If I<store> is NULL it builds the chain as far down as possible, ignoring errors.
  17. Else the chain must reach a trust anchor contained in I<store>.
  18. It internally uses a B<X509_STORE_CTX> structure associated with the library
  19. context I<libctx> and property query string I<propq>, both of which may be NULL.
  20. In case there is more than one possibility for the chain, only one is taken.
  21. On success it returns a pointer to a new stack of (up_ref'ed) certificates
  22. starting with I<target> and followed by all available intermediate certificates.
  23. A self-signed trust anchor is included only if I<target> is the trust anchor
  24. of I<with_self_signed> is 1.
  25. If a non-NULL stack is returned the caller is responsible for freeing it.
  26. The X509_verify_cert() function attempts to discover and validate a
  27. certificate chain based on parameters in I<ctx>.
  28. The verification context, of type B<X509_STORE_CTX>, can be constructed
  29. using L<X509_STORE_CTX_new(3)> and L<X509_STORE_CTX_init(3)>.
  30. It usually includes a target certificate to be verified,
  31. a set of certificates serving as trust anchors,
  32. a list of non-trusted certificates that may be helpful for chain construction,
  33. flags such as X509_V_FLAG_X509_STRICT, and various other optional components
  34. such as a callback function that allows customizing the verification outcome.
  35. A complete description of the certificate verification process is contained in
  36. the L<openssl-verification-options(1)> manual page.
  37. Applications rarely call this function directly but it is used by
  38. OpenSSL internally for certificate validation, in both the S/MIME and
  39. SSL/TLS code.
  40. A negative return value from X509_verify_cert() can occur if it is invoked
  41. incorrectly, such as with no certificate set in I<ctx>, or when it is called
  42. twice in succession without reinitialising I<ctx> for the second call.
  43. A negative return value can also happen due to internal resource problems
  44. or because an internal inconsistency has been detected.
  45. Applications must interpret any return value <= 0 as an error.
  46. The X509_STORE_CTX_verify() behaves like X509_verify_cert() except that its
  47. target certificate is the first element of the list of untrusted certificates
  48. in I<ctx> unless a target certificate is set explicitly.
  49. =head1 RETURN VALUES
  50. X509_build_chain() returns NULL on error, else a stack of certificates.
  51. Both X509_verify_cert() and X509_STORE_CTX_verify()
  52. return 1 if a complete chain can be built and validated,
  53. otherwise they return 0, and in exceptional circumstances (such as malloc
  54. failure and internal errors) they can also return a negative code.
  55. If a complete chain can be built and validated both functions return 1.
  56. If the certificate must be rejected on the basis of the data available
  57. or any required certificate status data is not available they return 0.
  58. If no definite answer possible they usually return a negative code.
  59. On error or failure additional error information can be obtained by
  60. examining I<ctx> using, for example, L<X509_STORE_CTX_get_error(3)>. Even if
  61. verification indicated success, the stored error code may be different from
  62. X509_V_OK, likely because a verification callback function has waived the error.
  63. =head1 SEE ALSO
  64. L<X509_STORE_CTX_new(3)>, L<X509_STORE_CTX_init(3)>,
  65. L<X509_STORE_CTX_get_error(3)>
  66. =head1 HISTORY
  67. X509_build_chain() and X509_STORE_CTX_verify() were added in OpenSSL 3.0.
  68. =head1 COPYRIGHT
  69. Copyright 2009-2022 The OpenSSL Project Authors. All Rights Reserved.
  70. Licensed under the Apache License 2.0 (the "License"). You may not use
  71. this file except in compliance with the License. You can obtain a copy
  72. in the file LICENSE in the source distribution or at
  73. L<https://www.openssl.org/source/license.html>.
  74. =cut