X509_verify_cert.3ossl 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42)
  2. .\"
  3. .\" Standard preamble:
  4. .\" ========================================================================
  5. .de Sp \" Vertical space (when we can't use .PP)
  6. .if t .sp .5v
  7. .if n .sp
  8. ..
  9. .de Vb \" Begin verbatim text
  10. .ft CW
  11. .nf
  12. .ne \\$1
  13. ..
  14. .de Ve \" End verbatim text
  15. .ft R
  16. .fi
  17. ..
  18. .\" Set up some character translations and predefined strings. \*(-- will
  19. .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  20. .\" double quote, and \*(R" will give a right double quote. \*(C+ will
  21. .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
  22. .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
  23. .\" nothing in troff, for use with C<>.
  24. .tr \(*W-
  25. .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  26. .ie n \{\
  27. . ds -- \(*W-
  28. . ds PI pi
  29. . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  30. . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  31. . ds L" ""
  32. . ds R" ""
  33. . ds C` ""
  34. . ds C' ""
  35. 'br\}
  36. .el\{\
  37. . ds -- \|\(em\|
  38. . ds PI \(*p
  39. . ds L" ``
  40. . ds R" ''
  41. . ds C`
  42. . ds C'
  43. 'br\}
  44. .\"
  45. .\" Escape single quotes in literal strings from groff's Unicode transform.
  46. .ie \n(.g .ds Aq \(aq
  47. .el .ds Aq '
  48. .\"
  49. .\" If the F register is >0, we'll generate index entries on stderr for
  50. .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
  51. .\" entries marked with X<> in POD. Of course, you'll have to process the
  52. .\" output yourself in some meaningful fashion.
  53. .\"
  54. .\" Avoid warning from groff about undefined register 'F'.
  55. .de IX
  56. ..
  57. .nr rF 0
  58. .if \n(.g .if rF .nr rF 1
  59. .if (\n(rF:(\n(.g==0)) \{\
  60. . if \nF \{\
  61. . de IX
  62. . tm Index:\\$1\t\\n%\t"\\$2"
  63. ..
  64. . if !\nF==2 \{\
  65. . nr % 0
  66. . nr F 2
  67. . \}
  68. . \}
  69. .\}
  70. .rr rF
  71. .\"
  72. .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  73. .\" Fear. Run. Save yourself. No user-serviceable parts.
  74. . \" fudge factors for nroff and troff
  75. .if n \{\
  76. . ds #H 0
  77. . ds #V .8m
  78. . ds #F .3m
  79. . ds #[ \f1
  80. . ds #] \fP
  81. .\}
  82. .if t \{\
  83. . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  84. . ds #V .6m
  85. . ds #F 0
  86. . ds #[ \&
  87. . ds #] \&
  88. .\}
  89. . \" simple accents for nroff and troff
  90. .if n \{\
  91. . ds ' \&
  92. . ds ` \&
  93. . ds ^ \&
  94. . ds , \&
  95. . ds ~ ~
  96. . ds /
  97. .\}
  98. .if t \{\
  99. . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  100. . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  101. . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  102. . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  103. . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  104. . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  105. .\}
  106. . \" troff and (daisy-wheel) nroff accents
  107. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  108. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  109. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  110. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  111. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  112. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  113. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  114. .ds ae a\h'-(\w'a'u*4/10)'e
  115. .ds Ae A\h'-(\w'A'u*4/10)'E
  116. . \" corrections for vroff
  117. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  118. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  119. . \" for low resolution devices (crt and lpr)
  120. .if \n(.H>23 .if \n(.V>19 \
  121. \{\
  122. . ds : e
  123. . ds 8 ss
  124. . ds o a
  125. . ds d- d\h'-1'\(ga
  126. . ds D- D\h'-1'\(hy
  127. . ds th \o'bp'
  128. . ds Th \o'LP'
  129. . ds ae ae
  130. . ds Ae AE
  131. .\}
  132. .rm #[ #] #H #V #F C
  133. .\" ========================================================================
  134. .\"
  135. .IX Title "X509_VERIFY_CERT 3ossl"
  136. .TH X509_VERIFY_CERT 3ossl "2024-09-03" "3.3.2" "OpenSSL"
  137. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  138. .\" way too many mistakes in technical documents.
  139. .if n .ad l
  140. .nh
  141. .SH "NAME"
  142. X509_build_chain,
  143. X509_verify_cert,
  144. X509_STORE_CTX_verify \- build and verify X509 certificate chain
  145. .SH "SYNOPSIS"
  146. .IX Header "SYNOPSIS"
  147. .Vb 1
  148. \& #include <openssl/x509_vfy.h>
  149. \&
  150. \& STACK_OF(X509) *X509_build_chain(X509 *target, STACK_OF(X509) *certs,
  151. \& X509_STORE *store, int with_self_signed,
  152. \& OSSL_LIB_CTX *libctx, const char *propq);
  153. \& int X509_verify_cert(X509_STORE_CTX *ctx);
  154. \& int X509_STORE_CTX_verify(X509_STORE_CTX *ctx);
  155. .Ve
  156. .SH "DESCRIPTION"
  157. .IX Header "DESCRIPTION"
  158. \&\fBX509_build_chain()\fR builds a certificate chain starting from \fItarget\fR
  159. using the optional list of intermediate \s-1CA\s0 certificates \fIcerts\fR.
  160. If \fIstore\fR is \s-1NULL\s0 it builds the chain as far down as possible, ignoring errors.
  161. Else the chain must reach a trust anchor contained in \fIstore\fR.
  162. It internally uses a \fBX509_STORE_CTX\fR structure associated with the library
  163. context \fIlibctx\fR and property query string \fIpropq\fR, both of which may be \s-1NULL.\s0
  164. In case there is more than one possibility for the chain, only one is taken.
  165. .PP
  166. On success it returns a pointer to a new stack of (up_ref'ed) certificates
  167. starting with \fItarget\fR and followed by all available intermediate certificates.
  168. A self-signed trust anchor is included only if \fItarget\fR is the trust anchor
  169. of \fIwith_self_signed\fR is 1.
  170. If a non-NULL stack is returned the caller is responsible for freeing it.
  171. .PP
  172. The \fBX509_verify_cert()\fR function attempts to discover and validate a
  173. certificate chain based on parameters in \fIctx\fR.
  174. The verification context, of type \fBX509_STORE_CTX\fR, can be constructed
  175. using \fBX509_STORE_CTX_new\fR\|(3) and \fBX509_STORE_CTX_init\fR\|(3).
  176. It usually includes a target certificate to be verified,
  177. a set of certificates serving as trust anchors,
  178. a list of non-trusted certificates that may be helpful for chain construction,
  179. flags such as X509_V_FLAG_X509_STRICT, and various other optional components
  180. such as a callback function that allows customizing the verification outcome.
  181. A complete description of the certificate verification process is contained in
  182. the \fBopenssl\-verification\-options\fR\|(1) manual page.
  183. .PP
  184. Applications rarely call this function directly but it is used by
  185. OpenSSL internally for certificate validation, in both the S/MIME and
  186. \&\s-1SSL/TLS\s0 code.
  187. .PP
  188. A negative return value from \fBX509_verify_cert()\fR can occur if it is invoked
  189. incorrectly, such as with no certificate set in \fIctx\fR, or when it is called
  190. twice in succession without reinitialising \fIctx\fR for the second call.
  191. A negative return value can also happen due to internal resource problems
  192. or because an internal inconsistency has been detected.
  193. Applications must interpret any return value <= 0 as an error.
  194. .PP
  195. The \fBX509_STORE_CTX_verify()\fR behaves like \fBX509_verify_cert()\fR except that its
  196. target certificate is the first element of the list of untrusted certificates
  197. in \fIctx\fR unless a target certificate is set explicitly.
  198. .PP
  199. When the verification target is a raw public key, rather than a certificate,
  200. both functions validate the target raw public key.
  201. In that case the number of possible checks is significantly reduced.
  202. The raw public key can be authenticated only via \s-1DANE TLSA\s0 records, either
  203. locally synthesised or obtained by the application from \s-1DNS.\s0
  204. Raw public key \s-1DANE TLSA\s0 records may be added via \fBSSL_add_expected_rpk\fR\|(3) or
  205. \&\fBSSL_dane_tlsa_add\fR\|(3).
  206. .SH "RETURN VALUES"
  207. .IX Header "RETURN VALUES"
  208. \&\fBX509_build_chain()\fR returns \s-1NULL\s0 on error, else a stack of certificates.
  209. .PP
  210. Both \fBX509_verify_cert()\fR and \fBX509_STORE_CTX_verify()\fR
  211. return 1 if a complete chain can be built and validated,
  212. otherwise they return 0, and in exceptional circumstances (such as malloc
  213. failure and internal errors) they can also return a negative code.
  214. .PP
  215. If a complete chain can be built and validated both functions return 1.
  216. If the certificate must be rejected on the basis of the data available
  217. or any required certificate status data is not available they return 0.
  218. If no definite answer possible they usually return a negative code.
  219. .PP
  220. On error or failure additional error information can be obtained by
  221. examining \fIctx\fR using, for example, \fBX509_STORE_CTX_get_error\fR\|(3). Even if
  222. verification indicated success, the stored error code may be different from
  223. X509_V_OK, likely because a verification callback function has waived the error.
  224. .SH "SEE ALSO"
  225. .IX Header "SEE ALSO"
  226. \&\fBSSL_add_expected_rpk\fR\|(3),
  227. \&\fBSSL_CTX_dane_enable\fR\|(3),
  228. \&\fBSSL_dane_tlsa_add\fR\|(3),
  229. \&\fBX509_STORE_CTX_new\fR\|(3),
  230. \&\fBX509_STORE_CTX_init\fR\|(3),
  231. \&\fBX509_STORE_CTX_init_rpk\fR\|(3),
  232. \&\fBX509_STORE_CTX_get_error\fR\|(3)
  233. .SH "HISTORY"
  234. .IX Header "HISTORY"
  235. \&\fBX509_build_chain()\fR and \fBX509_STORE_CTX_verify()\fR were added in OpenSSL 3.0.
  236. .SH "COPYRIGHT"
  237. .IX Header "COPYRIGHT"
  238. Copyright 2009\-2023 The OpenSSL Project Authors. All Rights Reserved.
  239. .PP
  240. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  241. this file except in compliance with the License. You can obtain a copy
  242. in the file \s-1LICENSE\s0 in the source distribution or at
  243. <https://www.openssl.org/source/license.html>.