lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame^] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
| 5 | openssl-verify, |
| 6 | verify - Utility to verify certificates |
| 7 | |
| 8 | =head1 SYNOPSIS |
| 9 | |
| 10 | B<openssl> B<verify> |
| 11 | [B<-help>] |
| 12 | [B<-CAfile file>] |
| 13 | [B<-CApath directory>] |
| 14 | [B<-no-CAfile>] |
| 15 | [B<-no-CApath>] |
| 16 | [B<-allow_proxy_certs>] |
| 17 | [B<-attime timestamp>] |
| 18 | [B<-check_ss_sig>] |
| 19 | [B<-CRLfile file>] |
| 20 | [B<-crl_download>] |
| 21 | [B<-crl_check>] |
| 22 | [B<-crl_check_all>] |
| 23 | [B<-engine id>] |
| 24 | [B<-explicit_policy>] |
| 25 | [B<-extended_crl>] |
| 26 | [B<-ignore_critical>] |
| 27 | [B<-inhibit_any>] |
| 28 | [B<-inhibit_map>] |
| 29 | [B<-nameopt option>] |
| 30 | [B<-no_check_time>] |
| 31 | [B<-partial_chain>] |
| 32 | [B<-policy arg>] |
| 33 | [B<-policy_check>] |
| 34 | [B<-policy_print>] |
| 35 | [B<-purpose purpose>] |
| 36 | [B<-suiteB_128>] |
| 37 | [B<-suiteB_128_only>] |
| 38 | [B<-suiteB_192>] |
| 39 | [B<-trusted_first>] |
| 40 | [B<-no_alt_chains>] |
| 41 | [B<-untrusted file>] |
| 42 | [B<-trusted file>] |
| 43 | [B<-use_deltas>] |
| 44 | [B<-verbose>] |
| 45 | [B<-auth_level level>] |
| 46 | [B<-verify_depth num>] |
| 47 | [B<-verify_email email>] |
| 48 | [B<-verify_hostname hostname>] |
| 49 | [B<-verify_ip ip>] |
| 50 | [B<-verify_name name>] |
| 51 | [B<-x509_strict>] |
| 52 | [B<-show_chain>] |
| 53 | [B<->] |
| 54 | [certificates] |
| 55 | |
| 56 | =head1 DESCRIPTION |
| 57 | |
| 58 | The B<verify> command verifies certificate chains. |
| 59 | |
| 60 | =head1 OPTIONS |
| 61 | |
| 62 | =over 4 |
| 63 | |
| 64 | =item B<-help> |
| 65 | |
| 66 | Print out a usage message. |
| 67 | |
| 68 | =item B<-CAfile file> |
| 69 | |
| 70 | A B<file> of trusted certificates. |
| 71 | The file should contain one or more certificates in PEM format. |
| 72 | |
| 73 | =item B<-CApath directory> |
| 74 | |
| 75 | A directory of trusted certificates. The certificates should have names |
| 76 | of the form: hash.0 or have symbolic links to them of this |
| 77 | form ("hash" is the hashed certificate subject name: see the B<-hash> option |
| 78 | of the B<x509> utility). Under Unix the B<c_rehash> script will automatically |
| 79 | create symbolic links to a directory of certificates. |
| 80 | |
| 81 | =item B<-no-CAfile> |
| 82 | |
| 83 | Do not load the trusted CA certificates from the default file location. |
| 84 | |
| 85 | =item B<-no-CApath> |
| 86 | |
| 87 | Do not load the trusted CA certificates from the default directory location. |
| 88 | |
| 89 | =item B<-allow_proxy_certs> |
| 90 | |
| 91 | Allow the verification of proxy certificates. |
| 92 | |
| 93 | =item B<-attime timestamp> |
| 94 | |
| 95 | Perform validation checks using time specified by B<timestamp> and not |
| 96 | current system time. B<timestamp> is the number of seconds since |
| 97 | 01.01.1970 (UNIX time). |
| 98 | |
| 99 | =item B<-check_ss_sig> |
| 100 | |
| 101 | Verify the signature of |
| 102 | the last certificate in a chain if the certificate is supposedly self-signed. |
| 103 | This is prohibited and will result in an error if it is a non-conforming CA |
| 104 | certificate with key usage restrictions not including the keyCertSign bit. |
| 105 | This verification is disabled by default because it doesn't add any security. |
| 106 | |
| 107 | =item B<-CRLfile file> |
| 108 | |
| 109 | The B<file> should contain one or more CRLs in PEM format. |
| 110 | This option can be specified more than once to include CRLs from multiple |
| 111 | B<files>. |
| 112 | |
| 113 | =item B<-crl_download> |
| 114 | |
| 115 | Attempt to download CRL information for this certificate. |
| 116 | |
| 117 | =item B<-crl_check> |
| 118 | |
| 119 | Checks end entity certificate validity by attempting to look up a valid CRL. |
| 120 | If a valid CRL cannot be found an error occurs. |
| 121 | |
| 122 | =item B<-crl_check_all> |
| 123 | |
| 124 | Checks the validity of B<all> certificates in the chain by attempting |
| 125 | to look up valid CRLs. |
| 126 | |
| 127 | =item B<-engine id> |
| 128 | |
| 129 | Specifying an engine B<id> will cause L<verify(1)> to attempt to load the |
| 130 | specified engine. |
| 131 | The engine will then be set as the default for all its supported algorithms. |
| 132 | If you want to load certificates or CRLs that require engine support via any of |
| 133 | the B<-trusted>, B<-untrusted> or B<-CRLfile> options, the B<-engine> option |
| 134 | must be specified before those options. |
| 135 | |
| 136 | =item B<-explicit_policy> |
| 137 | |
| 138 | Set policy variable require-explicit-policy (see RFC5280). |
| 139 | |
| 140 | =item B<-extended_crl> |
| 141 | |
| 142 | Enable extended CRL features such as indirect CRLs and alternate CRL |
| 143 | signing keys. |
| 144 | |
| 145 | =item B<-ignore_critical> |
| 146 | |
| 147 | Normally if an unhandled critical extension is present which is not |
| 148 | supported by OpenSSL the certificate is rejected (as required by RFC5280). |
| 149 | If this option is set critical extensions are ignored. |
| 150 | |
| 151 | =item B<-inhibit_any> |
| 152 | |
| 153 | Set policy variable inhibit-any-policy (see RFC5280). |
| 154 | |
| 155 | =item B<-inhibit_map> |
| 156 | |
| 157 | Set policy variable inhibit-policy-mapping (see RFC5280). |
| 158 | |
| 159 | =item B<-nameopt option> |
| 160 | |
| 161 | Option which determines how the subject or issuer names are displayed. The |
| 162 | B<option> argument can be a single option or multiple options separated by |
| 163 | commas. Alternatively the B<-nameopt> switch may be used more than once to |
| 164 | set multiple options. See the L<x509(1)> manual page for details. |
| 165 | |
| 166 | =item B<-no_check_time> |
| 167 | |
| 168 | This option suppresses checking the validity period of certificates and CRLs |
| 169 | against the current time. If option B<-attime timestamp> is used to specify |
| 170 | a verification time, the check is not suppressed. |
| 171 | |
| 172 | =item B<-partial_chain> |
| 173 | |
| 174 | Allow verification to succeed even if a I<complete> chain cannot be built to a |
| 175 | self-signed trust-anchor, provided it is possible to construct a chain to a |
| 176 | trusted certificate that might not be self-signed. |
| 177 | |
| 178 | =item B<-policy arg> |
| 179 | |
| 180 | Enable policy processing and add B<arg> to the user-initial-policy-set (see |
| 181 | RFC5280). The policy B<arg> can be an object name an OID in numeric form. |
| 182 | This argument can appear more than once. |
| 183 | |
| 184 | =item B<-policy_check> |
| 185 | |
| 186 | Enables certificate policy processing. |
| 187 | |
| 188 | =item B<-policy_print> |
| 189 | |
| 190 | Print out diagnostics related to policy processing. |
| 191 | |
| 192 | =item B<-purpose purpose> |
| 193 | |
| 194 | The intended use for the certificate. If this option is not specified, |
| 195 | B<verify> will not consider certificate purpose during chain verification. |
| 196 | Currently accepted uses are B<sslclient>, B<sslserver>, B<nssslserver>, |
| 197 | B<smimesign>, B<smimeencrypt>. See the B<VERIFY OPERATION> section for more |
| 198 | information. |
| 199 | |
| 200 | =item B<-suiteB_128_only>, B<-suiteB_128>, B<-suiteB_192> |
| 201 | |
| 202 | Enable the Suite B mode operation at 128 bit Level of Security, 128 bit or |
| 203 | 192 bit, or only 192 bit Level of Security respectively. |
| 204 | See RFC6460 for details. In particular the supported signature algorithms are |
| 205 | reduced to support only ECDSA and SHA256 or SHA384 and only the elliptic curves |
| 206 | P-256 and P-384. |
| 207 | |
| 208 | =item B<-trusted_first> |
| 209 | |
| 210 | When constructing the certificate chain, use the trusted certificates specified |
| 211 | via B<-CAfile>, B<-CApath> or B<-trusted> before any certificates specified via |
| 212 | B<-untrusted>. |
| 213 | This can be useful in environments with Bridge or Cross-Certified CAs. |
| 214 | As of OpenSSL 1.1.0 this option is on by default and cannot be disabled. |
| 215 | |
| 216 | =item B<-no_alt_chains> |
| 217 | |
| 218 | By default, unless B<-trusted_first> is specified, when building a certificate |
| 219 | chain, if the first certificate chain found is not trusted, then OpenSSL will |
| 220 | attempt to replace untrusted issuer certificates with certificates from the |
| 221 | trust store to see if an alternative chain can be found that is trusted. |
| 222 | As of OpenSSL 1.1.0, with B<-trusted_first> always on, this option has no |
| 223 | effect. |
| 224 | |
| 225 | =item B<-untrusted file> |
| 226 | |
| 227 | A B<file> of additional untrusted certificates (intermediate issuer CAs) used |
| 228 | to construct a certificate chain from the subject certificate to a trust-anchor. |
| 229 | The B<file> should contain one or more certificates in PEM format. |
| 230 | This option can be specified more than once to include untrusted certificates |
| 231 | from multiple B<files>. |
| 232 | |
| 233 | =item B<-trusted file> |
| 234 | |
| 235 | A B<file> of trusted certificates, which must be self-signed, unless the |
| 236 | B<-partial_chain> option is specified. |
| 237 | The B<file> contains one or more certificates in PEM format. |
| 238 | With this option, no additional (e.g., default) certificate lists are |
| 239 | consulted. |
| 240 | That is, the only trust-anchors are those listed in B<file>. |
| 241 | This option can be specified more than once to include trusted certificates |
| 242 | from multiple B<files>. |
| 243 | This option implies the B<-no-CAfile> and B<-no-CApath> options. |
| 244 | This option cannot be used in combination with either of the B<-CAfile> or |
| 245 | B<-CApath> options. |
| 246 | |
| 247 | =item B<-use_deltas> |
| 248 | |
| 249 | Enable support for delta CRLs. |
| 250 | |
| 251 | =item B<-verbose> |
| 252 | |
| 253 | Print extra information about the operations being performed. |
| 254 | |
| 255 | =item B<-auth_level level> |
| 256 | |
| 257 | Set the certificate chain authentication security level to B<level>. |
| 258 | The authentication security level determines the acceptable signature and |
| 259 | public key strength when verifying certificate chains. |
| 260 | For a certificate chain to validate, the public keys of all the certificates |
| 261 | must meet the specified security B<level>. |
| 262 | The signature algorithm security level is enforced for all the certificates in |
| 263 | the chain except for the chain's I<trust anchor>, which is either directly |
| 264 | trusted or validated by means other than its signature. |
| 265 | See L<SSL_CTX_set_security_level(3)> for the definitions of the available |
| 266 | levels. |
| 267 | The default security level is -1, or "not set". |
| 268 | At security level 0 or lower all algorithms are acceptable. |
| 269 | Security level 1 requires at least 80-bit-equivalent security and is broadly |
| 270 | interoperable, though it will, for example, reject MD5 signatures or RSA keys |
| 271 | shorter than 1024 bits. |
| 272 | |
| 273 | =item B<-verify_depth num> |
| 274 | |
| 275 | Limit the certificate chain to B<num> intermediate CA certificates. |
| 276 | A maximal depth chain can have up to B<num+2> certificates, since neither the |
| 277 | end-entity certificate nor the trust-anchor certificate count against the |
| 278 | B<-verify_depth> limit. |
| 279 | |
| 280 | =item B<-verify_email email> |
| 281 | |
| 282 | Verify if the B<email> matches the email address in Subject Alternative Name or |
| 283 | the email in the subject Distinguished Name. |
| 284 | |
| 285 | =item B<-verify_hostname hostname> |
| 286 | |
| 287 | Verify if the B<hostname> matches DNS name in Subject Alternative Name or |
| 288 | Common Name in the subject certificate. |
| 289 | |
| 290 | =item B<-verify_ip ip> |
| 291 | |
| 292 | Verify if the B<ip> matches the IP address in Subject Alternative Name of |
| 293 | the subject certificate. |
| 294 | |
| 295 | =item B<-verify_name name> |
| 296 | |
| 297 | Use default verification policies like trust model and required certificate |
| 298 | policies identified by B<name>. |
| 299 | The trust model determines which auxiliary trust or reject OIDs are applicable |
| 300 | to verifying the given certificate chain. |
| 301 | See the B<-addtrust> and B<-addreject> options of the L<x509(1)> command-line |
| 302 | utility. |
| 303 | Supported policy names include: B<default>, B<pkcs7>, B<smime_sign>, |
| 304 | B<ssl_client>, B<ssl_server>. |
| 305 | These mimics the combinations of purpose and trust settings used in SSL, CMS |
| 306 | and S/MIME. |
| 307 | As of OpenSSL 1.1.0, the trust model is inferred from the purpose when not |
| 308 | specified, so the B<-verify_name> options are functionally equivalent to the |
| 309 | corresponding B<-purpose> settings. |
| 310 | |
| 311 | =item B<-x509_strict> |
| 312 | |
| 313 | For strict X.509 compliance, disable non-compliant workarounds for broken |
| 314 | certificates. |
| 315 | |
| 316 | =item B<-show_chain> |
| 317 | |
| 318 | Display information about the certificate chain that has been built (if |
| 319 | successful). Certificates in the chain that came from the untrusted list will be |
| 320 | flagged as "untrusted". |
| 321 | |
| 322 | =item B<-> |
| 323 | |
| 324 | Indicates the last option. All arguments following this are assumed to be |
| 325 | certificate files. This is useful if the first certificate filename begins |
| 326 | with a B<->. |
| 327 | |
| 328 | =item B<certificates> |
| 329 | |
| 330 | One or more certificates to verify. If no certificates are given, B<verify> |
| 331 | will attempt to read a certificate from standard input. Certificates must be |
| 332 | in PEM format. |
| 333 | |
| 334 | =back |
| 335 | |
| 336 | =head1 VERIFY OPERATION |
| 337 | |
| 338 | The B<verify> program uses the same functions as the internal SSL and S/MIME |
| 339 | verification, therefore, this description applies to these verify operations |
| 340 | too. |
| 341 | |
| 342 | There is one crucial difference between the verify operations performed |
| 343 | by the B<verify> program: wherever possible an attempt is made to continue |
| 344 | after an error whereas normally the verify operation would halt on the |
| 345 | first error. This allows all the problems with a certificate chain to be |
| 346 | determined. |
| 347 | |
| 348 | The verify operation consists of a number of separate steps. |
| 349 | |
| 350 | Firstly a certificate chain is built up starting from the supplied certificate |
| 351 | and ending in the root CA. |
| 352 | It is an error if the whole chain cannot be built up. |
| 353 | The chain is built up by looking up the issuers certificate of the current |
| 354 | certificate. |
| 355 | If a certificate is found which is its own issuer it is assumed to be the root |
| 356 | CA. |
| 357 | |
| 358 | The process of 'looking up the issuers certificate' itself involves a number of |
| 359 | steps. |
| 360 | After all certificates whose subject name matches the issuer name of the current |
| 361 | certificate are subject to further tests. |
| 362 | The relevant authority key identifier components of the current certificate (if |
| 363 | present) must match the subject key identifier (if present) and issuer and |
| 364 | serial number of the candidate issuer, in addition the keyUsage extension of |
| 365 | the candidate issuer (if present) must permit certificate signing. |
| 366 | |
| 367 | The lookup first looks in the list of untrusted certificates and if no match |
| 368 | is found the remaining lookups are from the trusted certificates. The root CA |
| 369 | is always looked up in the trusted certificate list: if the certificate to |
| 370 | verify is a root certificate then an exact match must be found in the trusted |
| 371 | list. |
| 372 | |
| 373 | The second operation is to check every untrusted certificate's extensions for |
| 374 | consistency with the supplied purpose. If the B<-purpose> option is not included |
| 375 | then no checks are done. The supplied or "leaf" certificate must have extensions |
| 376 | compatible with the supplied purpose and all other certificates must also be valid |
| 377 | CA certificates. The precise extensions required are described in more detail in |
| 378 | the B<CERTIFICATE EXTENSIONS> section of the B<x509> utility. |
| 379 | |
| 380 | The third operation is to check the trust settings on the root CA. The root CA |
| 381 | should be trusted for the supplied purpose. |
| 382 | For compatibility with previous versions of OpenSSL, a certificate with no |
| 383 | trust settings is considered to be valid for all purposes. |
| 384 | |
| 385 | The final operation is to check the validity of the certificate chain. |
| 386 | For each element in the chain, including the root CA certificate, |
| 387 | the validity period as specified by the C<notBefore> and C<notAfter> fields |
| 388 | is checked against the current system time. |
| 389 | The B<-attime> flag may be used to use a reference time other than "now." |
| 390 | The certificate signature is checked as well |
| 391 | (except for the signature of the typically self-signed root CA certificate, |
| 392 | which is verified only if the B<-check_ss_sig> option is given). |
| 393 | |
| 394 | If all operations complete successfully then certificate is considered valid. If |
| 395 | any operation fails then the certificate is not valid. |
| 396 | |
| 397 | =head1 DIAGNOSTICS |
| 398 | |
| 399 | When a verify operation fails the output messages can be somewhat cryptic. The |
| 400 | general form of the error message is: |
| 401 | |
| 402 | server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit) |
| 403 | error 24 at 1 depth lookup:invalid CA certificate |
| 404 | |
| 405 | The first line contains the name of the certificate being verified followed by |
| 406 | the subject name of the certificate. The second line contains the error number |
| 407 | and the depth. The depth is number of the certificate being verified when a |
| 408 | problem was detected starting with zero for the certificate being verified itself |
| 409 | then 1 for the CA that signed the certificate and so on. Finally a text version |
| 410 | of the error number is presented. |
| 411 | |
| 412 | A partial list of the error codes and messages is shown below, this also |
| 413 | includes the name of the error code as defined in the header file x509_vfy.h |
| 414 | Some of the error codes are defined but never returned: these are described |
| 415 | as "unused". |
| 416 | |
| 417 | =over 4 |
| 418 | |
| 419 | =item B<X509_V_OK> |
| 420 | |
| 421 | The operation was successful. |
| 422 | |
| 423 | =item B<X509_V_ERR_UNSPECIFIED> |
| 424 | |
| 425 | Unspecified error; should not happen. |
| 426 | |
| 427 | =item B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT> |
| 428 | |
| 429 | The issuer certificate of a looked up certificate could not be found. This |
| 430 | normally means the list of trusted certificates is not complete. |
| 431 | |
| 432 | =item B<X509_V_ERR_UNABLE_TO_GET_CRL> |
| 433 | |
| 434 | The CRL of a certificate could not be found. |
| 435 | |
| 436 | =item B<X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE> |
| 437 | |
| 438 | The certificate signature could not be decrypted. This means that the |
| 439 | actual signature value could not be determined rather than it not matching |
| 440 | the expected value, this is only meaningful for RSA keys. |
| 441 | |
| 442 | =item B<X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE> |
| 443 | |
| 444 | The CRL signature could not be decrypted: this means that the actual |
| 445 | signature value could not be determined rather than it not matching the |
| 446 | expected value. Unused. |
| 447 | |
| 448 | =item B<X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY> |
| 449 | |
| 450 | The public key in the certificate SubjectPublicKeyInfo could not be read. |
| 451 | |
| 452 | =item B<X509_V_ERR_CERT_SIGNATURE_FAILURE> |
| 453 | |
| 454 | The signature of the certificate is invalid. |
| 455 | |
| 456 | =item B<X509_V_ERR_CRL_SIGNATURE_FAILURE> |
| 457 | |
| 458 | The signature of the certificate is invalid. |
| 459 | |
| 460 | =item B<X509_V_ERR_CERT_NOT_YET_VALID> |
| 461 | |
| 462 | The certificate is not yet valid: the notBefore date is after the |
| 463 | current time. |
| 464 | |
| 465 | =item B<X509_V_ERR_CERT_HAS_EXPIRED> |
| 466 | |
| 467 | The certificate has expired: that is the notAfter date is before the |
| 468 | current time. |
| 469 | |
| 470 | =item B<X509_V_ERR_CRL_NOT_YET_VALID> |
| 471 | |
| 472 | The CRL is not yet valid. |
| 473 | |
| 474 | =item B<X509_V_ERR_CRL_HAS_EXPIRED> |
| 475 | |
| 476 | The CRL has expired. |
| 477 | |
| 478 | =item B<X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD> |
| 479 | |
| 480 | The certificate notBefore field contains an invalid time. |
| 481 | |
| 482 | =item B<X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD> |
| 483 | |
| 484 | The certificate notAfter field contains an invalid time. |
| 485 | |
| 486 | =item B<X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD> |
| 487 | |
| 488 | The CRL lastUpdate field contains an invalid time. |
| 489 | |
| 490 | =item B<X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD> |
| 491 | |
| 492 | The CRL nextUpdate field contains an invalid time. |
| 493 | |
| 494 | =item B<X509_V_ERR_OUT_OF_MEM> |
| 495 | |
| 496 | An error occurred trying to allocate memory. This should never happen. |
| 497 | |
| 498 | =item B<X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT> |
| 499 | |
| 500 | The passed certificate is self-signed and the same certificate cannot |
| 501 | be found in the list of trusted certificates. |
| 502 | |
| 503 | =item B<X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN> |
| 504 | |
| 505 | The certificate chain could be built up using the untrusted certificates |
| 506 | but the root could not be found locally. |
| 507 | |
| 508 | =item B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY> |
| 509 | |
| 510 | The issuer certificate could not be found: this occurs if the issuer |
| 511 | certificate of an untrusted certificate cannot be found. |
| 512 | |
| 513 | =item B<X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE> |
| 514 | |
| 515 | No signatures could be verified because the chain contains only one |
| 516 | certificate and it is not self signed. |
| 517 | |
| 518 | =item B<X509_V_ERR_CERT_CHAIN_TOO_LONG> |
| 519 | |
| 520 | The certificate chain length is greater than the supplied maximum |
| 521 | depth. Unused. |
| 522 | |
| 523 | =item B<X509_V_ERR_CERT_REVOKED> |
| 524 | |
| 525 | The certificate has been revoked. |
| 526 | |
| 527 | =item B<X509_V_ERR_INVALID_CA> |
| 528 | |
| 529 | A CA certificate is invalid. Either it is not a CA or its extensions |
| 530 | are not consistent with the supplied purpose. |
| 531 | |
| 532 | =item B<X509_V_ERR_PATH_LENGTH_EXCEEDED> |
| 533 | |
| 534 | The basicConstraints pathlength parameter has been exceeded. |
| 535 | |
| 536 | =item B<X509_V_ERR_INVALID_PURPOSE> |
| 537 | |
| 538 | The supplied certificate cannot be used for the specified purpose. |
| 539 | |
| 540 | =item B<X509_V_ERR_CERT_UNTRUSTED> |
| 541 | |
| 542 | The root CA is not marked as trusted for the specified purpose. |
| 543 | |
| 544 | =item B<X509_V_ERR_CERT_REJECTED> |
| 545 | |
| 546 | The root CA is marked to reject the specified purpose. |
| 547 | |
| 548 | =item B<X509_V_ERR_SUBJECT_ISSUER_MISMATCH> |
| 549 | |
| 550 | Not used as of OpenSSL 1.1.0 as a result of the deprecation of the |
| 551 | B<-issuer_checks> option. |
| 552 | |
| 553 | =item B<X509_V_ERR_AKID_SKID_MISMATCH> |
| 554 | |
| 555 | Not used as of OpenSSL 1.1.0 as a result of the deprecation of the |
| 556 | B<-issuer_checks> option. |
| 557 | |
| 558 | =item B<X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH> |
| 559 | |
| 560 | Not used as of OpenSSL 1.1.0 as a result of the deprecation of the |
| 561 | B<-issuer_checks> option. |
| 562 | |
| 563 | =item B<X509_V_ERR_KEYUSAGE_NO_CERTSIGN> |
| 564 | |
| 565 | Not used as of OpenSSL 1.1.0 as a result of the deprecation of the |
| 566 | B<-issuer_checks> option. |
| 567 | |
| 568 | =item B<X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER> |
| 569 | |
| 570 | Unable to get CRL issuer certificate. |
| 571 | |
| 572 | =item B<X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION> |
| 573 | |
| 574 | Unhandled critical extension. |
| 575 | |
| 576 | =item B<X509_V_ERR_KEYUSAGE_NO_CRL_SIGN> |
| 577 | |
| 578 | Key usage does not include CRL signing. |
| 579 | |
| 580 | =item B<X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION> |
| 581 | |
| 582 | Unhandled critical CRL extension. |
| 583 | |
| 584 | =item B<X509_V_ERR_INVALID_NON_CA> |
| 585 | |
| 586 | Invalid non-CA certificate has CA markings. |
| 587 | |
| 588 | =item B<X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED> |
| 589 | |
| 590 | Proxy path length constraint exceeded. |
| 591 | |
| 592 | =item B<X509_V_ERR_PROXY_SUBJECT_INVALID> |
| 593 | |
| 594 | Proxy certificate subject is invalid. It MUST be the same as the issuer |
| 595 | with a single CN component added. |
| 596 | |
| 597 | =item B<X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE> |
| 598 | |
| 599 | Key usage does not include digital signature. |
| 600 | |
| 601 | =item B<X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED> |
| 602 | |
| 603 | Proxy certificates not allowed, please use B<-allow_proxy_certs>. |
| 604 | |
| 605 | =item B<X509_V_ERR_INVALID_EXTENSION> |
| 606 | |
| 607 | Invalid or inconsistent certificate extension. |
| 608 | |
| 609 | =item B<X509_V_ERR_INVALID_POLICY_EXTENSION> |
| 610 | |
| 611 | Invalid or inconsistent certificate policy extension. |
| 612 | |
| 613 | =item B<X509_V_ERR_NO_EXPLICIT_POLICY> |
| 614 | |
| 615 | No explicit policy. |
| 616 | |
| 617 | =item B<X509_V_ERR_DIFFERENT_CRL_SCOPE> |
| 618 | |
| 619 | Different CRL scope. |
| 620 | |
| 621 | =item B<X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE> |
| 622 | |
| 623 | Unsupported extension feature. |
| 624 | |
| 625 | =item B<X509_V_ERR_UNNESTED_RESOURCE> |
| 626 | |
| 627 | RFC 3779 resource not subset of parent's resources. |
| 628 | |
| 629 | =item B<X509_V_ERR_PERMITTED_VIOLATION> |
| 630 | |
| 631 | Permitted subtree violation. |
| 632 | |
| 633 | =item B<X509_V_ERR_EXCLUDED_VIOLATION> |
| 634 | |
| 635 | Excluded subtree violation. |
| 636 | |
| 637 | =item B<X509_V_ERR_SUBTREE_MINMAX> |
| 638 | |
| 639 | Name constraints minimum and maximum not supported. |
| 640 | |
| 641 | =item B<X509_V_ERR_APPLICATION_VERIFICATION> |
| 642 | |
| 643 | Application verification failure. Unused. |
| 644 | |
| 645 | =item B<X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE> |
| 646 | |
| 647 | Unsupported name constraint type. |
| 648 | |
| 649 | =item B<X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX> |
| 650 | |
| 651 | Unsupported or invalid name constraint syntax. |
| 652 | |
| 653 | =item B<X509_V_ERR_UNSUPPORTED_NAME_SYNTAX> |
| 654 | |
| 655 | Unsupported or invalid name syntax. |
| 656 | |
| 657 | =item B<X509_V_ERR_CRL_PATH_VALIDATION_ERROR> |
| 658 | |
| 659 | CRL path validation error. |
| 660 | |
| 661 | =item B<X509_V_ERR_PATH_LOOP> |
| 662 | |
| 663 | Path loop. |
| 664 | |
| 665 | =item B<X509_V_ERR_SUITE_B_INVALID_VERSION> |
| 666 | |
| 667 | Suite B: certificate version invalid. |
| 668 | |
| 669 | =item B<X509_V_ERR_SUITE_B_INVALID_ALGORITHM> |
| 670 | |
| 671 | Suite B: invalid public key algorithm. |
| 672 | |
| 673 | =item B<X509_V_ERR_SUITE_B_INVALID_CURVE> |
| 674 | |
| 675 | Suite B: invalid ECC curve. |
| 676 | |
| 677 | =item B<X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM> |
| 678 | |
| 679 | Suite B: invalid signature algorithm. |
| 680 | |
| 681 | =item B<X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED> |
| 682 | |
| 683 | Suite B: curve not allowed for this LOS. |
| 684 | |
| 685 | =item B<X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256> |
| 686 | |
| 687 | Suite B: cannot sign P-384 with P-256. |
| 688 | |
| 689 | =item B<X509_V_ERR_HOSTNAME_MISMATCH> |
| 690 | |
| 691 | Hostname mismatch. |
| 692 | |
| 693 | =item B<X509_V_ERR_EMAIL_MISMATCH> |
| 694 | |
| 695 | Email address mismatch. |
| 696 | |
| 697 | =item B<X509_V_ERR_IP_ADDRESS_MISMATCH> |
| 698 | |
| 699 | IP address mismatch. |
| 700 | |
| 701 | =item B<X509_V_ERR_DANE_NO_MATCH> |
| 702 | |
| 703 | DANE TLSA authentication is enabled, but no TLSA records matched the |
| 704 | certificate chain. |
| 705 | This error is only possible in L<s_client(1)>. |
| 706 | |
| 707 | =item B<X509_V_ERR_EE_KEY_TOO_SMALL> |
| 708 | |
| 709 | EE certificate key too weak. |
| 710 | |
| 711 | =item B<X509_ERR_CA_KEY_TOO_SMALL> |
| 712 | |
| 713 | CA certificate key too weak. |
| 714 | |
| 715 | =item B<X509_ERR_CA_MD_TOO_WEAK> |
| 716 | |
| 717 | CA signature digest algorithm too weak. |
| 718 | |
| 719 | =item B<X509_V_ERR_INVALID_CALL> |
| 720 | |
| 721 | nvalid certificate verification context. |
| 722 | |
| 723 | =item B<X509_V_ERR_STORE_LOOKUP> |
| 724 | |
| 725 | Issuer certificate lookup error. |
| 726 | |
| 727 | =item B<X509_V_ERR_NO_VALID_SCTS> |
| 728 | |
| 729 | Certificate Transparency required, but no valid SCTs found. |
| 730 | |
| 731 | =item B<X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION> |
| 732 | |
| 733 | Proxy subject name violation. |
| 734 | |
| 735 | =item B<X509_V_ERR_OCSP_VERIFY_NEEDED> |
| 736 | |
| 737 | Returned by the verify callback to indicate an OCSP verification is needed. |
| 738 | |
| 739 | =item B<X509_V_ERR_OCSP_VERIFY_FAILED> |
| 740 | |
| 741 | Returned by the verify callback to indicate OCSP verification failed. |
| 742 | |
| 743 | =item B<X509_V_ERR_OCSP_CERT_UNKNOWN> |
| 744 | |
| 745 | Returned by the verify callback to indicate that the certificate is not recognized |
| 746 | by the OCSP responder. |
| 747 | |
| 748 | =back |
| 749 | |
| 750 | =head1 BUGS |
| 751 | |
| 752 | Although the issuer checks are a considerable improvement over the old |
| 753 | technique they still suffer from limitations in the underlying X509_LOOKUP |
| 754 | API. One consequence of this is that trusted certificates with matching |
| 755 | subject name must either appear in a file (as specified by the B<-CAfile> |
| 756 | option) or a directory (as specified by B<-CApath>). If they occur in |
| 757 | both then only the certificates in the file will be recognised. |
| 758 | |
| 759 | Previous versions of OpenSSL assume certificates with matching subject |
| 760 | name are identical and mishandled them. |
| 761 | |
| 762 | Previous versions of this documentation swapped the meaning of the |
| 763 | B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT> and |
| 764 | B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY> error codes. |
| 765 | |
| 766 | =head1 SEE ALSO |
| 767 | |
| 768 | L<x509(1)> |
| 769 | |
| 770 | =head1 HISTORY |
| 771 | |
| 772 | The B<-show_chain> option was added in OpenSSL 1.1.0. |
| 773 | |
| 774 | The B<-issuer_checks> option is deprecated as of OpenSSL 1.1.0 and |
| 775 | is silently ignored. |
| 776 | |
| 777 | =head1 COPYRIGHT |
| 778 | |
| 779 | Copyright 2000-2020 The OpenSSL Project Authors. All Rights Reserved. |
| 780 | |
| 781 | Licensed under the OpenSSL license (the "License"). You may not use |
| 782 | this file except in compliance with the License. You can obtain a copy |
| 783 | in the file LICENSE in the source distribution or at |
| 784 | L<https://www.openssl.org/source/license.html>. |
| 785 | |
| 786 | =cut |