1999-11-29 09:09:25 +08:00
|
|
|
=pod
|
|
|
|
|
|
|
|
=head1 NAME
|
|
|
|
|
2000-08-16 01:35:10 +08:00
|
|
|
verify - Utility to verify certificates.
|
1999-11-29 09:09:25 +08:00
|
|
|
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
|
|
|
|
B<openssl> B<verify>
|
|
|
|
[B<-CAfile file>]
|
2014-06-19 20:32:53 +08:00
|
|
|
[B<-CApath directory>]
|
2015-09-23 02:43:59 +08:00
|
|
|
[B<-no-CAfile>]
|
|
|
|
[B<-no-CApath>]
|
2014-06-19 20:32:53 +08:00
|
|
|
[B<-attime timestamp>]
|
2014-06-19 20:17:26 +08:00
|
|
|
[B<-check_ss_sig>]
|
2015-05-03 06:42:29 +08:00
|
|
|
[B<-CRLfile file>]
|
2015-06-25 19:34:38 +08:00
|
|
|
[B<-crl_download>]
|
2009-04-15 23:27:03 +08:00
|
|
|
[B<-crl_check>]
|
|
|
|
[B<-crl_check_all>]
|
2016-01-16 14:15:02 +08:00
|
|
|
[B<-engine id>]
|
2009-04-15 23:27:03 +08:00
|
|
|
[B<-explicit_policy>]
|
|
|
|
[B<-extended_crl>]
|
1999-11-29 09:09:25 +08:00
|
|
|
[B<-help>]
|
2014-06-19 20:32:53 +08:00
|
|
|
[B<-ignore_critical>]
|
|
|
|
[B<-inhibit_any>]
|
|
|
|
[B<-inhibit_map>]
|
2000-09-08 08:53:58 +08:00
|
|
|
[B<-issuer_checks>]
|
2014-06-19 20:17:26 +08:00
|
|
|
[B<-partial_chain>]
|
2014-06-19 20:32:53 +08:00
|
|
|
[B<-policy arg>]
|
|
|
|
[B<-policy_check>]
|
|
|
|
[B<-policy_print>]
|
|
|
|
[B<-purpose purpose>]
|
2014-06-19 20:17:26 +08:00
|
|
|
[B<-suiteB_128>]
|
|
|
|
[B<-suiteB_128_only>]
|
|
|
|
[B<-suiteB_192>]
|
2014-06-19 20:32:53 +08:00
|
|
|
[B<-trusted_first>]
|
2015-01-27 19:15:15 +08:00
|
|
|
[B<-no_alt_chains>]
|
2014-06-19 20:32:53 +08:00
|
|
|
[B<-untrusted file>]
|
2015-06-25 19:34:38 +08:00
|
|
|
[B<-trusted file>]
|
2014-06-19 20:32:53 +08:00
|
|
|
[B<-use_deltas>]
|
1999-11-29 09:09:25 +08:00
|
|
|
[B<-verbose>]
|
2014-06-19 20:17:26 +08:00
|
|
|
[B<-verify_depth num>]
|
|
|
|
[B<-verify_email email>]
|
|
|
|
[B<-verify_hostname hostname>]
|
|
|
|
[B<-verify_ip ip>]
|
|
|
|
[B<-verify_name name>]
|
2014-06-19 20:32:53 +08:00
|
|
|
[B<-x509_strict>]
|
2015-06-25 19:28:28 +08:00
|
|
|
[B<-show_chain>]
|
1999-11-29 09:09:25 +08:00
|
|
|
[B<->]
|
|
|
|
[certificates]
|
|
|
|
|
|
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
|
|
|
|
The B<verify> command verifies certificate chains.
|
|
|
|
|
|
|
|
=head1 COMMAND OPTIONS
|
|
|
|
|
|
|
|
=over 4
|
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-CAfile file>
|
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
A B<file> of trusted certificates.
|
|
|
|
The file should contain one or more certificates in PEM format.
|
2014-06-19 20:32:53 +08:00
|
|
|
|
1999-11-29 09:09:25 +08:00
|
|
|
=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.
|
|
|
|
|
2015-09-23 02:43:59 +08:00
|
|
|
=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
|
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-attime timestamp>
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
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).
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-check_ss_sig>
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
Verify the signature on the self-signed root CA. This is disabled by default
|
|
|
|
because it doesn't add any security.
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2015-05-03 06:42:29 +08:00
|
|
|
=item B<-CRLfile file>
|
2014-07-03 10:42:40 +08:00
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
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>.
|
|
|
|
If you want to enable an B<engine> via the B<-engine> option, that option has
|
|
|
|
to be specified before this one.
|
2014-07-03 10:42:40 +08:00
|
|
|
|
2015-06-25 19:34:38 +08:00
|
|
|
=item B<-crl_download>
|
|
|
|
|
|
|
|
Attempt to download CRL information for this certificate.
|
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-crl_check>
|
2014-06-19 01:55:03 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
Checks end entity certificate validity by attempting to look up a valid CRL.
|
|
|
|
If a valid CRL cannot be found an error occurs.
|
2014-06-19 01:55:03 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-crl_check_all>
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
Checks the validity of B<all> certificates in the chain by attempting
|
|
|
|
to look up valid CRLs.
|
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
=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.
|
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=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.
|
1999-11-29 09:09:25 +08:00
|
|
|
|
|
|
|
=item B<-help>
|
|
|
|
|
2012-12-14 21:28:49 +08:00
|
|
|
Print out a usage message.
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-ignore_critical>
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
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).
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2000-09-08 08:53:58 +08:00
|
|
|
=item B<-issuer_checks>
|
|
|
|
|
2012-12-14 21:28:49 +08:00
|
|
|
Print out diagnostics relating to searches for the issuer certificate of the
|
|
|
|
current certificate. This shows why each candidate issuer certificate was
|
|
|
|
rejected. The presence of rejection messages does not itself imply that
|
|
|
|
anything is wrong; during the normal verification process, several
|
|
|
|
rejections may take place.
|
2000-09-08 08:53:58 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-partial_chain>
|
2013-09-12 17:37:12 +08:00
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
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.
|
2013-09-12 17:37:12 +08:00
|
|
|
|
2009-04-15 23:27:03 +08:00
|
|
|
=item B<-policy arg>
|
|
|
|
|
2012-12-14 21:28:49 +08:00
|
|
|
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.
|
2009-04-15 23:27:03 +08:00
|
|
|
|
|
|
|
=item B<-policy_check>
|
|
|
|
|
|
|
|
Enables certificate policy processing.
|
|
|
|
|
|
|
|
=item B<-policy_print>
|
|
|
|
|
2012-12-14 21:28:49 +08:00
|
|
|
Print out diagnostics related to policy processing.
|
2009-04-15 23:27:03 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-purpose purpose>
|
2009-04-15 23:27:03 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
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.
|
2009-04-15 23:27:03 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-suiteB_128_only>, B<-suiteB_128>, B<-suiteB_192>
|
2009-04-15 23:27:03 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
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.
|
2009-04-15 23:27:03 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-trusted_first>
|
2009-04-15 23:27:03 +08:00
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
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.
|
2009-04-15 23:27:03 +08:00
|
|
|
|
2015-01-27 19:15:15 +08:00
|
|
|
=item B<-no_alt_chains>
|
|
|
|
|
|
|
|
When building a certificate chain, if the first certificate chain found is not
|
|
|
|
trusted, then OpenSSL will continue to check to see if an alternative chain can
|
|
|
|
be found that is trusted. With this option that behaviour is suppressed so that
|
|
|
|
only the first chain found is ever used. Using this option will force the
|
2016-01-16 14:15:02 +08:00
|
|
|
behaviour to match that of OpenSSL versions prior to 1.1.0.
|
2015-01-27 19:15:15 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-untrusted file>
|
2009-04-15 23:27:03 +08:00
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
A B<file> of additional untrusted certificates (intermediate issuer CAs) used
|
|
|
|
to constuct 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 certiificates
|
|
|
|
from multiple B<files>.
|
|
|
|
If you want to enable an B<engine> via the B<-engine> option, that option has
|
|
|
|
to be specified before this one.
|
2009-04-15 23:27:03 +08:00
|
|
|
|
2015-06-25 19:34:38 +08:00
|
|
|
=item B<-trusted file>
|
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
A B<file> of trusted certificates, which must be self-signed, unless the
|
|
|
|
B<-partial_chain> option is specified.
|
|
|
|
The B<file> contain 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.
|
|
|
|
If you want to enable an B<engine> via the B<-engine> option, that option has
|
|
|
|
to be specified before this one.
|
2015-06-25 19:34:38 +08:00
|
|
|
|
2009-04-15 23:27:03 +08:00
|
|
|
=item B<-use_deltas>
|
|
|
|
|
|
|
|
Enable support for delta CRLs.
|
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-verbose>
|
2014-06-19 20:17:26 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
Print extra information about the operations being performed.
|
2014-06-19 20:17:26 +08:00
|
|
|
|
|
|
|
=item B<-verify_depth num>
|
|
|
|
|
|
|
|
Limit the maximum depth of the certificate chain to B<num> certificates.
|
|
|
|
|
|
|
|
=item B<-verify_email email>
|
|
|
|
|
|
|
|
Verify if the B<email> matches the email address in Subject Alternative Name or
|
2014-06-20 06:45:21 +08:00
|
|
|
the email in the subject Distinguished Name.
|
2014-06-19 20:17:26 +08:00
|
|
|
|
|
|
|
=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>
|
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
Use default verification policies like trust model and required certificate
|
2014-06-19 20:17:26 +08:00
|
|
|
policies identified by B<name>.
|
2016-01-16 14:15:02 +08:00
|
|
|
Supported policy names include: B<default>, B<pkcs7>, B<smime_sign>,
|
|
|
|
B<ssl_client>, B<ssl_server>.
|
|
|
|
This checks not only the purpose of the leaf certificate, but also the
|
|
|
|
trust settings of the trusted CAs.
|
|
|
|
When in doubt, use this option rather than B<-purpose>.
|
|
|
|
The B<-verify_name> option more closely matches how certificates are checked in
|
|
|
|
e.g. SSL and S/MIME.
|
2014-06-19 20:17:26 +08:00
|
|
|
|
2014-06-19 20:32:53 +08:00
|
|
|
=item B<-x509_strict>
|
|
|
|
|
|
|
|
For strict X.509 compliance, disable non-compliant workarounds for broken
|
|
|
|
certificates.
|
|
|
|
|
2015-06-25 19:28:28 +08:00
|
|
|
=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".
|
|
|
|
|
1999-11-29 09:09:25 +08:00
|
|
|
=item B<->
|
|
|
|
|
2012-12-14 21:28:49 +08:00
|
|
|
Indicates the last option. All arguments following this are assumed to be
|
1999-11-30 10:28:42 +08:00
|
|
|
certificate files. This is useful if the first certificate filename begins
|
|
|
|
with a B<->.
|
1999-11-29 09:09:25 +08:00
|
|
|
|
|
|
|
=item B<certificates>
|
|
|
|
|
2012-12-14 21:28:49 +08:00
|
|
|
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.
|
1999-11-29 09:09:25 +08:00
|
|
|
|
|
|
|
=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
|
2016-01-16 14:15:02 +08:00
|
|
|
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.
|
|
|
|
Ater 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.
|
2000-09-08 08:53:58 +08:00
|
|
|
|
1999-11-29 09:09:25 +08:00
|
|
|
The lookup first looks in the list of untrusted certificates and if no match
|
2000-01-07 09:39:59 +08:00
|
|
|
is found the remaining lookups are from the trusted certificates. The root CA
|
1999-11-29 09:09:25 +08:00
|
|
|
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
|
1999-11-30 10:28:42 +08:00
|
|
|
the B<CERTIFICATE EXTENSIONS> section of the B<x509> utility.
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
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.
|
1999-11-29 09:09:25 +08:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
1999-11-30 10:28:42 +08:00
|
|
|
=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.
|
|
|
|
|
2016-01-16 14:15:02 +08:00
|
|
|
An partial list of the error codes and messages is shown below, this also
|
1999-11-30 10:28:42 +08:00
|
|
|
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<0 X509_V_OK: ok>
|
|
|
|
|
|
|
|
the operation was successful.
|
|
|
|
|
|
|
|
=item B<2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate>
|
|
|
|
|
2010-02-23 22:09:09 +08:00
|
|
|
the issuer certificate of a looked up certificate could not be found. This
|
|
|
|
normally means the list of trusted certificates is not complete.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
2008-01-30 16:26:59 +08:00
|
|
|
=item B<3 X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL>
|
1999-11-30 10:28:42 +08:00
|
|
|
|
2008-07-13 22:25:36 +08:00
|
|
|
the CRL of a certificate could not be found.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
=item B<4 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: unable to decrypt certificate's 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.
|
|
|
|
|
2000-01-07 09:39:59 +08:00
|
|
|
=item B<5 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: unable to decrypt CRL's signature>
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
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<6 X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: unable to decode issuer public key>
|
|
|
|
|
|
|
|
the public key in the certificate SubjectPublicKeyInfo could not be read.
|
|
|
|
|
|
|
|
=item B<7 X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure>
|
|
|
|
|
|
|
|
the signature of the certificate is invalid.
|
|
|
|
|
|
|
|
=item B<8 X509_V_ERR_CRL_SIGNATURE_FAILURE: CRL signature failure>
|
|
|
|
|
2008-07-13 22:25:36 +08:00
|
|
|
the signature of the certificate is invalid.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
=item B<9 X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid>
|
|
|
|
|
|
|
|
the certificate is not yet valid: the notBefore date is after the current time.
|
|
|
|
|
2001-10-08 16:37:24 +08:00
|
|
|
=item B<10 X509_V_ERR_CERT_HAS_EXPIRED: certificate has expired>
|
1999-11-30 10:28:42 +08:00
|
|
|
|
2001-10-08 16:37:24 +08:00
|
|
|
the certificate has expired: that is the notAfter date is before the current time.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
2001-10-08 16:37:24 +08:00
|
|
|
=item B<11 X509_V_ERR_CRL_NOT_YET_VALID: CRL is not yet valid>
|
1999-11-30 10:28:42 +08:00
|
|
|
|
2008-07-13 22:25:36 +08:00
|
|
|
the CRL is not yet valid.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
=item B<12 X509_V_ERR_CRL_HAS_EXPIRED: CRL has expired>
|
|
|
|
|
2008-07-13 22:25:36 +08:00
|
|
|
the CRL has expired.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
=item B<13 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: format error in certificate's notBefore field>
|
|
|
|
|
|
|
|
the certificate notBefore field contains an invalid time.
|
1999-11-29 09:09:25 +08:00
|
|
|
|
1999-11-30 10:28:42 +08:00
|
|
|
=item B<14 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: format error in certificate's notAfter field>
|
|
|
|
|
|
|
|
the certificate notAfter field contains an invalid time.
|
|
|
|
|
|
|
|
=item B<15 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: format error in CRL's lastUpdate field>
|
|
|
|
|
2008-07-13 22:25:36 +08:00
|
|
|
the CRL lastUpdate field contains an invalid time.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
=item B<16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: format error in CRL's nextUpdate field>
|
|
|
|
|
2008-07-13 22:25:36 +08:00
|
|
|
the CRL nextUpdate field contains an invalid time.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
=item B<17 X509_V_ERR_OUT_OF_MEM: out of memory>
|
|
|
|
|
2000-01-07 09:39:59 +08:00
|
|
|
an error occurred trying to allocate memory. This should never happen.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
=item B<18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate>
|
|
|
|
|
|
|
|
the passed certificate is self signed and the same certificate cannot be found in the list of
|
|
|
|
trusted certificates.
|
|
|
|
|
|
|
|
=item B<19 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: self signed certificate in certificate chain>
|
|
|
|
|
|
|
|
the certificate chain could be built up using the untrusted certificates but the root could not
|
|
|
|
be found locally.
|
|
|
|
|
|
|
|
=item B<20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate>
|
|
|
|
|
2010-02-23 22:09:09 +08:00
|
|
|
the issuer certificate could not be found: this occurs if the issuer
|
|
|
|
certificate of an untrusted certificate cannot be found.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
=item B<21 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: unable to verify the first certificate>
|
|
|
|
|
|
|
|
no signatures could be verified because the chain contains only one certificate and it is not
|
|
|
|
self signed.
|
|
|
|
|
|
|
|
=item B<22 X509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long>
|
|
|
|
|
|
|
|
the certificate chain length is greater than the supplied maximum depth. Unused.
|
|
|
|
|
|
|
|
=item B<23 X509_V_ERR_CERT_REVOKED: certificate revoked>
|
|
|
|
|
2008-07-13 22:25:36 +08:00
|
|
|
the certificate has been revoked.
|
1999-11-30 10:28:42 +08:00
|
|
|
|
|
|
|
=item B<24 X509_V_ERR_INVALID_CA: invalid CA certificate>
|
|
|
|
|
|
|
|
a CA certificate is invalid. Either it is not a CA or its extensions are not consistent
|
|
|
|
with the supplied purpose.
|
|
|
|
|
|
|
|
=item B<25 X509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded>
|
|
|
|
|
|
|
|
the basicConstraints pathlength parameter has been exceeded.
|
|
|
|
|
|
|
|
=item B<26 X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose>
|
|
|
|
|
|
|
|
the supplied certificate cannot be used for the specified purpose.
|
|
|
|
|
|
|
|
=item B<27 X509_V_ERR_CERT_UNTRUSTED: certificate not trusted>
|
|
|
|
|
|
|
|
the root CA is not marked as trusted for the specified purpose.
|
|
|
|
|
|
|
|
=item B<28 X509_V_ERR_CERT_REJECTED: certificate rejected>
|
|
|
|
|
|
|
|
the root CA is marked to reject the specified purpose.
|
|
|
|
|
2000-09-08 08:53:58 +08:00
|
|
|
=item B<29 X509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch>
|
|
|
|
|
|
|
|
the current candidate issuer certificate was rejected because its subject name
|
|
|
|
did not match the issuer name of the current certificate. Only displayed when
|
|
|
|
the B<-issuer_checks> option is set.
|
|
|
|
|
|
|
|
=item B<30 X509_V_ERR_AKID_SKID_MISMATCH: authority and subject key identifier mismatch>
|
|
|
|
|
|
|
|
the current candidate issuer certificate was rejected because its subject key
|
|
|
|
identifier was present and did not match the authority key identifier current
|
|
|
|
certificate. Only displayed when the B<-issuer_checks> option is set.
|
|
|
|
|
|
|
|
=item B<31 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: authority and issuer serial number mismatch>
|
|
|
|
|
|
|
|
the current candidate issuer certificate was rejected because its issuer name
|
|
|
|
and serial number was present and did not match the authority key identifier
|
|
|
|
of the current certificate. Only displayed when the B<-issuer_checks> option is set.
|
|
|
|
|
|
|
|
=item B<32 X509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing>
|
|
|
|
|
|
|
|
the current candidate issuer certificate was rejected because its keyUsage extension
|
|
|
|
does not permit certificate signing.
|
|
|
|
|
1999-11-30 10:28:42 +08:00
|
|
|
=item B<50 X509_V_ERR_APPLICATION_VERIFICATION: application verification failure>
|
|
|
|
|
|
|
|
an application specific error. Unused.
|
|
|
|
|
|
|
|
=back
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2000-09-08 08:53:58 +08:00
|
|
|
=head1 BUGS
|
|
|
|
|
2014-05-15 05:49:30 +08:00
|
|
|
Although the issuer checks are a considerable improvement over the old technique they still
|
2000-09-08 08:53:58 +08:00
|
|
|
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
|
2014-06-20 06:45:21 +08:00
|
|
|
B<-CAfile> option) or a directory (as specified by B<-CApath>). If they occur in both then only
|
2000-09-08 08:53:58 +08:00
|
|
|
the certificates in the file will be recognised.
|
|
|
|
|
|
|
|
Previous versions of OpenSSL assume certificates with matching subject name are identical and
|
|
|
|
mishandled them.
|
|
|
|
|
2010-02-23 22:09:09 +08:00
|
|
|
Previous versions of this documentation swapped the meaning of the
|
|
|
|
B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT> and
|
|
|
|
B<20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY> error codes.
|
|
|
|
|
1999-11-29 09:09:25 +08:00
|
|
|
=head1 SEE ALSO
|
|
|
|
|
2015-08-18 03:21:33 +08:00
|
|
|
L<x509(1)>
|
1999-11-29 09:09:25 +08:00
|
|
|
|
2015-01-27 19:15:15 +08:00
|
|
|
=head1 HISTORY
|
|
|
|
|
2015-06-25 19:28:28 +08:00
|
|
|
The -show_chain option was first added to OpenSSL 1.1.0.
|
2015-01-27 19:15:15 +08:00
|
|
|
|
1999-11-29 09:09:25 +08:00
|
|
|
=cut
|