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 creating a certificate with this option, and with the B<-CA> option, 438the certificate serial number is stored in the given file. 439This file consists of one line containing 440an even number of hex digits with the serial number used last time. 441After reading this number, it is incremented and used, and the file is updated. 442 443The default filename consists of the CA certificate file base name with 444".srl" appended. For example if the CA certificate file is called 445"mycacert.pem" it expects to find a serial number file called "mycacert.srl". 446 447If the B<-CA> option is specified and neither <-CAserial> or <-CAcreateserial> 448is given and the default serial number file does not exist, 449a random number is generated; this is the recommended practice. 450 451=item B<-CAcreateserial> 452 453With this option and the B<-CA> option 454the CA serial number file is created if it does not exist. 455A random number is generated, used for the certificate, 456and saved into the serial number file determined as described above. 457 458=item B<-extfile filename> 459 460File containing certificate extensions to use. If not specified then 461no extensions are added to the certificate. 462 463=item B<-extensions section> 464 465The section to add certificate extensions from. If this option is not 466specified then the extensions should either be contained in the unnamed 467(default) section or the default section should contain a variable called 468"extensions" which contains the section to use. See the 469L<x509v3_config(5)> manual page for details of the 470extension section format. 471 472=item B<-force_pubkey key> 473 474When a certificate is created set its public key to B<key> instead of the 475key in the certificate or certificate request. This option is useful for 476creating certificates where the algorithm can't normally sign requests, for 477example DH. 478 479The format or B<key> can be specified using the B<-keyform> option. 480 481=back 482 483=head2 Name Options 484 485The B<nameopt> command line switch determines how the subject and issuer 486names are displayed. If no B<nameopt> switch is present the default "oneline" 487format is used which is compatible with previous versions of OpenSSL. 488Each option is described in detail below, all options can be preceded by 489a B<-> to turn the option off. Only the first four will normally be used. 490 491=over 4 492 493=item B<compat> 494 495Use the old format. 496 497=item B<RFC2253> 498 499Displays names compatible with RFC2253 equivalent to B<esc_2253>, B<esc_ctrl>, 500B<esc_msb>, B<utf8>, B<dump_nostr>, B<dump_unknown>, B<dump_der>, 501B<sep_comma_plus>, B<dn_rev> and B<sname>. 502 503=item B<oneline> 504 505A oneline format which is more readable than RFC2253. It is equivalent to 506specifying the B<esc_2253>, B<esc_ctrl>, B<esc_msb>, B<utf8>, B<dump_nostr>, 507B<dump_der>, B<use_quote>, B<sep_comma_plus_space>, B<space_eq> and B<sname> 508options. This is the I<default> of no name options are given explicitly. 509 510=item B<multiline> 511 512A multiline format. It is equivalent B<esc_ctrl>, B<esc_msb>, B<sep_multiline>, 513B<space_eq>, B<lname> and B<align>. 514 515=item B<esc_2253> 516 517Escape the "special" characters required by RFC2253 in a field. That is 518B<,+"E<lt>E<gt>;>. Additionally B<#> is escaped at the beginning of a string 519and a space character at the beginning or end of a string. 520 521=item B<esc_2254> 522 523Escape the "special" characters required by RFC2254 in a field. That is 524the B<NUL> character as well as and B<()*>. 525 526=item B<esc_ctrl> 527 528Escape control characters. That is those with ASCII values less than 5290x20 (space) and the delete (0x7f) character. They are escaped using the 530RFC2253 \XX notation (where XX are two hex digits representing the 531character value). 532 533=item B<esc_msb> 534 535Escape characters with the MSB set, that is with ASCII values larger than 536127. 537 538=item B<use_quote> 539 540Escapes some characters by surrounding the whole string with B<"> characters, 541without the option all escaping is done with the B<\> character. 542 543=item B<utf8> 544 545Convert all strings to UTF8 format first. This is required by RFC2253. If 546you are lucky enough to have a UTF8 compatible terminal then the use 547of this option (and B<not> setting B<esc_msb>) may result in the correct 548display of multibyte (international) characters. Is this option is not 549present then multibyte characters larger than 0xff will be represented 550using the format \UXXXX for 16 bits and \WXXXXXXXX for 32 bits. 551Also if this option is off any UTF8Strings will be converted to their 552character form first. 553 554=item B<ignore_type> 555 556This option does not attempt to interpret multibyte characters in any 557way. That is their content octets are merely dumped as though one octet 558represents each character. This is useful for diagnostic purposes but 559will result in rather odd looking output. 560 561=item B<show_type> 562 563Show the type of the ASN1 character string. The type precedes the 564field contents. For example "BMPSTRING: Hello World". 565 566=item B<dump_der> 567 568When this option is set any fields that need to be hexdumped will 569be dumped using the DER encoding of the field. Otherwise just the 570content octets will be displayed. Both options use the RFC2253 571B<#XXXX...> format. 572 573=item B<dump_nostr> 574 575Dump non character string types (for example OCTET STRING) if this 576option is not set then non character string types will be displayed 577as though each content octet represents a single character. 578 579=item B<dump_all> 580 581Dump all fields. This option when used with B<dump_der> allows the 582DER encoding of the structure to be unambiguously determined. 583 584=item B<dump_unknown> 585 586Dump any field whose OID is not recognised by OpenSSL. 587 588=item B<sep_comma_plus>, B<sep_comma_plus_space>, B<sep_semi_plus_space>, 589B<sep_multiline> 590 591These options determine the field separators. The first character is 592between RDNs and the second between multiple AVAs (multiple AVAs are 593very rare and their use is discouraged). The options ending in 594"space" additionally place a space after the separator to make it 595more readable. The B<sep_multiline> uses a linefeed character for 596the RDN separator and a spaced B<+> for the AVA separator. It also 597indents the fields by four characters. If no field separator is specified 598then B<sep_comma_plus_space> is used by default. 599 600=item B<dn_rev> 601 602Reverse the fields of the DN. This is required by RFC2253. As a side 603effect this also reverses the order of multiple AVAs but this is 604permissible. 605 606=item B<nofname>, B<sname>, B<lname>, B<oid> 607 608These options alter how the field name is displayed. B<nofname> does 609not display the field at all. B<sname> uses the "short name" form 610(CN for commonName for example). B<lname> uses the long form. 611B<oid> represents the OID in numerical form and is useful for 612diagnostic purpose. 613 614=item B<align> 615 616Align field values for a more readable output. Only usable with 617B<sep_multiline>. 618 619=item B<space_eq> 620 621Places spaces round the B<=> character which follows the field 622name. 623 624=back 625 626=head2 Text Options 627 628As well as customising the name output format, it is also possible to 629customise the actual fields printed using the B<certopt> options when 630the B<text> option is present. The default behaviour is to print all fields. 631 632=over 4 633 634=item B<compatible> 635 636Use the old format. This is equivalent to specifying no output options at all. 637 638=item B<no_header> 639 640Don't print header information: that is the lines saying "Certificate" 641and "Data". 642 643=item B<no_version> 644 645Don't print out the version number. 646 647=item B<no_serial> 648 649Don't print out the serial number. 650 651=item B<no_signame> 652 653Don't print out the signature algorithm used. 654 655=item B<no_validity> 656 657Don't print the validity, that is the B<notBefore> and B<notAfter> fields. 658 659=item B<no_subject> 660 661Don't print out the subject name. 662 663=item B<no_issuer> 664 665Don't print out the issuer name. 666 667=item B<no_pubkey> 668 669Don't print out the public key. 670 671=item B<no_sigdump> 672 673Don't give a hexadecimal dump of the certificate signature. 674 675=item B<no_aux> 676 677Don't print out certificate trust information. 678 679=item B<no_extensions> 680 681Don't print out any X509V3 extensions. 682 683=item B<ext_default> 684 685Retain default extension behaviour: attempt to print out unsupported 686certificate extensions. 687 688=item B<ext_error> 689 690Print an error message for unsupported certificate extensions. 691 692=item B<ext_parse> 693 694ASN1 parse unsupported extensions. 695 696=item B<ext_dump> 697 698Hex dump unsupported extensions. 699 700=item B<ca_default> 701 702The value used by the B<ca> utility, equivalent to B<no_issuer>, B<no_pubkey>, 703B<no_header>, and B<no_version>. 704 705=back 706 707=head1 EXAMPLES 708 709Note: in these examples the '\' means the example should be all on one 710line. 711 712Display the contents of a certificate: 713 714 openssl x509 -in cert.pem -noout -text 715 716Display the "Subject Alternative Name" extension of a certificate: 717 718 openssl x509 -in cert.pem -noout -ext subjectAltName 719 720Display more extensions of a certificate: 721 722 openssl x509 -in cert.pem -noout -ext subjectAltName,nsCertType 723 724Display the certificate serial number: 725 726 openssl x509 -in cert.pem -noout -serial 727 728Display the certificate subject name: 729 730 openssl x509 -in cert.pem -noout -subject 731 732Display the certificate subject name in RFC2253 form: 733 734 openssl x509 -in cert.pem -noout -subject -nameopt RFC2253 735 736Display the certificate subject name in oneline form on a terminal 737supporting UTF8: 738 739 openssl x509 -in cert.pem -noout -subject -nameopt oneline,-esc_msb 740 741Display the certificate SHA1 fingerprint: 742 743 openssl x509 -sha1 -in cert.pem -noout -fingerprint 744 745Convert a certificate from PEM to DER format: 746 747 openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER 748 749Convert a certificate to a certificate request: 750 751 openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem 752 753Convert a certificate request into a self signed certificate using 754extensions for a CA: 755 756 openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca \ 757 -signkey key.pem -out cacert.pem 758 759Sign a certificate request using the CA certificate above and add user 760certificate extensions: 761 762 openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr \ 763 -CA cacert.pem -CAkey key.pem -CAcreateserial 764 765 766Set a certificate to be trusted for SSL client use and change set its alias to 767"Steve's Class 1 CA" 768 769 openssl x509 -in cert.pem -addtrust clientAuth \ 770 -setalias "Steve's Class 1 CA" -out trust.pem 771 772=head1 NOTES 773 774The PEM format uses the header and footer lines: 775 776 -----BEGIN CERTIFICATE----- 777 -----END CERTIFICATE----- 778 779it will also handle files containing: 780 781 -----BEGIN X509 CERTIFICATE----- 782 -----END X509 CERTIFICATE----- 783 784Trusted certificates have the lines 785 786 -----BEGIN TRUSTED CERTIFICATE----- 787 -----END TRUSTED CERTIFICATE----- 788 789The conversion to UTF8 format used with the name options assumes that 790T61Strings use the ISO8859-1 character set. This is wrong but Netscape 791and MSIE do this as do many certificates. So although this is incorrect 792it is more likely to display the majority of certificates correctly. 793 794The B<-email> option searches the subject name and the subject alternative 795name extension. Only unique email addresses will be printed out: it will 796not print the same address more than once. 797 798=head1 CERTIFICATE EXTENSIONS 799 800The B<-purpose> option checks the certificate extensions and determines 801what the certificate can be used for. The actual checks done are rather 802complex and include various hacks and workarounds to handle broken 803certificates and software. 804 805The same code is used when verifying untrusted certificates in chains 806so this section is useful if a chain is rejected by the verify code. 807 808The basicConstraints extension CA flag is used to determine whether the 809certificate can be used as a CA. If the CA flag is true then it is a CA, 810if the CA flag is false then it is not a CA. B<All> CAs should have the 811CA flag set to true. 812 813If the basicConstraints extension is absent then the certificate is 814considered to be a "possible CA" other extensions are checked according 815to the intended use of the certificate. A warning is given in this case 816because the certificate should really not be regarded as a CA: however 817it is allowed to be a CA to work around some broken software. 818 819If the certificate is a V1 certificate (and thus has no extensions) and 820it is self signed it is also assumed to be a CA but a warning is again 821given: this is to work around the problem of Verisign roots which are V1 822self signed certificates. 823 824If the keyUsage extension is present then additional restraints are 825made on the uses of the certificate. A CA certificate B<must> have the 826keyCertSign bit set if the keyUsage extension is present. 827 828The extended key usage extension places additional restrictions on the 829certificate uses. If this extension is present (whether critical or not) 830the key can only be used for the purposes specified. 831 832A complete description of each test is given below. The comments about 833basicConstraints and keyUsage and V1 certificates above apply to B<all> 834CA certificates. 835 836 837=over 4 838 839=item B<SSL Client> 840 841The extended key usage extension must be absent or include the "web client 842authentication" OID. keyUsage must be absent or it must have the 843digitalSignature bit set. Netscape certificate type must be absent or it must 844have the SSL client bit set. 845 846=item B<SSL Client CA> 847 848The extended key usage extension must be absent or include the "web client 849authentication" OID. Netscape certificate type must be absent or it must have 850the SSL CA bit set: this is used as a work around if the basicConstraints 851extension is absent. 852 853=item B<SSL Server> 854 855The extended key usage extension must be absent or include the "web server 856authentication" and/or one of the SGC OIDs. keyUsage must be absent or it 857must have the digitalSignature, the keyEncipherment set or both bits set. 858Netscape certificate type must be absent or have the SSL server bit set. 859 860=item B<SSL Server CA> 861 862The extended key usage extension must be absent or include the "web server 863authentication" and/or one of the SGC OIDs. Netscape certificate type must 864be absent or the SSL CA bit must be set: this is used as a work around if the 865basicConstraints extension is absent. 866 867=item B<Netscape SSL Server> 868 869For Netscape SSL clients to connect to an SSL server it must have the 870keyEncipherment bit set if the keyUsage extension is present. This isn't 871always valid because some cipher suites use the key for digital signing. 872Otherwise it is the same as a normal SSL server. 873 874=item B<Common S/MIME Client Tests> 875 876The extended key usage extension must be absent or include the "email 877protection" OID. Netscape certificate type must be absent or should have the 878S/MIME bit set. If the S/MIME bit is not set in Netscape certificate type 879then the SSL client bit is tolerated as an alternative but a warning is shown: 880this is because some Verisign certificates don't set the S/MIME bit. 881 882=item B<S/MIME Signing> 883 884In addition to the common S/MIME client tests the digitalSignature bit or 885the nonRepudiation bit must be set if the keyUsage extension is present. 886 887=item B<S/MIME Encryption> 888 889In addition to the common S/MIME tests the keyEncipherment bit must be set 890if the keyUsage extension is present. 891 892=item B<S/MIME CA> 893 894The extended key usage extension must be absent or include the "email 895protection" OID. Netscape certificate type must be absent or must have the 896S/MIME CA bit set: this is used as a work around if the basicConstraints 897extension is absent. 898 899=item B<CRL Signing> 900 901The keyUsage extension must be absent or it must have the CRL signing bit 902set. 903 904=item B<CRL Signing CA> 905 906The normal CA tests apply. Except in this case the basicConstraints extension 907must be present. 908 909=back 910 911=head1 BUGS 912 913Extensions in certificates are not transferred to certificate requests and 914vice versa. 915 916It is possible to produce invalid certificates or requests by specifying the 917wrong private key or using inconsistent options in some cases: these should 918be checked. 919 920There should be options to explicitly set such things as start and end 921dates rather than an offset from the current time. 922 923=head1 SEE ALSO 924 925L<req(1)>, L<ca(1)>, L<genrsa(1)>, 926L<gendsa(1)>, L<verify(1)>, 927L<x509v3_config(5)> 928 929=head1 HISTORY 930 931The hash algorithm used in the B<-subject_hash> and B<-issuer_hash> options 932before OpenSSL 1.0.0 was based on the deprecated MD5 algorithm and the encoding 933of the distinguished name. In OpenSSL 1.0.0 and later it is based on a 934canonical version of the DN using SHA1. This means that any directories using 935the old form must have their links rebuilt using B<c_rehash> or similar. 936 937=head1 COPYRIGHT 938 939Copyright 2000-2022 The OpenSSL Project Authors. All Rights Reserved. 940 941Licensed under the OpenSSL license (the "License"). You may not use 942this file except in compliance with the License. You can obtain a copy 943in the file LICENSE in the source distribution or at 944L<https://www.openssl.org/source/license.html>. 945 946=cut 947