| =pod |
| |
| =head1 NAME |
| |
| verify - Utility to verify certificates |
| |
| =head1 SYNOPSIS |
| |
| B<openssl> B<verify> |
| [B<-help>] |
| [B<-CAfile file>] |
| [B<-CApath directory>] |
| [B<-no-CAfile>] |
| [B<-no-CApath>] |
| [B<-allow_proxy_certs>] |
| [B<-attime timestamp>] |
| [B<-check_ss_sig>] |
| [B<-CRLfile file>] |
| [B<-crl_download>] |
| [B<-crl_check>] |
| [B<-crl_check_all>] |
| [B<-engine id>] |
| [B<-explicit_policy>] |
| [B<-extended_crl>] |
| [B<-ignore_critical>] |
| [B<-inhibit_any>] |
| [B<-inhibit_map>] |
| [B<-nameopt option>] |
| [B<-no_check_time>] |
| [B<-partial_chain>] |
| [B<-policy arg>] |
| [B<-policy_check>] |
| [B<-policy_print>] |
| [B<-purpose purpose>] |
| [B<-suiteB_128>] |
| [B<-suiteB_128_only>] |
| [B<-suiteB_192>] |
| [B<-trusted_first>] |
| [B<-no_alt_chains>] |
| [B<-untrusted file>] |
| [B<-trusted file>] |
| [B<-use_deltas>] |
| [B<-verbose>] |
| [B<-auth_level level>] |
| [B<-verify_depth num>] |
| [B<-verify_email email>] |
| [B<-verify_hostname hostname>] |
| [B<-verify_ip ip>] |
| [B<-verify_name name>] |
| [B<-x509_strict>] |
| [B<-show_chain>] |
| [B<->] |
| [certificates] |
| |
| =head1 DESCRIPTION |
| |
| The B<verify> command verifies certificate chains. |
| |
| =head1 OPTIONS |
| |
| =over 4 |
| |
| =item B<-help> |
| |
| Print out a usage message. |
| |
| =item B<-CAfile file> |
| |
| A B<file> of trusted certificates. |
| The file should contain one or more certificates in PEM format. |
| |
| =item B<-CApath directory> |
| |
| A directory of trusted certificates. The certificates should have names |
| of the form: hash.0 or have symbolic links to them of this |
| form ("hash" is the hashed certificate subject name: see the B<-hash> option |
| of the B<x509> utility). Under Unix the B<c_rehash> script will automatically |
| create symbolic links to a directory of certificates. |
| |
| =item B<-no-CAfile> |
| |
| Do not load the trusted CA certificates from the default file location |
| |
| =item B<-no-CApath> |
| |
| Do not load the trusted CA certificates from the default directory location |
| |
| =item B<-allow_proxy_certs> |
| |
| Allow the verification of proxy certificates |
| |
| =item B<-attime timestamp> |
| |
| Perform validation checks using time specified by B<timestamp> and not |
| current system time. B<timestamp> is the number of seconds since |
| 01.01.1970 (UNIX time). |
| |
| =item B<-check_ss_sig> |
| |
| Verify the signature on the self-signed root CA. This is disabled by default |
| because it doesn't add any security. |
| |
| =item B<-CRLfile file> |
| |
| The B<file> should contain one or more CRLs in PEM format. |
| This option can be specified more than once to include CRLs from multiple |
| B<files>. |
| |
| =item B<-crl_download> |
| |
| Attempt to download CRL information for this certificate. |
| |
| =item B<-crl_check> |
| |
| Checks end entity certificate validity by attempting to look up a valid CRL. |
| If a valid CRL cannot be found an error occurs. |
| |
| =item B<-crl_check_all> |
| |
| Checks the validity of B<all> certificates in the chain by attempting |
| to look up valid CRLs. |
| |
| =item B<-engine id> |
| |
| Specifying an engine B<id> will cause L<verify(1)> to attempt to load the |
| specified engine. |
| The engine will then be set as the default for all its supported algorithms. |
| If you want to load certificates or CRLs that require engine support via any of |
| the B<-trusted>, B<-untrusted> or B<-CRLfile> options, the B<-engine> option |
| must be specified before those options. |
| |
| =item B<-explicit_policy> |
| |
| Set policy variable require-explicit-policy (see RFC5280). |
| |
| =item B<-extended_crl> |
| |
| Enable extended CRL features such as indirect CRLs and alternate CRL |
| signing keys. |
| |
| =item B<-ignore_critical> |
| |
| Normally if an unhandled critical extension is present which is not |
| supported by OpenSSL the certificate is rejected (as required by RFC5280). |
| If this option is set critical extensions are ignored. |
| |
| =item B<-inhibit_any> |
| |
| Set policy variable inhibit-any-policy (see RFC5280). |
| |
| =item B<-inhibit_map> |
| |
| Set policy variable inhibit-policy-mapping (see RFC5280). |
| |
| =item B<-nameopt option> |
| |
| option which determines how the subject or issuer names are displayed. The |
| B<option> argument can be a single option or multiple options separated by |
| commas. Alternatively the B<-nameopt> switch may be used more than once to |
| set multiple options. See the L<x509(1)> manual page for details. |
| |
| =item B<-no_check_time> |
| |
| This option suppresses checking the validity period of certificates and CRLs |
| against the current time. If option B<-attime timestamp> is used to specify |
| a verification time, the check is not suppressed. |
| |
| =item B<-partial_chain> |
| |
| Allow verification to succeed even if a I<complete> chain cannot be built to a |
| self-signed trust-anchor, provided it is possible to construct a chain to a |
| trusted certificate that might not be self-signed. |
| |
| =item B<-policy arg> |
| |
| Enable policy processing and add B<arg> to the user-initial-policy-set (see |
| RFC5280). The policy B<arg> can be an object name an OID in numeric form. |
| This argument can appear more than once. |
| |
| =item B<-policy_check> |
| |
| Enables certificate policy processing. |
| |
| =item B<-policy_print> |
| |
| Print out diagnostics related to policy processing. |
| |
| =item B<-purpose purpose> |
| |
| The intended use for the certificate. If this option is not specified, |
| B<verify> will not consider certificate purpose during chain verification. |
| Currently accepted uses are B<sslclient>, B<sslserver>, B<nssslserver>, |
| B<smimesign>, B<smimeencrypt>. See the B<VERIFY OPERATION> section for more |
| information. |
| |
| =item B<-suiteB_128_only>, B<-suiteB_128>, B<-suiteB_192> |
| |
| enable the Suite B mode operation at 128 bit Level of Security, 128 bit or |
| 192 bit, or only 192 bit Level of Security respectively. |
| See RFC6460 for details. In particular the supported signature algorithms are |
| reduced to support only ECDSA and SHA256 or SHA384 and only the elliptic curves |
| P-256 and P-384. |
| |
| =item B<-trusted_first> |
| |
| When constructing the certificate chain, use the trusted certificates specified |
| via B<-CAfile>, B<-CApath> or B<-trusted> before any certificates specified via |
| B<-untrusted>. |
| This can be useful in environments with Bridge or Cross-Certified CAs. |
| As of OpenSSL 1.1.0 this option is on by default and cannot be disabled. |
| |
| =item B<-no_alt_chains> |
| |
| By default, unless B<-trusted_first> is specified, when building a certificate |
| chain, if the first certificate chain found is not trusted, then OpenSSL will |
| attempt to replace untrusted issuer certificates with certificates from the |
| trust store to see if an alternative chain can be found that is trusted. |
| As of OpenSSL 1.1.0, with B<-trusted_first> always on, this option has no |
| effect. |
| |
| =item B<-untrusted file> |
| |
| A B<file> of additional untrusted certificates (intermediate issuer CAs) used |
| to construct a certificate chain from the subject certificate to a trust-anchor. |
| The B<file> should contain one or more certificates in PEM format. |
| This option can be specified more than once to include untrusted certificates |
| from multiple B<files>. |
| |
| =item B<-trusted file> |
| |
| A B<file> of trusted certificates, which must be self-signed, unless the |
| B<-partial_chain> option is specified. |
| The B<file> contains one or more certificates in PEM format. |
| With this option, no additional (e.g., default) certificate lists are |
| consulted. |
| That is, the only trust-anchors are those listed in B<file>. |
| This option can be specified more than once to include trusted certificates |
| from multiple B<files>. |
| This option implies the B<-no-CAfile> and B<-no-CApath> options. |
| This option cannot be used in combination with either of the B<-CAfile> or |
| B<-CApath> options. |
| |
| =item B<-use_deltas> |
| |
| Enable support for delta CRLs. |
| |
| =item B<-verbose> |
| |
| Print extra information about the operations being performed. |
| |
| =item B<-auth_level level> |
| |
| Set the certificate chain authentication security level to B<level>. |
| The authentication security level determines the acceptable signature and |
| public key strength when verifying certificate chains. |
| For a certificate chain to validate, the public keys of all the certificates |
| must meet the specified security B<level>. |
| The signature algorithm security level is enforced for all the certificates in |
| the chain except for the chain's I<trust anchor>, which is either directly |
| trusted or validated by means other than its signature. |
| See L<SSL_CTX_set_security_level(3)> for the definitions of the available |
| levels. |
| The default security level is -1, or "not set". |
| At security level 0 or lower all algorithms are acceptable. |
| Security level 1 requires at least 80-bit-equivalent security and is broadly |
| interoperable, though it will, for example, reject MD5 signatures or RSA keys |
| shorter than 1024 bits. |
| |
| =item B<-verify_depth num> |
| |
| Limit the certificate chain to B<num> intermediate CA certificates. |
| A maximal depth chain can have up to B<num+2> certificates, since neither the |
| end-entity certificate nor the trust-anchor certificate count against the |
| B<-verify_depth> limit. |
| |
| =item B<-verify_email email> |
| |
| Verify if the B<email> matches the email address in Subject Alternative Name or |
| the email in the subject Distinguished Name. |
| |
| =item B<-verify_hostname hostname> |
| |
| Verify if the B<hostname> matches DNS name in Subject Alternative Name or |
| Common Name in the subject certificate. |
| |
| =item B<-verify_ip ip> |
| |
| Verify if the B<ip> matches the IP address in Subject Alternative Name of |
| the subject certificate. |
| |
| =item B<-verify_name name> |
| |
| Use default verification policies like trust model and required certificate |
| policies identified by B<name>. |
| The trust model determines which auxiliary trust or reject OIDs are applicable |
| to verifying the given certificate chain. |
| See the B<-addtrust> and B<-addreject> options of the L<x509(1)> command-line |
| utility. |
| Supported policy names include: B<default>, B<pkcs7>, B<smime_sign>, |
| B<ssl_client>, B<ssl_server>. |
| These mimics the combinations of purpose and trust settings used in SSL, CMS |
| and S/MIME. |
| As of OpenSSL 1.1.0, the trust model is inferred from the purpose when not |
| specified, so the B<-verify_name> options are functionally equivalent to the |
| corresponding B<-purpose> settings. |
| |
| =item B<-x509_strict> |
| |
| For strict X.509 compliance, disable non-compliant workarounds for broken |
| certificates. |
| |
| =item B<-show_chain> |
| |
| Display information about the certificate chain that has been built (if |
| successful). Certificates in the chain that came from the untrusted list will be |
| flagged as "untrusted". |
| |
| =item B<-> |
| |
| Indicates the last option. All arguments following this are assumed to be |
| certificate files. This is useful if the first certificate filename begins |
| with a B<->. |
| |
| =item B<certificates> |
| |
| One or more certificates to verify. If no certificates are given, B<verify> |
| will attempt to read a certificate from standard input. Certificates must be |
| in PEM format. |
| |
| =back |
| |
| =head1 VERIFY OPERATION |
| |
| The B<verify> program uses the same functions as the internal SSL and S/MIME |
| verification, therefore this description applies to these verify operations |
| too. |
| |
| There is one crucial difference between the verify operations performed |
| by the B<verify> program: wherever possible an attempt is made to continue |
| after an error whereas normally the verify operation would halt on the |
| first error. This allows all the problems with a certificate chain to be |
| determined. |
| |
| The verify operation consists of a number of separate steps. |
| |
| Firstly a certificate chain is built up starting from the supplied certificate |
| and ending in the root CA. |
| It is an error if the whole chain cannot be built up. |
| The chain is built up by looking up the issuers certificate of the current |
| certificate. |
| If a certificate is found which is its own issuer it is assumed to be the root |
| CA. |
| |
| The process of 'looking up the issuers certificate' itself involves a number of |
| steps. |
| After all certificates whose subject name matches the issuer name of the current |
| certificate are subject to further tests. |
| The relevant authority key identifier components of the current certificate (if |
| present) must match the subject key identifier (if present) and issuer and |
| serial number of the candidate issuer, in addition the keyUsage extension of |
| the candidate issuer (if present) must permit certificate signing. |
| |
| The lookup first looks in the list of untrusted certificates and if no match |
| is found the remaining lookups are from the trusted certificates. The root CA |
| is always looked up in the trusted certificate list: if the certificate to |
| verify is a root certificate then an exact match must be found in the trusted |
| list. |
| |
| The second operation is to check every untrusted certificate's extensions for |
| consistency with the supplied purpose. If the B<-purpose> option is not included |
| then no checks are done. The supplied or "leaf" certificate must have extensions |
| compatible with the supplied purpose and all other certificates must also be valid |
| CA certificates. The precise extensions required are described in more detail in |
| the B<CERTIFICATE EXTENSIONS> section of the B<x509> utility. |
| |
| The third operation is to check the trust settings on the root CA. The root CA |
| should be trusted for the supplied purpose. |
| For compatibility with previous versions of OpenSSL, a certificate with no |
| trust settings is considered to be valid for all purposes. |
| |
| The final operation is to check the validity of the certificate chain. The validity |
| period is checked against the current system time and the notBefore and notAfter |
| dates in the certificate. The certificate signatures are also checked at this |
| point. |
| |
| If all operations complete successfully then certificate is considered valid. If |
| any operation fails then the certificate is not valid. |
| |
| =head1 DIAGNOSTICS |
| |
| When a verify operation fails the output messages can be somewhat cryptic. The |
| general form of the error message is: |
| |
| server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit) |
| error 24 at 1 depth lookup:invalid CA certificate |
| |
| The first line contains the name of the certificate being verified followed by |
| the subject name of the certificate. The second line contains the error number |
| and the depth. The depth is number of the certificate being verified when a |
| problem was detected starting with zero for the certificate being verified itself |
| then 1 for the CA that signed the certificate and so on. Finally a text version |
| of the error number is presented. |
| |
| A partial list of the error codes and messages is shown below, this also |
| includes the name of the error code as defined in the header file x509_vfy.h |
| Some of the error codes are defined but never returned: these are described |
| as "unused". |
| |
| =over 4 |
| |
| =item B<X509_V_OK> |
| |
| The operation was successful. |
| |
| =item B<X509_V_ERR_UNSPECIFIED> |
| |
| Unspecified error; should not happen. |
| |
| =item B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT> |
| |
| The issuer certificate of a looked up certificate could not be found. This |
| normally means the list of trusted certificates is not complete. |
| |
| =item B<X509_V_ERR_UNABLE_TO_GET_CRL> |
| |
| The CRL of a certificate could not be found. |
| |
| =item B<X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE> |
| |
| The certificate signature could not be decrypted. This means that the actual signature value |
| could not be determined rather than it not matching the expected value, this is only |
| meaningful for RSA keys. |
| |
| =item B<X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE> |
| |
| The CRL signature could not be decrypted: this means that the actual signature value |
| could not be determined rather than it not matching the expected value. Unused. |
| |
| =item B<X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY> |
| |
| The public key in the certificate SubjectPublicKeyInfo could not be read. |
| |
| =item B<X509_V_ERR_CERT_SIGNATURE_FAILURE> |
| |
| The signature of the certificate is invalid. |
| |
| =item B<X509_V_ERR_CRL_SIGNATURE_FAILURE> |
| |
| The signature of the certificate is invalid. |
| |
| =item B<X509_V_ERR_CERT_NOT_YET_VALID> |
| |
| The certificate is not yet valid: the notBefore date is after the current time. |
| |
| =item B<X509_V_ERR_CERT_HAS_EXPIRED> |
| |
| The certificate has expired: that is the notAfter date is before the current time. |
| |
| =item B<X509_V_ERR_CRL_NOT_YET_VALID> |
| |
| The CRL is not yet valid. |
| |
| =item B<X509_V_ERR_CRL_HAS_EXPIRED> |
| |
| The CRL has expired. |
| |
| =item B<X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD> |
| |
| The certificate notBefore field contains an invalid time. |
| |
| =item B<X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD> |
| |
| The certificate notAfter field contains an invalid time. |
| |
| =item B<X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD> |
| |
| The CRL lastUpdate field contains an invalid time. |
| |
| =item B<X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD> |
| |
| The CRL nextUpdate field contains an invalid time. |
| |
| =item B<X509_V_ERR_OUT_OF_MEM> |
| |
| An error occurred trying to allocate memory. This should never happen. |
| |
| =item B<X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT> |
| |
| The passed certificate is self-signed and the same certificate cannot be found in the list of |
| trusted certificates. |
| |
| =item B<X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN> |
| |
| The certificate chain could be built up using the untrusted certificates but the root could not |
| be found locally. |
| |
| =item B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY> |
| |
| The issuer certificate could not be found: this occurs if the issuer |
| certificate of an untrusted certificate cannot be found. |
| |
| =item B<X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE> |
| |
| No signatures could be verified because the chain contains only one certificate and it is not |
| self signed. |
| |
| =item B<X509_V_ERR_CERT_CHAIN_TOO_LONG> |
| |
| The certificate chain length is greater than the supplied maximum depth. Unused. |
| |
| =item B<X509_V_ERR_CERT_REVOKED> |
| |
| The certificate has been revoked. |
| |
| =item B<X509_V_ERR_INVALID_CA> |
| |
| A CA certificate is invalid. Either it is not a CA or its extensions are not consistent |
| with the supplied purpose. |
| |
| =item B<X509_V_ERR_PATH_LENGTH_EXCEEDED> |
| |
| The basicConstraints pathlength parameter has been exceeded. |
| |
| =item B<X509_V_ERR_INVALID_PURPOSE> |
| |
| The supplied certificate cannot be used for the specified purpose. |
| |
| =item B<X509_V_ERR_CERT_UNTRUSTED> |
| |
| the root CA is not marked as trusted for the specified purpose. |
| |
| =item B<X509_V_ERR_CERT_REJECTED> |
| |
| The root CA is marked to reject the specified purpose. |
| |
| =item B<X509_V_ERR_SUBJECT_ISSUER_MISMATCH> |
| |
| not used as of OpenSSL 1.1.0 as a result of the deprecation of the |
| B<-issuer_checks> option. |
| |
| =item B<X509_V_ERR_AKID_SKID_MISMATCH> |
| |
| Not used as of OpenSSL 1.1.0 as a result of the deprecation of the |
| B<-issuer_checks> option. |
| |
| =item B<X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH> |
| |
| Not used as of OpenSSL 1.1.0 as a result of the deprecation of the |
| B<-issuer_checks> option. |
| |
| =item B<X509_V_ERR_KEYUSAGE_NO_CERTSIGN> |
| |
| Not used as of OpenSSL 1.1.0 as a result of the deprecation of the |
| B<-issuer_checks> option. |
| |
| =item B<X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER> |
| |
| Unable to get CRL issuer certificate. |
| |
| =item B<X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION> |
| |
| Unhandled critical extension. |
| |
| =item B<X509_V_ERR_KEYUSAGE_NO_CRL_SIGN> |
| |
| Key usage does not include CRL signing. |
| |
| =item B<X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION> |
| |
| Unhandled critical CRL extension. |
| |
| =item B<X509_V_ERR_INVALID_NON_CA> |
| |
| Invalid non-CA certificate has CA markings. |
| |
| =item B<X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED> |
| |
| Proxy path length constraint exceeded. |
| |
| =item B<X509_V_ERR_PROXY_SUBJECT_INVALID> |
| |
| Proxy certificate subject is invalid. It MUST be the same as the issuer |
| with a single CN component added. |
| |
| =item B<X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE> |
| |
| Key usage does not include digital signature. |
| |
| =item B<X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED> |
| |
| Proxy certificates not allowed, please use B<-allow_proxy_certs>. |
| |
| =item B<X509_V_ERR_INVALID_EXTENSION> |
| |
| Invalid or inconsistent certificate extension. |
| |
| =item B<X509_V_ERR_INVALID_POLICY_EXTENSION> |
| |
| Invalid or inconsistent certificate policy extension. |
| |
| =item B<X509_V_ERR_NO_EXPLICIT_POLICY> |
| |
| No explicit policy. |
| |
| =item B<X509_V_ERR_DIFFERENT_CRL_SCOPE> |
| |
| Different CRL scope. |
| |
| =item B<X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE> |
| |
| Unsupported extension feature. |
| |
| =item B<X509_V_ERR_UNNESTED_RESOURCE> |
| |
| RFC 3779 resource not subset of parent's resources. |
| |
| =item B<X509_V_ERR_PERMITTED_VIOLATION> |
| |
| Permitted subtree violation. |
| |
| =item B<X509_V_ERR_EXCLUDED_VIOLATION> |
| |
| Excluded subtree violation. |
| |
| =item B<X509_V_ERR_SUBTREE_MINMAX> |
| |
| Name constraints minimum and maximum not supported. |
| |
| =item B<X509_V_ERR_APPLICATION_VERIFICATION> |
| |
| Application verification failure. Unused. |
| |
| =item B<X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE> |
| |
| Unsupported name constraint type. |
| |
| =item B<X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX> |
| |
| Unsupported or invalid name constraint syntax. |
| |
| =item B<X509_V_ERR_UNSUPPORTED_NAME_SYNTAX> |
| |
| Unsupported or invalid name syntax. |
| |
| =item B<X509_V_ERR_CRL_PATH_VALIDATION_ERROR> |
| |
| CRL path validation error. |
| |
| =item B<X509_V_ERR_PATH_LOOP> |
| |
| Path loop. |
| |
| =item B<X509_V_ERR_SUITE_B_INVALID_VERSION> |
| |
| Suite B: certificate version invalid. |
| |
| =item B<X509_V_ERR_SUITE_B_INVALID_ALGORITHM> |
| |
| Suite B: invalid public key algorithm. |
| |
| =item B<X509_V_ERR_SUITE_B_INVALID_CURVE> |
| |
| Suite B: invalid ECC curve. |
| |
| =item B<X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM> |
| |
| Suite B: invalid signature algorithm. |
| |
| =item B<X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED> |
| |
| Suite B: curve not allowed for this LOS. |
| |
| =item B<X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256> |
| |
| Suite B: cannot sign P-384 with P-256. |
| |
| =item B<X509_V_ERR_HOSTNAME_MISMATCH> |
| |
| Hostname mismatch. |
| |
| =item B<X509_V_ERR_EMAIL_MISMATCH> |
| |
| Email address mismatch. |
| |
| =item B<X509_V_ERR_IP_ADDRESS_MISMATCH> |
| |
| IP address mismatch. |
| |
| =item B<X509_V_ERR_DANE_NO_MATCH> |
| |
| DANE TLSA authentication is enabled, but no TLSA records matched the |
| certificate chain. |
| This error is only possible in L<s_client(1)>. |
| |
| =back |
| |
| =head1 BUGS |
| |
| Although the issuer checks are a considerable improvement over the old technique they still |
| suffer from limitations in the underlying X509_LOOKUP API. One consequence of this is that |
| trusted certificates with matching subject name must either appear in a file (as specified by the |
| B<-CAfile> option) or a directory (as specified by B<-CApath>). If they occur in both then only |
| the certificates in the file will be recognised. |
| |
| Previous versions of OpenSSL assume certificates with matching subject name are identical and |
| mishandled them. |
| |
| Previous versions of this documentation swapped the meaning of the |
| B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT> and |
| B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY> error codes. |
| |
| =head1 SEE ALSO |
| |
| L<x509(1)> |
| |
| =head1 HISTORY |
| |
| The B<-show_chain> option was first added to OpenSSL 1.1.0. |
| |
| The B<-issuer_checks> option is deprecated as of OpenSSL 1.1.0 and |
| is silently ignored. |
| |
| =head1 COPYRIGHT |
| |
| Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved. |
| |
| Licensed under the OpenSSL license (the "License"). You may not use |
| this file except in compliance with the License. You can obtain a copy |
| in the file LICENSE in the source distribution or at |
| L<https://www.openssl.org/source/license.html>. |
| |
| =cut |