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