Fixed a bunch of typos in the docs
[openssl.git] / doc / apps / x509.pod
1
2 =pod
3
4 =head1 NAME
5
6 x509 - Certificate display and signing utility
7
8 =head1 SYNOPSIS
9
10 B<openssl> B<x509>
11 [B<-help>]
12 [B<-inform DER|PEM|NET>]
13 [B<-outform DER|PEM|NET>]
14 [B<-keyform DER|PEM>]
15 [B<-CAform DER|PEM>]
16 [B<-CAkeyform DER|PEM>]
17 [B<-in filename>]
18 [B<-out filename>]
19 [B<-serial>]
20 [B<-hash>]
21 [B<-subject_hash>]
22 [B<-issuer_hash>]
23 [B<-ocspid>]
24 [B<-subject>]
25 [B<-issuer>]
26 [B<-nameopt option>]
27 [B<-email>]
28 [B<-ocsp_uri>]
29 [B<-startdate>]
30 [B<-enddate>]
31 [B<-purpose>]
32 [B<-dates>]
33 [B<-checkend num>]
34 [B<-modulus>]
35 [B<-pubkey>]
36 [B<-fingerprint>]
37 [B<-alias>]
38 [B<-noout>]
39 [B<-trustout>]
40 [B<-clrtrust>]
41 [B<-clrreject>]
42 [B<-addtrust arg>]
43 [B<-addreject arg>]
44 [B<-setalias arg>]
45 [B<-days arg>]
46 [B<-set_serial n>]
47 [B<-signkey filename>]
48 [B<-passin arg>]
49 [B<-x509toreq>]
50 [B<-req>]
51 [B<-CA filename>]
52 [B<-CAkey filename>]
53 [B<-CAcreateserial>]
54 [B<-CAserial filename>]
55 [B<-force_pubkey key>]
56 [B<-text>]
57 [B<-certopt option>]
58 [B<-C>]
59 [B<-[digest]>]
60 [B<-clrext>]
61 [B<-extfile filename>]
62 [B<-extensions section>]
63 [B<-engine id>]
64
65 =head1 DESCRIPTION
66
67 The B<x509> command is a multi purpose certificate utility. It can be
68 used to display certificate information, convert certificates to
69 various forms, sign certificate requests like a "mini CA" or edit
70 certificate trust settings.
71
72 Since there are a large number of options they will split up into
73 various sections.
74
75 =head1 OPTIONS
76
77 =head2 INPUT, OUTPUT AND GENERAL PURPOSE OPTIONS
78
79 =over 4
80
81 =item B<-help>
82
83 Print out a usage message.
84
85 =item B<-inform DER|PEM|NET>
86
87 This specifies the input format normally the command will expect an X509
88 certificate but this can change if other options such as B<-req> are
89 present. The DER format is the DER encoding of the certificate and PEM
90 is the base64 encoding of the DER encoding with header and footer lines
91 added. The NET option is an obscure Netscape server format that is now
92 obsolete.
93
94 =item B<-outform DER|PEM|NET>
95
96 This specifies the output format, the options have the same meaning as the 
97 B<-inform> option.
98
99 =item B<-in filename>
100
101 This specifies the input filename to read a certificate from or standard input
102 if this option is not specified.
103
104 =item B<-out filename>
105
106 This specifies the output filename to write to or standard output by
107 default.
108
109 =item B<-[digest]>
110
111 the digest to use.
112 This affects any signing or display option that uses a message
113 digest, such as the B<-fingerprint>, B<-signkey> and B<-CA> options.
114 Any digest supported by the OpenSSL B<dgst> command can be used.
115 If not specified then SHA1 is used.
116 Note that if a DSA key is used for signing, then this flag is ignored
117 and SHA1 is used.
118
119 =item B<-engine id>
120
121 specifying an engine (by its unique B<id> string) will cause B<x509>
122 to attempt to obtain a functional reference to the specified engine,
123 thus initialising it if needed. The engine will then be set as the default
124 for all available algorithms.
125
126 =back
127
128 =head2 DISPLAY OPTIONS
129
130 Note: the B<-alias> and B<-purpose> options are also display options
131 but are described in the B<TRUST SETTINGS> section.
132
133 =over 4
134
135 =item B<-text>
136
137 prints out the certificate in text form. Full details are output including the
138 public key, signature algorithms, issuer and subject names, serial number
139 any extensions present and any trust settings.
140
141 =item B<-certopt option>
142
143 customise the output format used with B<-text>. The B<option> argument can be
144 a single option or multiple options separated by commas. The B<-certopt> switch
145 may be also be used more than once to set multiple options. See the B<TEXT OPTIONS>
146 section for more information.
147
148 =item B<-noout>
149
150 this option prevents output of the encoded version of the request.
151
152 =item B<-pubkey>
153
154 outputs the certificate's SubjectPublicKeyInfo block in PEM format.
155
156 =item B<-modulus>
157
158 this option prints out the value of the modulus of the public key
159 contained in the certificate.
160
161 =item B<-serial>
162
163 outputs the certificate serial number.
164
165 =item B<-subject_hash>
166
167 outputs the "hash" of the certificate subject name. This is used in OpenSSL to
168 form an index to allow certificates in a directory to be looked up by subject
169 name.
170
171 =item B<-issuer_hash>
172
173 outputs the "hash" of the certificate issuer name.
174
175 =item B<-ocspid>
176
177 outputs the OCSP hash values for the subject name and public key.
178
179 =item B<-hash>
180
181 synonym for "-subject_hash" for backward compatibility reasons.
182
183 =item B<-subject_hash_old>
184
185 outputs the "hash" of the certificate subject name using the older algorithm
186 as used by OpenSSL versions before 1.0.0.
187
188 =item B<-issuer_hash_old>
189
190 outputs the "hash" of the certificate issuer name using the older algorithm
191 as used by OpenSSL versions before 1.0.0.
192
193 =item B<-subject>
194
195 outputs the subject name.
196
197 =item B<-issuer>
198
199 outputs the issuer name.
200
201 =item B<-nameopt option>
202
203 option which determines how the subject or issuer names are displayed. The
204 B<option> argument can be a single option or multiple options separated by
205 commas.  Alternatively the B<-nameopt> switch may be used more than once to
206 set multiple options. See the B<NAME OPTIONS> section for more information.
207
208 =item B<-email>
209
210 outputs the email address(es) if any.
211
212 =item B<-ocsp_uri>
213
214 outputs the OCSP responder address(es) if any.
215
216 =item B<-startdate>
217
218 prints out the start date of the certificate, that is the notBefore date.
219
220 =item B<-enddate>
221
222 prints out the expiry date of the certificate, that is the notAfter date.
223
224 =item B<-dates>
225
226 prints out the start and expiry dates of a certificate.
227
228 =item B<-checkend arg>
229
230 checks if the certificate expires within the next B<arg> seconds and exits
231 non-zero if yes it will expire or zero if not.
232
233 =item B<-fingerprint>
234
235 prints out the digest of the DER encoded version of the whole certificate
236 (see digest options).
237
238 =item B<-C>
239
240 this outputs the certificate in the form of a C source file.
241
242 =back
243
244 =head2 TRUST SETTINGS
245
246 A B<trusted certificate> is an ordinary certificate which has several
247 additional pieces of information attached to it such as the permitted
248 and prohibited uses of the certificate and an "alias".
249
250 Normally when a certificate is being verified at least one certificate
251 must be "trusted". By default a trusted certificate must be stored
252 locally and must be a root CA: any certificate chain ending in this CA
253 is then usable for any purpose.
254
255 Trust settings currently are only used with a root CA. They allow a finer
256 control over the purposes the root CA can be used for. For example a CA
257 may be trusted for SSL client but not SSL server use.
258
259 See the description of the B<verify> utility for more information on the
260 meaning of trust settings.
261
262 Future versions of OpenSSL will recognize trust settings on any
263 certificate: not just root CAs.
264
265
266 =over 4
267
268 =item B<-trustout>
269
270 this causes B<x509> to output a B<trusted> certificate. An ordinary
271 or trusted certificate can be input but by default an ordinary
272 certificate is output and any trust settings are discarded. With the
273 B<-trustout> option a trusted certificate is output. A trusted
274 certificate is automatically output if any trust settings are modified.
275
276 =item B<-setalias arg>
277
278 sets the alias of the certificate. This will allow the certificate
279 to be referred to using a nickname for example "Steve's Certificate".
280
281 =item B<-alias>
282
283 outputs the certificate alias, if any.
284
285 =item B<-clrtrust>
286
287 clears all the permitted or trusted uses of the certificate.
288
289 =item B<-clrreject>
290
291 clears all the prohibited or rejected uses of the certificate.
292
293 =item B<-addtrust arg>
294
295 adds a trusted certificate use.
296 Any object name can be used here but currently only B<clientAuth> (SSL client
297 use), B<serverAuth> (SSL server use), B<emailProtection> (S/MIME email) and
298 B<anyExtendedKeyUsage> are used.
299 As of OpenSSL 1.1.0, the last of these blocks all purposes when rejected or
300 enables all purposes when trusted.
301 Other OpenSSL applications may define additional uses.
302
303 =item B<-addreject arg>
304
305 adds a prohibited use. It accepts the same values as the B<-addtrust>
306 option.
307
308 =item B<-purpose>
309
310 this option performs tests on the certificate extensions and outputs
311 the results. For a more complete description see the B<CERTIFICATE
312 EXTENSIONS> section.
313
314 =back
315
316 =head2 SIGNING OPTIONS
317
318 The B<x509> utility can be used to sign certificates and requests: it
319 can thus behave like a "mini CA".
320
321 =over 4
322
323 =item B<-signkey filename>
324
325 this option causes the input file to be self signed using the supplied
326 private key. 
327
328 If the input file is a certificate it sets the issuer name to the
329 subject name (i.e.  makes it self signed) changes the public key to the
330 supplied value and changes the start and end dates. The start date is
331 set to the current time and the end date is set to a value determined
332 by the B<-days> option. Any certificate extensions are retained unless
333 the B<-clrext> option is supplied; this includes, for example, any existing
334 key identifier extensions.
335
336 If the input is a certificate request then a self signed certificate
337 is created using the supplied private key using the subject name in
338 the request.
339
340 =item B<-passin arg>
341
342 the key password source. For more information about the format of B<arg>
343 see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)>.
344
345 =item B<-clrext>
346
347 delete any extensions from a certificate. This option is used when a
348 certificate is being created from another certificate (for example with
349 the B<-signkey> or the B<-CA> options). Normally all extensions are
350 retained.
351
352 =item B<-keyform PEM|DER>
353
354 specifies the format (DER or PEM) of the private key file used in the
355 B<-signkey> option.
356
357 =item B<-days arg>
358
359 specifies the number of days to make a certificate valid for. The default
360 is 30 days.
361
362 =item B<-x509toreq>
363
364 converts a certificate into a certificate request. The B<-signkey> option
365 is used to pass the required private key.
366
367 =item B<-req>
368
369 by default a certificate is expected on input. With this option a
370 certificate request is expected instead.
371
372 =item B<-set_serial n>
373
374 specifies the serial number to use. This option can be used with either
375 the B<-signkey> or B<-CA> options. If used in conjunction with the B<-CA>
376 option the serial number file (as specified by the B<-CAserial> or
377 B<-CAcreateserial> options) is not used.
378
379 The serial number can be decimal or hex (if preceded by B<0x>).
380
381 =item B<-CA filename>
382
383 specifies the CA certificate to be used for signing. When this option is
384 present B<x509> behaves like a "mini CA". The input file is signed by this
385 CA using this option: that is its issuer name is set to the subject name
386 of the CA and it is digitally signed using the CAs private key.
387
388 This option is normally combined with the B<-req> option. Without the
389 B<-req> option the input is a certificate which must be self signed.
390
391 =item B<-CAkey filename>
392
393 sets the CA private key to sign a certificate with. If this option is
394 not specified then it is assumed that the CA private key is present in
395 the CA certificate file.
396
397 =item B<-CAserial filename>
398
399 sets the CA serial number file to use.
400
401 When the B<-CA> option is used to sign a certificate it uses a serial
402 number specified in a file. This file consist of one line containing
403 an even number of hex digits with the serial number to use. After each
404 use the serial number is incremented and written out to the file again.
405
406 The default filename consists of the CA certificate file base name with
407 ".srl" appended. For example if the CA certificate file is called 
408 "mycacert.pem" it expects to find a serial number file called "mycacert.srl".
409
410 =item B<-CAcreateserial>
411
412 with this option the CA serial number file is created if it does not exist:
413 it will contain the serial number "02" and the certificate being signed will
414 have the 1 as its serial number. If the B<-CA> option is specified
415 and the serial number file does not exist a random number is generated;
416 this is the recommended practice.
417
418 =item B<-extfile filename>
419
420 file containing certificate extensions to use. If not specified then
421 no extensions are added to the certificate.
422
423 =item B<-extensions section>
424
425 the section to add certificate extensions from. If this option is not
426 specified then the extensions should either be contained in the unnamed
427 (default) section or the default section should contain a variable called
428 "extensions" which contains the section to use. See the
429 L<x509v3_config(5)> manual page for details of the
430 extension section format.
431
432 =item B<-force_pubkey key>
433
434 when a certificate is created set its public key to B<key> instead of the
435 key in the certificate or certificate request. This option is useful for
436 creating certificates where the algorithm can't normally sign requests, for
437 example DH.
438
439 The format or B<key> can be specified using the B<-keyform> option.
440
441 =back
442
443 =head2 NAME OPTIONS
444
445 The B<nameopt> command line switch determines how the subject and issuer
446 names are displayed. If no B<nameopt> switch is present the default "oneline"
447 format is used which is compatible with previous versions of OpenSSL.
448 Each option is described in detail below, all options can be preceded by
449 a B<-> to turn the option off. Only the first four will normally be used.
450
451 =over 4
452
453 =item B<compat>
454
455 use the old format.
456
457 =item B<RFC2253>
458
459 displays names compatible with RFC2253 equivalent to B<esc_2253>, B<esc_ctrl>,
460 B<esc_msb>, B<utf8>, B<dump_nostr>, B<dump_unknown>, B<dump_der>,
461 B<sep_comma_plus>, B<dn_rev> and B<sname>.
462
463 =item B<oneline>
464
465 a oneline format which is more readable than RFC2253. It is equivalent to
466 specifying the  B<esc_2253>, B<esc_ctrl>, B<esc_msb>, B<utf8>, B<dump_nostr>,
467 B<dump_der>, B<use_quote>, B<sep_comma_plus_space>, B<space_eq> and B<sname>
468 options.  This is the I<default> of no name options are given explicitly.
469
470 =item B<multiline>
471
472 a multiline format. It is equivalent B<esc_ctrl>, B<esc_msb>, B<sep_multiline>,
473 B<space_eq>, B<lname> and B<align>.
474
475 =item B<esc_2253>
476
477 escape the "special" characters required by RFC2253 in a field That is
478 B<,+"E<lt>E<gt>;>. Additionally B<#> is escaped at the beginning of a string
479 and a space character at the beginning or end of a string.
480
481 =item B<esc_ctrl>
482
483 escape control characters. That is those with ASCII values less than
484 0x20 (space) and the delete (0x7f) character. They are escaped using the
485 RFC2253 \XX notation (where XX are two hex digits representing the
486 character value).
487
488 =item B<esc_msb>
489
490 escape characters with the MSB set, that is with ASCII values larger than
491 127.
492
493 =item B<use_quote>
494
495 escapes some characters by surrounding the whole string with B<"> characters,
496 without the option all escaping is done with the B<\> character.
497
498 =item B<utf8>
499
500 convert all strings to UTF8 format first. This is required by RFC2253. If
501 you are lucky enough to have a UTF8 compatible terminal then the use
502 of this option (and B<not> setting B<esc_msb>) may result in the correct
503 display of multibyte (international) characters. Is this option is not
504 present then multibyte characters larger than 0xff will be represented
505 using the format \UXXXX for 16 bits and \WXXXXXXXX for 32 bits.
506 Also if this option is off any UTF8Strings will be converted to their
507 character form first.
508
509 =item B<ignore_type>
510
511 this option does not attempt to interpret multibyte characters in any
512 way. That is their content octets are merely dumped as though one octet
513 represents each character. This is useful for diagnostic purposes but
514 will result in rather odd looking output.
515
516 =item B<show_type>
517
518 show the type of the ASN1 character string. The type precedes the
519 field contents. For example "BMPSTRING: Hello World".
520
521 =item B<dump_der>
522
523 when this option is set any fields that need to be hexdumped will
524 be dumped using the DER encoding of the field. Otherwise just the
525 content octets will be displayed. Both options use the RFC2253
526 B<#XXXX...> format.
527
528 =item B<dump_nostr>
529
530 dump non character string types (for example OCTET STRING) if this
531 option is not set then non character string types will be displayed
532 as though each content octet represents a single character.
533
534 =item B<dump_all>
535
536 dump all fields. This option when used with B<dump_der> allows the
537 DER encoding of the structure to be unambiguously determined.
538
539 =item B<dump_unknown>
540
541 dump any field whose OID is not recognised by OpenSSL.
542
543 =item B<sep_comma_plus>, B<sep_comma_plus_space>, B<sep_semi_plus_space>,
544 B<sep_multiline>
545
546 these options determine the field separators. The first character is
547 between RDNs and the second between multiple AVAs (multiple AVAs are
548 very rare and their use is discouraged). The options ending in
549 "space" additionally place a space after the separator to make it
550 more readable. The B<sep_multiline> uses a linefeed character for
551 the RDN separator and a spaced B<+> for the AVA separator. It also
552 indents the fields by four characters. If no field separator is specified
553 then B<sep_comma_plus_space> is used by default.
554
555 =item B<dn_rev>
556
557 reverse the fields of the DN. This is required by RFC2253. As a side
558 effect this also reverses the order of multiple AVAs but this is
559 permissible.
560
561 =item B<nofname>, B<sname>, B<lname>, B<oid>
562
563 these options alter how the field name is displayed. B<nofname> does
564 not display the field at all. B<sname> uses the "short name" form
565 (CN for commonName for example). B<lname> uses the long form.
566 B<oid> represents the OID in numerical form and is useful for
567 diagnostic purpose.
568
569 =item B<align>
570
571 align field values for a more readable output. Only usable with
572 B<sep_multiline>.
573
574 =item B<space_eq>
575
576 places spaces round the B<=> character which follows the field
577 name.
578
579 =back
580
581 =head2 TEXT OPTIONS
582
583 As well as customising the name output format, it is also possible to
584 customise the actual fields printed using the B<certopt> options when
585 the B<text> option is present. The default behaviour is to print all fields.
586
587 =over 4
588
589 =item B<compatible>
590
591 use the old format. This is equivalent to specifying no output options at all.
592
593 =item B<no_header>
594
595 don't print header information: that is the lines saying "Certificate" and "Data".
596
597 =item B<no_version>
598
599 don't print out the version number.
600
601 =item B<no_serial>
602
603 don't print out the serial number.
604
605 =item B<no_signame>
606
607 don't print out the signature algorithm used.
608
609 =item B<no_validity>
610
611 don't print the validity, that is the B<notBefore> and B<notAfter> fields.
612
613 =item B<no_subject>
614
615 don't print out the subject name.
616
617 =item B<no_issuer>
618
619 don't print out the issuer name.
620
621 =item B<no_pubkey>
622
623 don't print out the public key.
624
625 =item B<no_sigdump>
626
627 don't give a hexadecimal dump of the certificate signature.
628
629 =item B<no_aux>
630
631 don't print out certificate trust information.
632
633 =item B<no_extensions>
634
635 don't print out any X509V3 extensions.
636
637 =item B<ext_default>
638
639 retain default extension behaviour: attempt to print out unsupported certificate extensions.
640
641 =item B<ext_error>
642
643 print an error message for unsupported certificate extensions.
644
645 =item B<ext_parse>
646
647 ASN1 parse unsupported extensions.
648
649 =item B<ext_dump>
650
651 hex dump unsupported extensions.
652
653 =item B<ca_default>
654
655 the value used by the B<ca> utility, equivalent to B<no_issuer>, B<no_pubkey>, B<no_header>,
656 B<no_version>, B<no_sigdump> and B<no_signame>.
657
658 =back
659
660 =head1 EXAMPLES
661
662 Note: in these examples the '\' means the example should be all on one
663 line.
664
665 Display the contents of a certificate:
666
667  openssl x509 -in cert.pem -noout -text
668
669 Display the certificate serial number:
670
671  openssl x509 -in cert.pem -noout -serial
672
673 Display the certificate subject name:
674
675  openssl x509 -in cert.pem -noout -subject
676
677 Display the certificate subject name in RFC2253 form:
678
679  openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
680
681 Display the certificate subject name in oneline form on a terminal
682 supporting UTF8:
683
684  openssl x509 -in cert.pem -noout -subject -nameopt oneline,-esc_msb
685
686 Display the certificate MD5 fingerprint:
687
688  openssl x509 -in cert.pem -noout -fingerprint
689
690 Display the certificate SHA1 fingerprint:
691
692  openssl x509 -sha1 -in cert.pem -noout -fingerprint
693
694 Convert a certificate from PEM to DER format:
695
696  openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
697
698 Convert a certificate to a certificate request:
699
700  openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
701
702 Convert a certificate request into a self signed certificate using
703 extensions for a CA:
704
705  openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca \
706         -signkey key.pem -out cacert.pem
707
708 Sign a certificate request using the CA certificate above and add user
709 certificate extensions:
710
711  openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr \
712         -CA cacert.pem -CAkey key.pem -CAcreateserial
713
714
715 Set a certificate to be trusted for SSL client use and change set its alias to
716 "Steve's Class 1 CA"
717
718  openssl x509 -in cert.pem -addtrust clientAuth \
719         -setalias "Steve's Class 1 CA" -out trust.pem
720
721 =head1 NOTES
722
723 The PEM format uses the header and footer lines:
724
725  -----BEGIN CERTIFICATE-----
726  -----END CERTIFICATE-----
727
728 it will also handle files containing:
729
730  -----BEGIN X509 CERTIFICATE-----
731  -----END X509 CERTIFICATE-----
732
733 Trusted certificates have the lines
734
735  -----BEGIN TRUSTED CERTIFICATE-----
736  -----END TRUSTED CERTIFICATE-----
737
738 The conversion to UTF8 format used with the name options assumes that
739 T61Strings use the ISO8859-1 character set. This is wrong but Netscape
740 and MSIE do this as do many certificates. So although this is incorrect
741 it is more likely to display the majority of certificates correctly.
742
743 The B<-fingerprint> option takes the digest of the DER encoded certificate.
744 This is commonly called a "fingerprint". Because of the nature of message
745 digests the fingerprint of a certificate is unique to that certificate and
746 two certificates with the same fingerprint can be considered to be the same.
747
748 The Netscape fingerprint uses MD5 whereas MSIE uses SHA1.
749
750 The B<-email> option searches the subject name and the subject alternative
751 name extension. Only unique email addresses will be printed out: it will
752 not print the same address more than once.
753
754 =head1 CERTIFICATE EXTENSIONS
755
756 The B<-purpose> option checks the certificate extensions and determines
757 what the certificate can be used for. The actual checks done are rather
758 complex and include various hacks and workarounds to handle broken
759 certificates and software.
760
761 The same code is used when verifying untrusted certificates in chains
762 so this section is useful if a chain is rejected by the verify code.
763
764 The basicConstraints extension CA flag is used to determine whether the
765 certificate can be used as a CA. If the CA flag is true then it is a CA,
766 if the CA flag is false then it is not a CA. B<All> CAs should have the
767 CA flag set to true.
768
769 If the basicConstraints extension is absent then the certificate is
770 considered to be a "possible CA" other extensions are checked according
771 to the intended use of the certificate. A warning is given in this case
772 because the certificate should really not be regarded as a CA: however
773 it is allowed to be a CA to work around some broken software.
774
775 If the certificate is a V1 certificate (and thus has no extensions) and
776 it is self signed it is also assumed to be a CA but a warning is again
777 given: this is to work around the problem of Verisign roots which are V1
778 self signed certificates.
779
780 If the keyUsage extension is present then additional restraints are
781 made on the uses of the certificate. A CA certificate B<must> have the
782 keyCertSign bit set if the keyUsage extension is present.
783
784 The extended key usage extension places additional restrictions on the
785 certificate uses. If this extension is present (whether critical or not)
786 the key can only be used for the purposes specified.
787
788 A complete description of each test is given below. The comments about
789 basicConstraints and keyUsage and V1 certificates above apply to B<all>
790 CA certificates.
791
792
793 =over 4
794
795 =item B<SSL Client>
796
797 The extended key usage extension must be absent or include the "web client
798 authentication" OID.  keyUsage must be absent or it must have the
799 digitalSignature bit set. Netscape certificate type must be absent or it must
800 have the SSL client bit set.
801
802 =item B<SSL Client CA>
803
804 The extended key usage extension must be absent or include the "web client
805 authentication" OID. Netscape certificate type must be absent or it must have
806 the SSL CA bit set: this is used as a work around if the basicConstraints
807 extension is absent.
808
809 =item B<SSL Server>
810
811 The extended key usage extension must be absent or include the "web server
812 authentication" and/or one of the SGC OIDs.  keyUsage must be absent or it
813 must have the digitalSignature, the keyEncipherment set or both bits set.
814 Netscape certificate type must be absent or have the SSL server bit set.
815
816 =item B<SSL Server CA>
817
818 The extended key usage extension must be absent or include the "web server
819 authentication" and/or one of the SGC OIDs.  Netscape certificate type must
820 be absent or the SSL CA bit must be set: this is used as a work around if the
821 basicConstraints extension is absent.
822
823 =item B<Netscape SSL Server>
824
825 For Netscape SSL clients to connect to an SSL server it must have the
826 keyEncipherment bit set if the keyUsage extension is present. This isn't
827 always valid because some cipher suites use the key for digital signing.
828 Otherwise it is the same as a normal SSL server.
829
830 =item B<Common S/MIME Client Tests>
831
832 The extended key usage extension must be absent or include the "email
833 protection" OID. Netscape certificate type must be absent or should have the
834 S/MIME bit set. If the S/MIME bit is not set in netscape certificate type
835 then the SSL client bit is tolerated as an alternative but a warning is shown:
836 this is because some Verisign certificates don't set the S/MIME bit.
837
838 =item B<S/MIME Signing>
839
840 In addition to the common S/MIME client tests the digitalSignature bit must
841 be set if the keyUsage extension is present.
842
843 =item B<S/MIME Encryption>
844
845 In addition to the common S/MIME tests the keyEncipherment bit must be set
846 if the keyUsage extension is present.
847
848 =item B<S/MIME CA>
849
850 The extended key usage extension must be absent or include the "email
851 protection" OID. Netscape certificate type must be absent or must have the
852 S/MIME CA bit set: this is used as a work around if the basicConstraints
853 extension is absent. 
854
855 =item B<CRL Signing>
856
857 The keyUsage extension must be absent or it must have the CRL signing bit
858 set.
859
860 =item B<CRL Signing CA>
861
862 The normal CA tests apply. Except in this case the basicConstraints extension
863 must be present.
864
865 =back
866
867 =head1 BUGS
868
869 Extensions in certificates are not transferred to certificate requests and
870 vice versa.
871
872 It is possible to produce invalid certificates or requests by specifying the
873 wrong private key or using inconsistent options in some cases: these should
874 be checked.
875
876 There should be options to explicitly set such things as start and end
877 dates rather than an offset from the current time.
878
879 =head1 SEE ALSO
880
881 L<req(1)>, L<ca(1)>, L<genrsa(1)>,
882 L<gendsa(1)>, L<verify(1)>,
883 L<x509v3_config(5)> 
884
885 =head1 HISTORY
886
887 The hash algorithm used in the B<-subject_hash> and B<-issuer_hash> options
888 before OpenSSL 1.0.0 was based on the deprecated MD5 algorithm and the encoding
889 of the distinguished name. In OpenSSL 1.0.0 and later it is based on a
890 canonical version of the DN using SHA1. This means that any directories using
891 the old form must have their links rebuilt using B<c_rehash> or similar. 
892
893 =cut