Fix hostname validation in the command-line tool to honour negative return values.
[openssl.git] / doc / apps / verify.pod
1 =pod
2
3 =head1 NAME
4
5 verify - Utility to verify certificates.
6
7 =head1 SYNOPSIS
8
9 B<openssl> B<verify>
10 [B<-CApath directory>]
11 [B<-CAfile file>]
12 [B<-purpose purpose>]
13 [B<-policy arg>]
14 [B<-ignore_critical>]
15 [B<-attime timestamp>]
16 [B<-check_ss_sig>]
17 [B<-crlfile file>]
18 [B<-crl_check>]
19 [B<-crl_check_all>]
20 [B<-policy_check>]
21 [B<-explicit_policy>]
22 [B<-inhibit_any>]
23 [B<-inhibit_map>]
24 [B<-x509_strict>]
25 [B<-extended_crl>]
26 [B<-use_deltas>]
27 [B<-policy_print>]
28 [B<-untrusted file>]
29 [B<-help>]
30 [B<-issuer_checks>]
31 [B<-verbose>]
32 [B<->]
33 [certificates]
34
35
36 =head1 DESCRIPTION
37
38 The B<verify> command verifies certificate chains.
39
40 =head1 COMMAND OPTIONS
41
42 =over 4
43
44 =item B<-CApath directory>
45
46 A directory of trusted certificates. The certificates should have names
47 of the form: hash.0 or have symbolic links to them of this
48 form ("hash" is the hashed certificate subject name: see the B<-hash> option
49 of the B<x509> utility). Under Unix the B<c_rehash> script will automatically
50 create symbolic links to a directory of certificates.
51
52 =item B<-CAfile file>
53 A file of trusted certificates. The file should contain multiple certificates
54 in PEM format concatenated together.
55
56 =item B<-attime timestamp>
57
58 Perform validation checks using time specified by B<timestamp> and not
59 current system time. B<timestamp> is the number of seconds since
60 01.01.1970 (UNIX time).
61
62 =item B<-check_ss_sig>
63
64 Verify the signature on the self-signed root CA. This is disabled by default
65 because it doesn't add any security.
66
67 =item B<-crlfile file>
68
69 File containing one or more CRL's (in PEM format) to load.
70
71 =item B<-crl_check>
72
73 Checks end entity certificate validity by attempting to look up a valid CRL.
74 If a valid CRL cannot be found an error occurs.
75
76 =item B<-untrusted file>
77
78 A file of untrusted certificates. The file should contain multiple certificates
79 in PEM format concatenated together.
80
81 =item B<-purpose purpose>
82
83 The intended use for the certificate. If this option is not specified,
84 B<verify> will not consider certificate purpose during chain verification.
85 Currently accepted uses are B<sslclient>, B<sslserver>, B<nssslserver>,
86 B<smimesign>, B<smimeencrypt>. See the B<VERIFY OPERATION> section for more
87 information.
88
89 =item B<-help>
90
91 Print out a usage message.
92
93 =item B<-verbose>
94
95 Print extra information about the operations being performed.
96
97 =item B<-issuer_checks>
98
99 Print out diagnostics relating to searches for the issuer certificate of the
100 current certificate. This shows why each candidate issuer certificate was
101 rejected. The presence of rejection messages does not itself imply that
102 anything is wrong; during the normal verification process, several
103 rejections may take place.
104
105 =item B<-policy arg>
106
107 Enable policy processing and add B<arg> to the user-initial-policy-set (see
108 RFC5280). The policy B<arg> can be an object name an OID in numeric form.
109 This argument can appear more than once.
110
111 =item B<-policy_check>
112
113 Enables certificate policy processing.
114
115 =item B<-explicit_policy>
116
117 Set policy variable require-explicit-policy (see RFC5280).
118
119 =item B<-inhibit_any>
120
121 Set policy variable inhibit-any-policy (see RFC5280).
122
123 =item B<-inhibit_map>
124
125 Set policy variable inhibit-policy-mapping (see RFC5280).
126
127 =item B<-policy_print>
128
129 Print out diagnostics related to policy processing.
130
131 =item B<-crl_check>
132
133 Checks end entity certificate validity by attempting to look up a valid CRL.
134 If a valid CRL cannot be found an error occurs. 
135
136 =item B<-crl_check_all>
137
138 Checks the validity of B<all> certificates in the chain by attempting
139 to look up valid CRLs.
140
141 =item B<-ignore_critical>
142
143 Normally if an unhandled critical extension is present which is not
144 supported by OpenSSL the certificate is rejected (as required by RFC5280).
145 If this option is set critical extensions are ignored.
146
147 =item B<-x509_strict>
148
149 For strict X.509 compliance, disable non-compliant workarounds for broken
150 certificates.
151
152 =item B<-extended_crl>
153
154 Enable extended CRL features such as indirect CRLs and alternate CRL
155 signing keys.
156
157 =item B<-use_deltas>
158
159 Enable support for delta CRLs.
160
161 =item B<-check_ss_sig>
162
163 Verify the signature on the self-signed root CA. This is disabled by default
164 because it doesn't add any security.
165
166 =item B<->
167
168 Indicates the last option. All arguments following this are assumed to be
169 certificate files. This is useful if the first certificate filename begins
170 with a B<->.
171
172 =item B<certificates>
173
174 One or more certificates to verify. If no certificates are given, B<verify>
175 will attempt to read a certificate from standard input. Certificates must be
176 in PEM format.
177
178 =back
179
180 =head1 VERIFY OPERATION
181
182 The B<verify> program uses the same functions as the internal SSL and S/MIME
183 verification, therefore this description applies to these verify operations
184 too.
185
186 There is one crucial difference between the verify operations performed
187 by the B<verify> program: wherever possible an attempt is made to continue
188 after an error whereas normally the verify operation would halt on the
189 first error. This allows all the problems with a certificate chain to be
190 determined.
191
192 The verify operation consists of a number of separate steps.
193
194 Firstly a certificate chain is built up starting from the supplied certificate
195 and ending in the root CA. It is an error if the whole chain cannot be built
196 up. The chain is built up by looking up the issuers certificate of the current
197 certificate. If a certificate is found which is its own issuer it is assumed 
198 to be the root CA.
199
200 The process of 'looking up the issuers certificate' itself involves a number
201 of steps. In versions of OpenSSL before 0.9.5a the first certificate whose
202 subject name matched the issuer of the current certificate was assumed to be
203 the issuers certificate. In OpenSSL 0.9.6 and later all certificates
204 whose subject name matches the issuer name of the current certificate are 
205 subject to further tests. The relevant authority key identifier components
206 of the current certificate (if present) must match the subject key identifier
207 (if present) and issuer and serial number of the candidate issuer, in addition
208 the keyUsage extension of the candidate issuer (if present) must permit
209 certificate signing.
210
211 The lookup first looks in the list of untrusted certificates and if no match
212 is found the remaining lookups are from the trusted certificates. The root CA
213 is always looked up in the trusted certificate list: if the certificate to
214 verify is a root certificate then an exact match must be found in the trusted
215 list.
216
217 The second operation is to check every untrusted certificate's extensions for
218 consistency with the supplied purpose. If the B<-purpose> option is not included
219 then no checks are done. The supplied or "leaf" certificate must have extensions
220 compatible with the supplied purpose and all other certificates must also be valid
221 CA certificates. The precise extensions required are described in more detail in
222 the B<CERTIFICATE EXTENSIONS> section of the B<x509> utility.
223
224 The third operation is to check the trust settings on the root CA. The root
225 CA should be trusted for the supplied purpose. For compatibility with previous
226 versions of SSLeay and OpenSSL a certificate with no trust settings is considered
227 to be valid for all purposes. 
228
229 The final operation is to check the validity of the certificate chain. The validity
230 period is checked against the current system time and the notBefore and notAfter
231 dates in the certificate. The certificate signatures are also checked at this
232 point.
233
234 If all operations complete successfully then certificate is considered valid. If
235 any operation fails then the certificate is not valid.
236
237 =head1 DIAGNOSTICS
238
239 When a verify operation fails the output messages can be somewhat cryptic. The
240 general form of the error message is:
241
242  server.pem: /C=AU/ST=Queensland/O=CryptSoft Pty Ltd/CN=Test CA (1024 bit)
243  error 24 at 1 depth lookup:invalid CA certificate
244
245 The first line contains the name of the certificate being verified followed by
246 the subject name of the certificate. The second line contains the error number
247 and the depth. The depth is number of the certificate being verified when a
248 problem was detected starting with zero for the certificate being verified itself
249 then 1 for the CA that signed the certificate and so on. Finally a text version
250 of the error number is presented.
251
252 An exhaustive list of the error codes and messages is shown below, this also
253 includes the name of the error code as defined in the header file x509_vfy.h
254 Some of the error codes are defined but never returned: these are described
255 as "unused".
256
257 =over 4
258
259 =item B<0 X509_V_OK: ok>
260
261 the operation was successful.
262
263 =item B<2 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: unable to get issuer certificate>
264
265 the issuer certificate of a looked up certificate could not be found. This
266 normally means the list of trusted certificates is not complete.
267
268 =item B<3 X509_V_ERR_UNABLE_TO_GET_CRL: unable to get certificate CRL>
269
270 the CRL of a certificate could not be found.
271
272 =item B<4 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE: unable to decrypt certificate's signature>
273
274 the certificate signature could not be decrypted. This means that the actual signature value
275 could not be determined rather than it not matching the expected value, this is only
276 meaningful for RSA keys.
277
278 =item B<5 X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE: unable to decrypt CRL's signature>
279
280 the CRL signature could not be decrypted: this means that the actual signature value
281 could not be determined rather than it not matching the expected value. Unused.
282
283 =item B<6 X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY: unable to decode issuer public key>
284
285 the public key in the certificate SubjectPublicKeyInfo could not be read.
286
287 =item B<7 X509_V_ERR_CERT_SIGNATURE_FAILURE: certificate signature failure>
288
289 the signature of the certificate is invalid.
290
291 =item B<8 X509_V_ERR_CRL_SIGNATURE_FAILURE: CRL signature failure>
292
293 the signature of the certificate is invalid.
294
295 =item B<9 X509_V_ERR_CERT_NOT_YET_VALID: certificate is not yet valid>
296
297 the certificate is not yet valid: the notBefore date is after the current time.
298
299 =item B<10 X509_V_ERR_CERT_HAS_EXPIRED: certificate has expired>
300
301 the certificate has expired: that is the notAfter date is before the current time.
302
303 =item B<11 X509_V_ERR_CRL_NOT_YET_VALID: CRL is not yet valid>
304
305 the CRL is not yet valid.
306
307 =item B<12 X509_V_ERR_CRL_HAS_EXPIRED: CRL has expired>
308
309 the CRL has expired.
310
311 =item B<13 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: format error in certificate's notBefore field>
312
313 the certificate notBefore field contains an invalid time.
314
315 =item B<14 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: format error in certificate's notAfter field>
316
317 the certificate notAfter field contains an invalid time.
318
319 =item B<15 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD: format error in CRL's lastUpdate field>
320
321 the CRL lastUpdate field contains an invalid time.
322
323 =item B<16 X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD: format error in CRL's nextUpdate field>
324
325 the CRL nextUpdate field contains an invalid time.
326
327 =item B<17 X509_V_ERR_OUT_OF_MEM: out of memory>
328
329 an error occurred trying to allocate memory. This should never happen.
330
331 =item B<18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate>
332
333 the passed certificate is self signed and the same certificate cannot be found in the list of
334 trusted certificates.
335
336 =item B<19 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: self signed certificate in certificate chain>
337
338 the certificate chain could be built up using the untrusted certificates but the root could not
339 be found locally.
340
341 =item B<20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: unable to get local issuer certificate>
342
343 the issuer certificate could not be found: this occurs if the issuer
344 certificate of an untrusted certificate cannot be found.
345
346 =item B<21 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE: unable to verify the first certificate>
347
348 no signatures could be verified because the chain contains only one certificate and it is not
349 self signed.
350
351 =item B<22 X509_V_ERR_CERT_CHAIN_TOO_LONG: certificate chain too long>
352
353 the certificate chain length is greater than the supplied maximum depth. Unused.
354
355 =item B<23 X509_V_ERR_CERT_REVOKED: certificate revoked>
356
357 the certificate has been revoked.
358
359 =item B<24 X509_V_ERR_INVALID_CA: invalid CA certificate>
360
361 a CA certificate is invalid. Either it is not a CA or its extensions are not consistent
362 with the supplied purpose.
363
364 =item B<25 X509_V_ERR_PATH_LENGTH_EXCEEDED: path length constraint exceeded>
365
366 the basicConstraints pathlength parameter has been exceeded.
367
368 =item B<26 X509_V_ERR_INVALID_PURPOSE: unsupported certificate purpose>
369
370 the supplied certificate cannot be used for the specified purpose.
371
372 =item B<27 X509_V_ERR_CERT_UNTRUSTED: certificate not trusted>
373
374 the root CA is not marked as trusted for the specified purpose.
375
376 =item B<28 X509_V_ERR_CERT_REJECTED: certificate rejected>
377
378 the root CA is marked to reject the specified purpose.
379
380 =item B<29 X509_V_ERR_SUBJECT_ISSUER_MISMATCH: subject issuer mismatch>
381
382 the current candidate issuer certificate was rejected because its subject name
383 did not match the issuer name of the current certificate. Only displayed when
384 the B<-issuer_checks> option is set.
385
386 =item B<30 X509_V_ERR_AKID_SKID_MISMATCH: authority and subject key identifier mismatch>
387
388 the current candidate issuer certificate was rejected because its subject key
389 identifier was present and did not match the authority key identifier current
390 certificate. Only displayed when the B<-issuer_checks> option is set.
391
392 =item B<31 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH: authority and issuer serial number mismatch>
393
394 the current candidate issuer certificate was rejected because its issuer name
395 and serial number was present and did not match the authority key identifier
396 of the current certificate. Only displayed when the B<-issuer_checks> option is set.
397
398 =item B<32 X509_V_ERR_KEYUSAGE_NO_CERTSIGN:key usage does not include certificate signing>
399
400 the current candidate issuer certificate was rejected because its keyUsage extension
401 does not permit certificate signing.
402
403 =item B<50 X509_V_ERR_APPLICATION_VERIFICATION: application verification failure>
404
405 an application specific error. Unused.
406
407 =back
408
409 =head1 BUGS
410
411 Although the issuer checks are a considerable improvement over the old technique they still
412 suffer from limitations in the underlying X509_LOOKUP API. One consequence of this is that
413 trusted certificates with matching subject name must either appear in a file (as specified by the
414 B<-CAfile> option) or a directory (as specified by B<-CApath>. If they occur in both then only
415 the certificates in the file will be recognised.
416
417 Previous versions of OpenSSL assume certificates with matching subject name are identical and
418 mishandled them.
419
420 Previous versions of this documentation swapped the meaning of the
421 B<X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT> and
422 B<20 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY> error codes.
423
424 =head1 SEE ALSO
425
426 L<x509(1)|x509(1)>
427
428 =cut