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
|
---|