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