]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/apps/x509.pod
Add support for 'other' PKCS#7 content types.
[thirdparty/openssl.git] / doc / apps / x509.pod
CommitLineData
aba3e65f
DSH
1
2=pod
3
4=head1 NAME
5
6x509 - Certificate display and signing utility
7
8=head1 SYNOPSIS
9
10B<openssl> B<x509>
11[B<-inform DER|PEM|NET>]
12[B<-outform DER|PEM|NET>]
13[B<-keyform DER|PEM>]
14[B<-CAform DER|PEM>]
15[B<-CAkeyform DER|PEM>]
16[B<-in filename>]
17[B<-out filename>]
18[B<-serial>]
19[B<-hash>]
20[B<-subject>]
21[B<-issuer>]
bd4e1527 22[B<-nameopt option>]
a91dedca 23[B<-email>]
aba3e65f
DSH
24[B<-startdate>]
25[B<-enddate>]
26[B<-purpose>]
27[B<-dates>]
28[B<-modulus>]
29[B<-fingerprint>]
30[B<-alias>]
31[B<-noout>]
32[B<-trustout>]
33[B<-clrtrust>]
9868232a 34[B<-clrreject>]
aba3e65f 35[B<-addtrust arg>]
9868232a 36[B<-addreject arg>]
aba3e65f
DSH
37[B<-setalias arg>]
38[B<-days arg>]
39[B<-signkey filename>]
40[B<-x509toreq>]
41[B<-req>]
42[B<-CA filename>]
43[B<-CAkey filename>]
44[B<-CAcreateserial>]
45[B<-CAserial filename>]
46[B<-text>]
47[B<-C>]
48[B<-md2|-md5|-sha1|-mdc2>]
49[B<-clrext>]
50[B<-extfile filename>]
51[B<-extensions section>]
52
53=head1 DESCRIPTION
54
55The B<x509> command is a multi purpose certificate utility. It can be
56used to display certificate information, convert certificates to
57various forms, sign certificate requests like a "mini CA" or edit
58certificate trust settings.
59
60Since there are a large number of options they will split up into
61various sections.
62
63
9868232a 64=head1 INPUT, OUTPUT AND GENERAL PURPOSE OPTIONS
aba3e65f
DSH
65
66=over 4
67
68=item B<-inform DER|PEM|NET>
69
70This specifies the input format normally the command will expect an X509
71certificate but this can change if other options such as B<-req> are
72present. The DER format is the DER encoding of the certificate and PEM
73is the base64 encoding of the DER encoding with header and footer lines
74added. The NET option is an obscure Netscape server format that is now
75obsolete.
76
77=item B<-outform DER|PEM|NET>
78
79This specifies the output format, the options have the same meaning as the
80B<-inform> option.
81
82=item B<-in filename>
83
84This specifies the input filename to read a certificate from or standard input
85if this option is not specified.
86
87=item B<-out filename>
88
89This specifies the output filename to write to or standard output by
90default.
91
9868232a
DSH
92=item B<-md2|-md5|-sha1|-mdc2>
93
94the digest to use. This affects any signing or display option that uses a message
95digest, such as the B<-fingerprint>, B<-signkey> and B<-CA> options. If not
96specified then MD5 is used. If the key being used to sign with is a DSA key then
97this option has no effect: SHA1 is always used with DSA keys.
98
99
aba3e65f
DSH
100=back
101
102=head1 DISPLAY OPTIONS
103
104Note: the B<-alias> and B<-purpose> options are also display options
19d2bb57 105but are described in the B<TRUST OPTIONS> section.
aba3e65f
DSH
106
107=over 4
108
109=item B<-text>
110
111prints out the certificate in text form. Full details are output including the
112public key, signature algorithms, issuer and subject names, serial number
113any extensions present and any trust settings.
114
115=item B<-noout>
116
117this option prevents output of the encoded version of the request.
118
119=item B<-modulus>
120
121this option prints out the value of the modulus of the public key
122contained in the certificate.
123
124=item B<-serial>
125
126outputs the certificate serial number.
127
128=item B<-hash>
129
938ead8f
DSH
130outputs the "hash" of the certificate subject name. This is used in OpenSSL to
131form an index to allow certificates in a directory to be looked up by subject
aba3e65f
DSH
132name.
133
134=item B<-subject>
135
136outputs the subject name.
137
138=item B<-issuer>
139
140outputs the issuer name.
141
bd4e1527
DSH
142=item B<-nameopt option>
143
144option which determine how the subject or issuer names are displayed. This
145option may be used more than once to set multiple options. See the B<NAME
146OPTIONS> section for more information.
147
a91dedca
DSH
148=item B<-email>
149
150outputs the email address(es) if any.
151
aba3e65f
DSH
152=item B<-startdate>
153
154prints out the start date of the certificate, that is the notBefore date.
155
156=item B<-enddate>
157
158prints out the expiry date of the certificate, that is the notAfter date.
159
160=item B<-dates>
161
162prints out the start and expiry dates of a certificate.
163
164=item B<-fingerprint>
165
9868232a 166prints out the digest of the DER encoded version of the whole certificate.
aba3e65f
DSH
167
168=item B<-C>
169
170this outputs the certificate in the form of a C source file.
171
172=back
173
174=head1 TRUST SETTINGS
175
176Please note these options are currently experimental and may well change.
177
178A B<trusted certificate> is an ordinary certificate which has several
179additional pieces of information attached to it such as the permitted
180and prohibited uses of the certificate and an "alias".
181
182Normally when a certificate is being verified at least one certificate
183must be "trusted". By default a trusted certificate must be stored
184locally and must be a root CA: any certificate chain ending in this CA
185is then usable for any purpose.
186
13938ace
DSH
187Trust settings currently are only used with a root CA. They allow a finer
188control over the purposes the root CA can be used for. For example a CA
189may be trusted for SSL client but not SSL server use.
aba3e65f
DSH
190
191See the description of the B<verify> utility for more information on the
192meaning of trust settings.
193
657e60fa 194Future versions of OpenSSL will recognize trust settings on any
13938ace
DSH
195certificate: not just root CAs.
196
197
aba3e65f
DSH
198=over 4
199
200=item B<-trustout>
201
202this causes B<x509> to output a B<trusted> certificate. An ordinary
203or trusted certificate can be input but by default an ordinary
204certificate is output and any trust settings are discarded. With the
205B<-trustout> option a trusted certificate is output. A trusted
206certificate is automatically output if any trust settings are modified.
207
208=item B<-setalias arg>
209
210sets the alias of the certificate. This will allow the certificate
19d2bb57 211to be referred to using a nickname for example "Steve's Certificate".
aba3e65f
DSH
212
213=item B<-alias>
214
215outputs the certificate alias, if any.
216
217=item B<-clrtrust>
218
219clears all the permitted or trusted uses of the certificate.
220
9868232a 221=item B<-clrreject>
aba3e65f 222
13938ace 223clears all the prohibited or rejected uses of the certificate.
aba3e65f
DSH
224
225=item B<-addtrust arg>
226
555b22cf
DSH
227adds a trusted certificate use. Any object name can be used here
228but currently only B<clientAuth> (SSL client use), B<serverAuth>
229(SSL server use) and B<emailProtection> (S/MIME email) are used.
230Other OpenSSL applications may define additional uses.
aba3e65f 231
9868232a 232=item B<-addreject arg>
aba3e65f
DSH
233
234adds a prohibited use. It accepts the same values as the B<-addtrust>
235option.
236
237=item B<-purpose>
238
239this option performs tests on the certificate extensions and outputs
5f2f0b55
DSH
240the results. For a more complete description see the B<CERTIFICATE
241EXTENSIONS> section.
aba3e65f
DSH
242
243=back
244
245=head1 SIGNING OPTIONS
246
247The B<x509> utility can be used to sign certificates and requests: it
248can thus behave like a "mini CA".
249
250=over 4
251
252=item B<-signkey filename>
253
254this option causes the input file to be self signed using the supplied
255private key.
256
257If the input file is a certificate it sets the issuer name to the
258subject name (i.e. makes it self signed) changes the public key to the
259supplied value and changes the start and end dates. The start date is
260set to the current time and the end date is set to a value determined
261by the B<-days> option. Any certificate extensions are retained unless
262the B<-clrext> option is supplied.
263
264If the input is a certificate request then a self signed certificate
265is created using the supplied private key using the subject name in
266the request.
267
268=item B<-clrext>
269
270delete any extensions from a certificate. This option is used when a
271certificate is being created from another certificate (for example with
272the B<-signkey> or the B<-CA> options). Normally all extensions are
273retained.
274
275=item B<-keyform PEM|DER>
276
277specifies the format (DER or PEM) of the private key file used in the
278B<-signkey> option.
279
280=item B<-days arg>
281
282specifies the number of days to make a certificate valid for. The default
283is 30 days.
284
285=item B<-x509toreq>
286
287converts a certificate into a certificate request. The B<-signkey> option
288is used to pass the required private key.
289
290=item B<-req>
291
292by default a certificate is expected on input. With this option a
293certificate request is expected instead.
294
295=item B<-CA filename>
296
297specifies the CA certificate to be used for signing. When this option is
298present B<x509> behaves like a "mini CA". The input file is signed by this
299CA using this option: that is its issuer name is set to the subject name
300of the CA and it is digitally signed using the CAs private key.
301
302This option is normally combined with the B<-req> option. Without the
303B<-req> option the input is a certificate which must be self signed.
304
305=item B<-CAkey filename>
306
307sets the CA private key to sign a certificate with. If this option is
308not specified then it is assumed that the CA private key is present in
309the CA certificate file.
310
311=item B<-CAserial filename>
312
313sets the CA serial number file to use.
314
315When the B<-CA> option is used to sign a certificate it uses a serial
316number specified in a file. This file consist of one line containing
317an even number of hex digits with the serial number to use. After each
318use the serial number is incremented and written out to the file again.
319
320The default filename consists of the CA certificate file base name with
321".srl" appended. For example if the CA certificate file is called
322"mycacert.pem" it expects to find a serial number file called "mycacert.srl".
323
324=item B<-CAcreateserial filename>
325
326with this option the CA serial number file is created if it does not exist:
8100490a
DSH
327it will contain the serial number "02" and the certificate being signed will
328have the 1 as its serial number. Normally if the B<-CA> option is specified
329and the serial number file does not exist it is an error.
aba3e65f 330
aba3e65f
DSH
331=item B<-extfile filename>
332
333file containing certificate extensions to use. If not specified then
334no extensions are added to the certificate.
335
336=item B<-extensions section>
337
338the section to add certificate extensions from. If this option is not
339specified then the extensions should either be contained in the unnamed
340(default) section or the default section should contain a variable called
341"extensions" which contains the section to use.
342
343=back
344
bd4e1527
DSH
345=head1 NAME OPTIONS
346
347The B<nameopt> command line switch determines how the subject and issuer
348names are displayed. If no B<nameopt> switch is present the default "oneline"
349format is used which is compatible with previous versions of OpenSSL.
350Each option is described in detail below, all options can be preceded by
351a B<-> to turn the option off. Only the first four will normally be used.
352
353=over 4
354
355=item B<compat>
356
357use the old format. This is equivalent to specifying no name options at all.
358
359=item B<RFC2253>
360
361displays names compatible with RFC2253 equivalent to B<esc_2253>, B<esc_ctrl>,
362B<esc_msb>, B<utf8>, B<dump_nostr>, B<dump_unknown>, B<dump_der>,
363B<sep_comma_plus>, B<dn_rev> and B<sname>.
364
365=item B<oneline>
366
367a oneline format which is more readable than RFC2253. It is equivalent to
368specifying the B<esc_2253>, B<esc_ctrl>, B<esc_msb>, B<utf8>, B<dump_nostr>,
369B<dump_der>, B<use_quote>, B<sep_comma_plus_spc>, B<spc_eq> and B<sname>
370options.
371
372=item B<multiline>
373
374a multiline format. It is equivalent B<esc_ctrl>, B<esc_msb>, B<sep_multiline>,
375B<spc_eq> and B<lname>.
376
377=item B<esc_2253>
378
379escape the "special" characters required by RFC2253 in a field That is
380B<,+"E<lt>E<gt>;>. Additionally B<#> is escaped at the beginnging of a string
381and a space character at the beginning or end of a string.
382
383=item B<esc_ctrl>
384
385escape and control characters. That is those with ASCII values less than
3860x20 (space) and the delete (0x7f) character. They are escaped using the
387RFC2253 \XX notation (where XX are two hex digits representing the
388character value).
389
390=item B<esc_msb>
391
392escape characters with the MSB set, that is with ASCII values larger than
393127.
394
395=item B<use_quote>
396
397escapes some characters by surrounding the whole string with B<"> characters,
398without the option all escaping is done with the B<\> character.
399
400=item B<utf8>
401
402convert all strings to UTF8 format first. This is required by RFC2253. If
403you are lucky enough to have a UTF8 compatible terminal then the use
404of this option (and B<not> setting B<esc_msb>) may result in the correct
405display of multibyte (international) characters. Is this option is not
406present then multibyte characters larger than 0xff will be represented
407using the format \UXXXX for 16 bits and \WXXXXXXXX for 32 bits.
408Also if this option is off any UTF8Strings will be converted to their
409character form first.
410
411=item B<no_type>
412
413this option does not attempt to interpret multibyte characters in any
414way. That is their content octets are merely dumped as though one octet
415represents each character. This is useful for diagnostic purposes but
416will result in rather odd looking output.
417
418=item B<show_type>
419
420show the type of the ASN1 character string. The type precedes the
421field contents. For example "BMPSTRING: Hello World".
422
423=item B<dump_der>
424
425when this option is set any fields that need to be hexdumped will
426be dumped using the DER encoding of the field. Otherwise just the
427content octets will be displayed. Both options use the RFC2253
428B<#XXXX...> format.
429
430=item B<dump_nostr>
431
432dump non character string types (for example OCTET STRING) if this
433option is not set then non character string types will be displayed
434as though each content octet repesents a single character.
435
436=item B<dump_all>
437
438dump all fields. This option when used with B<dump_der> allows the
439DER encoding of the structure to be unambiguously determined.
440
441=item B<dump_unknown>
442
443dump any field whose OID is not recognised by OpenSSL.
444
445=item B<sep_comma_plus>, B<sep_comma_plus_space>, B<sep_semi_plus_space>,
446B<sep_multiline>
447
448these options determine the field separators. The first character is
449between RDNs and the second between multiple AVAs (multiple AVAs are
450very rare and their use is discouraged). The options ending in
451"space" additionally place a space after the separator to make it
452more readable. The B<sep_multiline> uses a linefeed character for
453the RDN separator and a spaced B<+> for the AVA separator. It also
454indents the fields by four characters.
455
456=item B<dn_rev>
457
458reverse the fields of the DN. This is required by RFC2253. As a side
459effect this also reveress the order of multiple AVAs but this is
460permissible.
461
462=item B<nofname>, B<sname>, B<lname>, B<oid>
463
464these options alter how the field name is displayed. B<nofname> does
465not display the field at all. B<sname> uses the "short name" form
466(CN for commonName for example). B<lname> uses the long form.
467B<oid> represents the OID in numerical form and is useful for
468diagnostic purpose.
469
470=item B<spc_eq>
471
472places spaces round the B<=> character which follows the field
473name.
474
475=back
476
aba3e65f
DSH
477=head1 EXAMPLES
478
479Note: in these examples the '\' means the example should be all on one
480line.
481
482Display the contents of a certificate:
483
1675f6eb 484 openssl x509 -in cert.pem -noout -text
aba3e65f 485
9868232a 486Display the certificate serial number:
aba3e65f 487
1675f6eb 488 openssl x509 -in cert.pem -noout -serial
aba3e65f 489
bd4e1527
DSH
490Display the certificate subject name:
491
492 openssl x509 -in cert.pem -noout -subject
493
494Display the certificate subject name in RFC2253 form:
495
496 openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
497
498Display the certificate subject name in oneline form on a terminal
499supporting UTF8:
500
501 openssl x509 -in cert.pem -noout -subject -nameopt oneline -nameopt -escmsb
502
9868232a
DSH
503Display the certificate MD5 fingerprint:
504
1675f6eb 505 openssl x509 -in cert.pem -noout -fingerprint
9868232a
DSH
506
507Display the certificate SHA1 fingerprint:
508
1675f6eb 509 openssl x509 -sha1 -in cert.pem -noout -fingerprint
aba3e65f
DSH
510
511Convert a certificate from PEM to DER format:
512
1675f6eb 513 openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
aba3e65f
DSH
514
515Convert a certificate to a certificate request:
516
1675f6eb 517 openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
aba3e65f
DSH
518
519Convert a certificate request into a self signed certificate using
520extensions for a CA:
521
1675f6eb
RL
522 openssl x509 -req -in careq.pem -config openssl.cnf -extensions v3_ca \
523 -signkey key.pem -out cacert.pem
aba3e65f 524
19d2bb57 525Sign a certificate request using the CA certificate above and add user
aba3e65f
DSH
526certificate extensions:
527
1675f6eb
RL
528 openssl x509 -req -in req.pem -config openssl.cnf -extensions v3_usr \
529 -CA cacert.pem -CAkey key.pem -CAcreateserial
aba3e65f
DSH
530
531
532Set a certificate to be trusted for SSL client use and change set its alias to
533"Steve's Class 1 CA"
534
1675f6eb
RL
535 openssl x509 -in cert.pem -addtrust sslclient \
536 -alias "Steve's Class 1 CA" -out trust.pem
aba3e65f 537
0286d944
DSH
538=head1 NOTES
539
540The PEM format uses the header and footer lines:
541
542 -----BEGIN CERTIFICATE----
543 -----END CERTIFICATE----
544
545it will also handle files containing:
546
547 -----BEGIN X509 CERTIFICATE----
548 -----END X509 CERTIFICATE----
549
9868232a
DSH
550Trusted certificates have the lines
551
552 -----BEGIN TRUSTED CERTIFICATE----
553 -----END TRUSTED CERTIFICATE----
554
bd4e1527
DSH
555The conversion to UTF8 format used with the name options assumes that
556T61Strings use the ISO8859-1 character set. This is wrong but Netscape
557and MSIE do this as do many certificates. So although this is incorrect
558it is more likely to display the majority of certificates correctly.
559
9868232a
DSH
560The B<-fingerprint> option takes the digest of the DER encoded certificate.
561This is commonly called a "fingerprint". Because of the nature of message
562digests the fingerprint of a certificate is unique to that certificate and
563two certificates with the same fingerprint can be considered to be the same.
564
565The Netscape fingerprint uses MD5 whereas MSIE uses SHA1.
566
a91dedca
DSH
567The B<-email> option searches the subject name and the subject alternative
568name extension. Only unique email addresses will be printed out: it will
569not print the same address more than once.
570
5f2f0b55
DSH
571=head1 CERTIFICATE EXTENSIONS
572
573The B<-purpose> option checks the certificate extensions and determines
574what the certificate can be used for. The actual checks done are rather
575complex and include various hacks and workarounds to handle broken
576certificates and software.
577
578The same code is used when verifying untrusted certificates in chains
579so this section is useful if a chain is rejected by the verify code.
580
581The basicConstraints extension CA flag is used to determine whether the
582certificate can be used as a CA. If the CA flag is true then it is a CA,
583if the CA flag is false then it is not a CA. B<All> CAs should have the
584CA flag set to true.
585
586If the basicConstraints extension is absent then the certificate is
587considered to be a "possible CA" other extensions are checked according
588to the intended use of the certificate. A warning is given in this case
589because the certificate should really not be regarded as a CA: however
590it is allowed to be a CA to work around some broken software.
591
592If the certificate is a V1 certificate (and thus has no extensions) and
593it is self signed it is also assumed to be a CA but a warning is again
594given: this is to work around the problem of Verisign roots which are V1
595self signed certificates.
596
597If the keyUsage extension is present then additional restraints are
598made on the uses of the certificate. A CA certificate B<must> have the
599keyCertSign bit set if the keyUsage extension is present.
600
601The extended key usage extension places additional restrictions on the
602certificate uses. If this extension is present (whether critical or not)
603the key can only be used for the purposes specified.
604
605A complete description of each test is given below. The comments about
606basicConstraints and keyUsage and V1 certificates above apply to B<all>
607CA certificates.
608
609
610=over 4
611
612=item B<SSL Client>
613
614The extended key usage extension must be absent or include the "web client
615authentication" OID. keyUsage must be absent or it must have the
616digitalSignature bit set. Netscape certificate type must be absent or it must
617have the SSL client bit set.
618
619=item B<SSL Client CA>
620
621The extended key usage extension must be absent or include the "web client
622authentication" OID. Netscape certificate type must be absent or it must have
623the SSL CA bit set: this is used as a work around if the basicConstraints
624extension is absent.
625
626=item B<SSL Server>
627
628The extended key usage extension must be absent or include the "web server
629authentication" and/or one of the SGC OIDs. keyUsage must be absent or it
630must have the digitalSignature, the keyEncipherment set or both bits set.
631Netscape certificate type must be absent or have the SSL server bit set.
632
633=item B<SSL Server CA>
634
635The extended key usage extension must be absent or include the "web server
636authentication" and/or one of the SGC OIDs. Netscape certificate type must
637be absent or the SSL CA bit must be set: this is used as a work around if the
638basicConstraints extension is absent.
639
640=item B<Netscape SSL Server>
641
642For Netscape SSL clients to connect to an SSL server it must have the
643keyEncipherment bit set if the keyUsage extension is present. This isn't
644always valid because some cipher suites use the key for digital signing.
645Otherwise it is the same as a normal SSL server.
646
647=item B<Common S/MIME Client Tests>
648
649The extended key usage extension must be absent or include the "email
650protection" OID. Netscape certificate type must be absent or should have the
651S/MIME bit set. If the S/MIME bit is not set in netscape certificate type
652then the SSL client bit is tolerated as an alternative but a warning is shown:
653this is because some Verisign certificates don't set the S/MIME bit.
654
655=item B<S/MIME Signing>
656
657In addition to the common S/MIME client tests the digitalSignature bit must
658be set if the keyUsage extension is present.
659
660=item B<S/MIME Encryption>
661
662In addition to the common S/MIME tests the keyEncipherment bit must be set
663if the keyUsage extension is present.
664
665=item B<S/MIME CA>
666
667The extended key usage extension must be absent or include the "email
668protection" OID. Netscape certificate type must be absent or must have the
669S/MIME CA bit set: this is used as a work around if the basicConstraints
670extension is absent.
671
672=item B<CRL Signing>
673
674The keyUsage extension must be absent or it must have the CRL signing bit
675set.
676
677=item B<CRL Signing CA>
678
679The normal CA tests apply. Except in this case the basicConstraints extension
680must be present.
681
682=back
683
aba3e65f
DSH
684=head1 BUGS
685
aba3e65f
DSH
686Extensions in certificates are not transferred to certificate requests and
687vice versa.
688
689It is possible to produce invalid certificates or requests by specifying the
690wrong private key or using inconsistent options in some cases: these should
691be checked.
692
9868232a 693There should be options to explicitly set such things as start and end
aba3e65f
DSH
694dates rather than an offset from the current time.
695
696The code to implement the verify behaviour described in the B<TRUST SETTINGS>
697is currently being developed. It thus describes the intended behavior rather
698than the current behaviour. It is hoped that it will represent reality in
699OpenSSL 0.9.5 and later.
700
aba3e65f
DSH
701=head1 SEE ALSO
702
bb075f88
RL
703L<req(1)|req(1)>, L<ca(1)|ca(1)>, L<genrsa(1)|genrsa(1)>,
704L<gendsa(1)|gendsa(1)>, L<verify(1)|verify(1)>
aba3e65f
DSH
705
706=cut