X509_VERIFY_PARAM_set_flags.pod 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. =pod
  2. =head1 NAME
  3. X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_get_flags, X509_VERIFY_PARAM_set_purpose, X509_VERIFY_PARAM_set_trust, X509_VERIFY_PARAM_set_depth, X509_VERIFY_PARAM_get_depth, X509_VERIFY_PARAM_set_time, X509_VERIFY_PARAM_add0_policy, X509_VERIFY_PARAM_set1_policies, X509_VERIFY_PARAM_set1_host, X509_VERIFY_PARAM_add1_host, X509_VERIFY_PARAM_set_hostflags, X509_VERIFY_PARAM_get0_peername, X509_VERIFY_PARAM_set1_email, X509_VERIFY_PARAM_set1_ip, X509_VERIFY_PARAM_set1_ip_asc - X509 verification parameters
  4. =head1 SYNOPSIS
  5. #include <openssl/x509_vfy.h>
  6. int X509_VERIFY_PARAM_set_flags(X509_VERIFY_PARAM *param, unsigned long flags);
  7. int X509_VERIFY_PARAM_clear_flags(X509_VERIFY_PARAM *param,
  8. unsigned long flags);
  9. unsigned long X509_VERIFY_PARAM_get_flags(X509_VERIFY_PARAM *param);
  10. int X509_VERIFY_PARAM_set_purpose(X509_VERIFY_PARAM *param, int purpose);
  11. int X509_VERIFY_PARAM_set_trust(X509_VERIFY_PARAM *param, int trust);
  12. void X509_VERIFY_PARAM_set_time(X509_VERIFY_PARAM *param, time_t t);
  13. int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param,
  14. ASN1_OBJECT *policy);
  15. int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,
  16. STACK_OF(ASN1_OBJECT) *policies);
  17. void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth);
  18. int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param);
  19. int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,
  20. const char *name, size_t namelen);
  21. int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param,
  22. const char *name, size_t namelen);
  23. void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,
  24. unsigned int flags);
  25. char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param);
  26. int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param,
  27. const char *email, size_t emaillen);
  28. int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param,
  29. const unsigned char *ip, size_t iplen);
  30. int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc);
  31. =head1 DESCRIPTION
  32. These functions manipulate the B<X509_VERIFY_PARAM> structure associated with
  33. a certificate verification operation.
  34. The X509_VERIFY_PARAM_set_flags() function sets the flags in B<param> by oring
  35. it with B<flags>. See the B<VERIFICATION FLAGS> section for a complete
  36. description of values the B<flags> parameter can take.
  37. X509_VERIFY_PARAM_get_flags() returns the flags in B<param>.
  38. X509_VERIFY_PARAM_clear_flags() clears the flags B<flags> in B<param>.
  39. X509_VERIFY_PARAM_set_purpose() sets the verification purpose in B<param>
  40. to B<purpose>. This determines the acceptable purpose of the certificate
  41. chain, for example SSL client or SSL server.
  42. X509_VERIFY_PARAM_set_trust() sets the trust setting in B<param> to
  43. B<trust>.
  44. X509_VERIFY_PARAM_set_time() sets the verification time in B<param> to
  45. B<t>. Normally the current time is used.
  46. X509_VERIFY_PARAM_add0_policy() enables policy checking (it is disabled
  47. by default) and adds B<policy> to the acceptable policy set.
  48. X509_VERIFY_PARAM_set1_policies() enables policy checking (it is disabled
  49. by default) and sets the acceptable policy set to B<policies>. Any existing
  50. policy set is cleared. The B<policies> parameter can be B<NULL> to clear
  51. an existing policy set.
  52. X509_VERIFY_PARAM_set_depth() sets the maximum verification depth to B<depth>.
  53. That is the maximum number of untrusted CA certificates that can appear in a
  54. chain.
  55. X509_VERIFY_PARAM_set1_host() sets the expected DNS hostname to
  56. B<name> clearing any previously specified host name or names. If
  57. B<name> is NULL, or empty the list of hostnames is cleared, and
  58. name checks are not performed on the peer certificate. If B<name>
  59. is NUL-terminated, B<namelen> may be zero, otherwise B<namelen>
  60. must be set to the length of B<name>. When a hostname is specified,
  61. certificate verification automatically invokes L<X509_check_host(3)>
  62. with flags equal to the B<flags> argument given to
  63. B<X509_VERIFY_PARAM_set_hostflags()> (default zero). Applications
  64. are strongly advised to use this interface in preference to explicitly
  65. calling L<X509_check_host(3)>, hostname checks are out of scope
  66. with the DANE-EE(3) certificate usage, and the internal check will
  67. be suppressed as appropriate when DANE support is added to OpenSSL.
  68. X509_VERIFY_PARAM_add1_host() adds B<name> as an additional reference
  69. identifer that can match the peer's certificate. Any previous names
  70. set via X509_VERIFY_PARAM_set1_host() or X509_VERIFY_PARAM_add1_host()
  71. are retained, no change is made if B<name> is NULL or empty. When
  72. multiple names are configured, the peer is considered verified when
  73. any name matches.
  74. X509_VERIFY_PARAM_get0_peername() returns the DNS hostname or subject
  75. CommonName from the peer certificate that matched one of the reference
  76. identifiers. When wildcard matching is not disabled, or when a
  77. reference identifier specifies a parent domain (starts with ".")
  78. rather than a hostname, the peer name may be a wildcard name or a
  79. sub-domain of the reference identifier respectively. The return
  80. string is allocated by the library and is no longer valid once the
  81. associated B<param> argument is freed. Applications must not free
  82. the return value.
  83. X509_VERIFY_PARAM_set1_email() sets the expected RFC822 email address to
  84. B<email>. If B<email> is NUL-terminated, B<emaillen> may be zero, otherwise
  85. B<emaillen> must be set to the length of B<email>. When an email address
  86. is specified, certificate verification automatically invokes
  87. L<X509_check_email(3)>.
  88. X509_VERIFY_PARAM_set1_ip() sets the expected IP address to B<ip>.
  89. The B<ip> argument is in binary format, in network byte-order and
  90. B<iplen> must be set to 4 for IPv4 and 16 for IPv6. When an IP
  91. address is specified, certificate verification automatically invokes
  92. L<X509_check_ip(3)>.
  93. X509_VERIFY_PARAM_set1_ip_asc() sets the expected IP address to
  94. B<ipasc>. The B<ipasc> argument is a NUL-terminal ASCII string:
  95. dotted decimal quad for IPv4 and colon-separated hexadecimal for
  96. IPv6. The condensed "::" notation is supported for IPv6 addresses.
  97. =head1 RETURN VALUES
  98. X509_VERIFY_PARAM_set_flags(), X509_VERIFY_PARAM_clear_flags(),
  99. X509_VERIFY_PARAM_set_purpose(), X509_VERIFY_PARAM_set_trust(),
  100. X509_VERIFY_PARAM_add0_policy() X509_VERIFY_PARAM_set1_policies(),
  101. X509_VERIFY_PARAM_set1_host(), X509_VERIFY_PARAM_set_hostflags(),
  102. X509_VERIFY_PARAM_set1_email(), X509_VERIFY_PARAM_set1_ip() and
  103. X509_VERIFY_PARAM_set1_ip_asc() return 1 for success and 0 for
  104. failure.
  105. X509_VERIFY_PARAM_get_flags() returns the current verification flags.
  106. X509_VERIFY_PARAM_set_time() and X509_VERIFY_PARAM_set_depth() do not return
  107. values.
  108. X509_VERIFY_PARAM_get_depth() returns the current verification depth.
  109. =head1 VERIFICATION FLAGS
  110. The verification flags consists of zero or more of the following flags
  111. ored together.
  112. B<X509_V_FLAG_CRL_CHECK> enables CRL checking for the certificate chain leaf
  113. certificate. An error occurs if a suitable CRL cannot be found.
  114. B<X509_V_FLAG_CRL_CHECK_ALL> enables CRL checking for the entire certificate
  115. chain.
  116. B<X509_V_FLAG_IGNORE_CRITICAL> disabled critical extension checking. By default
  117. any unhandled critical extensions in certificates or (if checked) CRLs results
  118. in a fatal error. If this flag is set unhandled critical extensions are
  119. ignored. B<WARNING> setting this option for anything other than debugging
  120. purposes can be a security risk. Finer control over which extensions are
  121. supported can be performed in the verification callback.
  122. THe B<X509_V_FLAG_X509_STRICT> flag disables workarounds for some broken
  123. certificates and makes the verification strictly apply B<X509> rules.
  124. B<X509_V_FLAG_ALLOW_PROXY_CERTS> enables proxy certificate verification.
  125. B<X509_V_FLAG_POLICY_CHECK> enables certificate policy checking, by default
  126. no policy checking is peformed. Additional information is sent to the
  127. verification callback relating to policy checking.
  128. B<X509_V_FLAG_EXPLICIT_POLICY>, B<X509_V_FLAG_INHIBIT_ANY> and
  129. B<X509_V_FLAG_INHIBIT_MAP> set the B<require explicit policy>, B<inhibit any
  130. policy> and B<inhibit policy mapping> flags respectively as defined in
  131. B<RFC3280>. Policy checking is automatically enabled if any of these flags
  132. are set.
  133. If B<X509_V_FLAG_NOTIFY_POLICY> is set and the policy checking is successful
  134. a special status code is set to the verification callback. This permits it
  135. to examine the valid policy tree and perform additional checks or simply
  136. log it for debugging purposes.
  137. By default some additional features such as indirect CRLs and CRLs signed by
  138. different keys are disabled. If B<X509_V_FLAG_EXTENDED_CRL_SUPPORT> is set
  139. they are enabled.
  140. If B<X509_V_FLAG_USE_DELTAS> ise set delta CRLs (if present) are used to
  141. determine certificate status. If not set deltas are ignored.
  142. B<X509_V_FLAG_CHECK_SS_SIGNATURE> enables checking of the root CA self signed
  143. cerificate signature. By default this check is disabled because it doesn't
  144. add any additional security but in some cases applications might want to
  145. check the signature anyway. A side effect of not checking the root CA
  146. signature is that disabled or unsupported message digests on the root CA
  147. are not treated as fatal errors.
  148. The B<X509_V_FLAG_CB_ISSUER_CHECK> flag enables debugging of certificate
  149. issuer checks. It is B<not> needed unless you are logging certificate
  150. verification. If this flag is set then additional status codes will be sent
  151. to the verification callback and it B<must> be prepared to handle such cases
  152. without assuming they are hard errors.
  153. The B<X509_V_FLAG_NO_ALT_CHAINS> flag suppresses checking for alternative
  154. chains. By default, when building a certificate chain, if the first certificate
  155. chain found is not trusted, then OpenSSL will continue to check to see if an
  156. alternative chain can be found that is trusted. With this flag set the behaviour
  157. will match that of OpenSSL versions prior to 1.0.2b.
  158. =head1 NOTES
  159. The above functions should be used to manipulate verification parameters
  160. instead of legacy functions which work in specific structures such as
  161. X509_STORE_CTX_set_flags().
  162. =head1 BUGS
  163. Delta CRL checking is currently primitive. Only a single delta can be used and
  164. (partly due to limitations of B<X509_STORE>) constructed CRLs are not
  165. maintained.
  166. If CRLs checking is enable CRLs are expected to be available in the
  167. corresponding B<X509_STORE> structure. No attempt is made to download
  168. CRLs from the CRL distribution points extension.
  169. =head1 EXAMPLE
  170. Enable CRL checking when performing certificate verification during SSL
  171. connections associated with an B<SSL_CTX> structure B<ctx>:
  172. X509_VERIFY_PARAM *param;
  173. param = X509_VERIFY_PARAM_new();
  174. X509_VERIFY_PARAM_set_flags(param, X509_V_FLAG_CRL_CHECK);
  175. SSL_CTX_set1_param(ctx, param);
  176. X509_VERIFY_PARAM_free(param);
  177. =head1 SEE ALSO
  178. L<X509_verify_cert(3)|X509_verify_cert(3)>,
  179. L<X509_check_host(3)|X509_check_host(3)>,
  180. L<X509_check_email(3)|X509_check_email(3)>,
  181. L<X509_check_ip(3)|X509_check_ip(3)>
  182. =head1 HISTORY
  183. The B<X509_V_FLAG_NO_ALT_CHAINS> flag was added in OpenSSL 1.0.2b
  184. =cut