CMS_verify.3 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. .\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35)
  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. .if !\nF .nr F 0
  58. .if \nF>0 \{\
  59. . de IX
  60. . tm Index:\\$1\t\\n%\t"\\$2"
  61. ..
  62. . if !\nF==2 \{\
  63. . nr % 0
  64. . nr F 2
  65. . \}
  66. .\}
  67. .\"
  68. .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  69. .\" Fear. Run. Save yourself. No user-serviceable parts.
  70. . \" fudge factors for nroff and troff
  71. .if n \{\
  72. . ds #H 0
  73. . ds #V .8m
  74. . ds #F .3m
  75. . ds #[ \f1
  76. . ds #] \fP
  77. .\}
  78. .if t \{\
  79. . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  80. . ds #V .6m
  81. . ds #F 0
  82. . ds #[ \&
  83. . ds #] \&
  84. .\}
  85. . \" simple accents for nroff and troff
  86. .if n \{\
  87. . ds ' \&
  88. . ds ` \&
  89. . ds ^ \&
  90. . ds , \&
  91. . ds ~ ~
  92. . ds /
  93. .\}
  94. .if t \{\
  95. . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  96. . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  97. . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  98. . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  99. . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  100. . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  101. .\}
  102. . \" troff and (daisy-wheel) nroff accents
  103. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  104. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  105. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  106. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  107. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  108. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  109. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  110. .ds ae a\h'-(\w'a'u*4/10)'e
  111. .ds Ae A\h'-(\w'A'u*4/10)'E
  112. . \" corrections for vroff
  113. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  114. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  115. . \" for low resolution devices (crt and lpr)
  116. .if \n(.H>23 .if \n(.V>19 \
  117. \{\
  118. . ds : e
  119. . ds 8 ss
  120. . ds o a
  121. . ds d- d\h'-1'\(ga
  122. . ds D- D\h'-1'\(hy
  123. . ds th \o'bp'
  124. . ds Th \o'LP'
  125. . ds ae ae
  126. . ds Ae AE
  127. .\}
  128. .rm #[ #] #H #V #F C
  129. .\" ========================================================================
  130. .\"
  131. .IX Title "CMS_verify 3"
  132. .TH CMS_verify 3 "2019-09-12" "1.0.2g" "OpenSSL"
  133. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  134. .\" way too many mistakes in technical documents.
  135. .if n .ad l
  136. .nh
  137. .SH "NAME"
  138. CMS_verify, CMS_get0_signers \- verify a CMS SignedData structure
  139. .SH "SYNOPSIS"
  140. .IX Header "SYNOPSIS"
  141. .Vb 1
  142. \& #include <openssl/cms.h>
  143. \&
  144. \& int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, X509_STORE *store, BIO *indata, BIO *out, unsigned int flags);
  145. \&
  146. \& STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms);
  147. .Ve
  148. .SH "DESCRIPTION"
  149. .IX Header "DESCRIPTION"
  150. \&\fICMS_verify()\fR verifies a \s-1CMS\s0 SignedData structure. \fBcms\fR is the CMS_ContentInfo
  151. structure to verify. \fBcerts\fR is a set of certificates in which to search for
  152. the signing certificate(s). \fBstore\fR is a trusted certificate store used for
  153. chain verification. \fBindata\fR is the detached content if the content is not
  154. present in \fBcms\fR. The content is written to \fBout\fR if it is not \s-1NULL.\s0
  155. .PP
  156. \&\fBflags\fR is an optional set of flags, which can be used to modify the verify
  157. operation.
  158. .PP
  159. \&\fICMS_get0_signers()\fR retrieves the signing certificate(s) from \fBcms\fR, it must
  160. be called after a successful \fICMS_verify()\fR operation.
  161. .SH "VERIFY PROCESS"
  162. .IX Header "VERIFY PROCESS"
  163. Normally the verify process proceeds as follows.
  164. .PP
  165. Initially some sanity checks are performed on \fBcms\fR. The type of \fBcms\fR must
  166. be SignedData. There must be at least one signature on the data and if
  167. the content is detached \fBindata\fR cannot be \fB\s-1NULL\s0\fR.
  168. .PP
  169. An attempt is made to locate all the signing certificate(s), first looking in
  170. the \fBcerts\fR parameter (if it is not \s-1NULL\s0) and then looking in any
  171. certificates contained in the \fBcms\fR structure itself. If any signing
  172. certificate cannot be located the operation fails.
  173. .PP
  174. Each signing certificate is chain verified using the \fBsmimesign\fR purpose and
  175. the supplied trusted certificate store. Any internal certificates in the message
  176. are used as untrusted CAs. If \s-1CRL\s0 checking is enabled in \fBstore\fR any internal
  177. CRLs are used in addition to attempting to look them up in \fBstore\fR. If any
  178. chain verify fails an error code is returned.
  179. .PP
  180. Finally the signed content is read (and written to \fBout\fR is it is not \s-1NULL\s0)
  181. and the signature's checked.
  182. .PP
  183. If all signature's verify correctly then the function is successful.
  184. .PP
  185. Any of the following flags (ored together) can be passed in the \fBflags\fR
  186. parameter to change the default verify behaviour.
  187. .PP
  188. If \fB\s-1CMS_NOINTERN\s0\fR is set the certificates in the message itself are not
  189. searched when locating the signing certificate(s). This means that all the
  190. signing certificates must be in the \fBcerts\fR parameter.
  191. .PP
  192. If \fB\s-1CMS_NOCRL\s0\fR is set and \s-1CRL\s0 checking is enabled in \fBstore\fR then any
  193. CRLs in the message itself are ignored.
  194. .PP
  195. If the \fB\s-1CMS_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are deleted
  196. from the content. If the content is not of type \fBtext/plain\fR then an error is
  197. returned.
  198. .PP
  199. If \fB\s-1CMS_NO_SIGNER_CERT_VERIFY\s0\fR is set the signing certificates are not
  200. verified.
  201. .PP
  202. If \fB\s-1CMS_NO_ATTR_VERIFY\s0\fR is set the signed attributes signature is not
  203. verified.
  204. .PP
  205. If \fB\s-1CMS_NO_CONTENT_VERIFY\s0\fR is set then the content digest is not checked.
  206. .SH "NOTES"
  207. .IX Header "NOTES"
  208. One application of \fB\s-1CMS_NOINTERN\s0\fR is to only accept messages signed by
  209. a small number of certificates. The acceptable certificates would be passed
  210. in the \fBcerts\fR parameter. In this case if the signer is not one of the
  211. certificates supplied in \fBcerts\fR then the verify will fail because the
  212. signer cannot be found.
  213. .PP
  214. In some cases the standard techniques for looking up and validating
  215. certificates are not appropriate: for example an application may wish to
  216. lookup certificates in a database or perform customised verification. This
  217. can be achieved by setting and verifying the signers certificates manually
  218. using the signed data utility functions.
  219. .PP
  220. Care should be taken when modifying the default verify behaviour, for example
  221. setting \fB\s-1CMS_NO_CONTENT_VERIFY\s0\fR will totally disable all content verification
  222. and any modified content will be considered valid. This combination is however
  223. useful if one merely wishes to write the content to \fBout\fR and its validity
  224. is not considered important.
  225. .PP
  226. Chain verification should arguably be performed using the signing time rather
  227. than the current time. However since the signing time is supplied by the
  228. signer it cannot be trusted without additional evidence (such as a trusted
  229. timestamp).
  230. .SH "RETURN VALUES"
  231. .IX Header "RETURN VALUES"
  232. \&\fICMS_verify()\fR returns 1 for a successful verification and zero if an error
  233. occurred.
  234. .PP
  235. \&\fICMS_get0_signers()\fR returns all signers or \s-1NULL\s0 if an error occurred.
  236. .PP
  237. The error can be obtained from \fIERR_get_error\fR\|(3)
  238. .SH "BUGS"
  239. .IX Header "BUGS"
  240. The trusted certificate store is not searched for the signing certificate,
  241. this is primarily due to the inadequacies of the current \fBX509_STORE\fR
  242. functionality.
  243. .PP
  244. The lack of single pass processing means that the signed content must all
  245. be held in memory if it is not detached.
  246. .SH "SEE ALSO"
  247. .IX Header "SEE ALSO"
  248. \&\fIERR_get_error\fR\|(3), \fICMS_sign\fR\|(3)
  249. .SH "HISTORY"
  250. .IX Header "HISTORY"
  251. \&\fICMS_verify()\fR was added to OpenSSL 0.9.8