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