]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man1/openssl-ca.pod
Consistent formatting of flags with args
[thirdparty/openssl.git] / doc / man1 / openssl-ca.pod
CommitLineData
aba3e65f
DSH
1=pod
2
3=head1 NAME
4
b6b66573 5openssl-ca - sample minimal CA application
aba3e65f
DSH
6
7=head1 SYNOPSIS
8
9B<openssl> B<ca>
169394d4 10[B<-help>]
aba3e65f 11[B<-verbose>]
e8769719
RS
12[B<-config> I<filename>]
13[B<-name> I<section>]
aba3e65f 14[B<-gencrl>]
e8769719
RS
15[B<-revoke> I<file>]
16[B<-valid> I<file>]
17[B<-status> I<serial>]
fc1d88f0 18[B<-updatedb>]
e8769719
RS
19[B<-crl_reason> I<reason>]
20[B<-crl_hold> I<instruction>]
21[B<-crl_compromise> I<time>]
22[B<-crl_CA_compromise> I<time>]
23[B<-crldays> I<days>]
24[B<-crlhours> I<hours>]
25[B<-crlexts> I<section>]
26[B<-startdate> I<date>]
27[B<-enddate> I<date>]
28[B<-days> I<arg>]
29[B<-md> I<arg>]
30[B<-policy> I<arg>]
31[B<-keyfile> I<arg>]
32[B<-keyform> B<DER>|B<PEM>]
33[B<-key> I<arg>]
34[B<-passin> I<arg>]
35[B<-cert> I<file>]
d6df2b28 36[B<-selfsign>]
e8769719
RS
37[B<-in> I<file>]
38[B<-out> I<file>]
82fc1d9c 39[B<-notext>]
e8769719 40[B<-outdir> I<dir>]
aba3e65f 41[B<-infiles>]
e8769719
RS
42[B<-spkac> I<file>]
43[B<-ss_cert> I<file>]
aba3e65f 44[B<-preserveDN>]
89da653f 45[B<-noemailDN>]
aba3e65f
DSH
46[B<-batch>]
47[B<-msie_hack>]
e8769719
RS
48[B<-extensions> I<section>]
49[B<-extfile> I<section>]
50[B<-engine> I<id>]
51[B<-subj> I<arg>]
57eb1d32 52[B<-utf8>]
e8769719 53[B<-sigopt> I<nm>:I<v>]
6755ff11 54[B<-create_serial>]
ffb46830 55[B<-rand_serial>]
57eb1d32 56[B<-multivalue-rdn>]
e8769719
RS
57[B<-rand> I<file>]
58[B<-writerand> I<file>]
59[B<-sm2-id> I<string>]
60[B<-sm2-hex-id> I<hex-string>]
aba3e65f
DSH
61
62=head1 DESCRIPTION
63
64The B<ca> command is a minimal CA application. It can be used
65to sign certificate requests in a variety of forms and generate
66CRLs it also maintains a text database of issued certificates
67and their status.
68
69The options descriptions will be divided into each purpose.
70
3dfda1a6 71=head1 OPTIONS
aba3e65f
DSH
72
73=over 4
74
6755ff11
MR
75=item B<-help>
76
77Print out a usage message.
78
79=item B<-verbose>
80
c4de074e 81This prints extra details about the operations being performed.
6755ff11 82
e8769719 83=item B<-config> I<filename>
aba3e65f 84
c4de074e 85Specifies the configuration file to use.
e9681f83
RS
86Optional; for a description of the default value,
87see L<openssl(1)/COMMAND SUMMARY>.
aba3e65f 88
e8769719 89=item B<-name> I<section>
8a0a9392 90
c4de074e 91Specifies the configuration file section to use (overrides
8a0a9392
BM
92B<default_ca> in the B<ca> section).
93
e8769719 94=item B<-in> I<filename>
aba3e65f 95
c4de074e 96An input filename containing a single certificate request to be
aba3e65f
DSH
97signed by the CA.
98
e8769719 99=item B<-ss_cert> I<filename>
aba3e65f 100
c4de074e 101A single self-signed certificate to be signed by the CA.
aba3e65f 102
e8769719 103=item B<-spkac> I<filename>
aba3e65f 104
c4de074e 105A file containing a single Netscape signed public key and challenge
d618f703 106and additional field values to be signed by the CA. See the B<SPKAC FORMAT>
fc1d88f0 107section for information on the required input and output format.
aba3e65f
DSH
108
109=item B<-infiles>
110
c4de074e 111If present this should be the last option, all subsequent arguments
1bc74519 112are taken as the names of files containing certificate requests.
aba3e65f 113
e8769719 114=item B<-out> I<filename>
aba3e65f 115
c4de074e 116The output file to output certificates to. The default is standard
aba3e65f 117output. The certificate details will also be printed out to this
fc1d88f0 118file in PEM format (except that B<-spkac> outputs DER format).
aba3e65f 119
e8769719 120=item B<-outdir> I<directory>
aba3e65f 121
c4de074e 122The directory to output certificates to. The certificate will be
aba3e65f
DSH
123written to a filename consisting of the serial number in hex with
124".pem" appended.
125
126=item B<-cert>
127
c4de074e 128The CA certificate file.
aba3e65f 129
e8769719 130=item B<-keyfile> I<filename>
aba3e65f 131
c4de074e 132The private key to sign requests with.
aba3e65f 133
e8769719 134=item B<-keyform> B<DER>|B<PEM>
fc1d88f0 135
c4de074e 136The format of the data in the private key file.
fc1d88f0
RS
137The default is PEM.
138
e8769719 139=item B<-sigopt> I<nm>:I<v>
d7b2124a
P
140
141Pass options to the signature algorithm during sign or verify operations.
142Names and values of these options are algorithm-specific.
143
e8769719 144=item B<-key> I<password>
aba3e65f 145
c4de074e 146The password used to encrypt the private key. Since on some
aba3e65f
DSH
147systems the command line arguments are visible (e.g. Unix with
148the 'ps' utility) this option should be used with caution.
149
d6df2b28
RL
150=item B<-selfsign>
151
c4de074e 152Indicates the issued certificates are to be signed with the key
d6df2b28 153the certificate requests were signed with (given with B<-keyfile>).
42b91f28 154Certificate requests signed with a different key are ignored. If
d6df2b28
RL
155B<-spkac>, B<-ss_cert> or B<-gencrl> are given, B<-selfsign> is
156ignored.
157
158A consequence of using B<-selfsign> is that the self-signed
159certificate appears among the entries in the certificate database
160(see the configuration option B<database>), and uses the same
161serial number counter as all other certificates sign with the
162self-signed certificate.
163
e8769719 164=item B<-passin> I<arg>
bd08a2bd 165
c4de074e 166The key password source. For more information about the format of B<arg>
e8769719 167see L<openssl(1)/Pass phrase options>.
bad40585 168
82fc1d9c
DSH
169=item B<-notext>
170
c4de074e 171Don't output the text form of a certificate to the output file.
82fc1d9c 172
e8769719 173=item B<-startdate> I<date>
aba3e65f 174
c4de074e 175This allows the start date to be explicitly set. The format of the
909873bd
PY
176date is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure), or
177YYYYMMDDHHMMSSZ (the same as an ASN1 GeneralizedTime structure). In
a970b14f 178both formats, seconds SS and timezone Z must be present.
aba3e65f 179
e8769719 180=item B<-enddate> I<date>
aba3e65f 181
c4de074e 182This allows the expiry date to be explicitly set. The format of the
909873bd
PY
183date is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure), or
184YYYYMMDDHHMMSSZ (the same as an ASN1 GeneralizedTime structure). In
a970b14f 185both formats, seconds SS and timezone Z must be present.
aba3e65f 186
e8769719 187=item B<-days> I<arg>
aba3e65f 188
c4de074e 189The number of days to certify the certificate for.
aba3e65f 190
e8769719 191=item B<-md> I<alg>
aba3e65f 192
c4de074e 193The message digest to use.
aabbc24e
MC
194Any digest supported by the OpenSSL B<dgst> command can be used. For signing
195algorithms that do not support a digest (i.e. Ed25519 and Ed448) any message
196digest that is set is ignored. This option also applies to CRLs.
aba3e65f 197
e8769719 198=item B<-policy> I<arg>
aba3e65f 199
c4de074e 200This option defines the CA "policy" to use. This is a section in
aba3e65f
DSH
201the configuration file which decides which fields should be mandatory
202or match the CA certificate. Check out the B<POLICY FORMAT> section
203for more information.
204
205=item B<-msie_hack>
206
a95d7574 207This is a deprecated option to make B<ca> work with very old versions of
aba3e65f
DSH
208the IE certificate enrollment control "certenr3". It used UniversalStrings
209for almost everything. Since the old control has various security bugs
a95d7574 210its use is strongly discouraged.
aba3e65f
DSH
211
212=item B<-preserveDN>
213
53b1899e 214Normally the DN order of a certificate is the same as the order of the
1bc74519 215fields in the relevant policy section. When this option is set the order
19d2bb57 216is the same as the request. This is largely for compatibility with the
53b1899e
DSH
217older IE enrollment control which would only accept certificates if their
218DNs match the order of the request. This is not needed for Xenroll.
aba3e65f 219
89da653f
BM
220=item B<-noemailDN>
221
222The DN of a certificate can contain the EMAIL field if present in the
223request DN, however it is good policy just having the e-mail set into
224the altName extension of the certificate. When this option is set the
225EMAIL field is removed from the certificate' subject and set only in
226the, eventually present, extensions. The B<email_in_dn> keyword can be
227used in the configuration file to enable this behaviour.
228
aba3e65f
DSH
229=item B<-batch>
230
c4de074e 231This sets the batch mode. In this mode no questions will be asked
aba3e65f
DSH
232and all certificates will be certified automatically.
233
e8769719 234=item B<-extensions> I<section>
aba3e65f 235
c4de074e 236The section of the configuration file containing certificate extensions
dfebac32
BM
237to be added when a certificate is issued (defaults to B<x509_extensions>
238unless the B<-extfile> option is used). If no extension section is
239present then, a V1 certificate is created. If the extension section
143b6316 240is present (even if it is empty), then a V3 certificate is created. See the
9b86974e 241L<x509v3_config(5)> manual page for details of the
137de5b1 242extension section format.
dfebac32 243
e8769719 244=item B<-extfile> I<file>
dfebac32 245
c4de074e 246An additional configuration file to read certificate extensions from
dfebac32
BM
247(using the default section unless the B<-extensions> option is also
248used).
aba3e65f 249
e8769719 250=item B<-engine> I<id>
bfa35550 251
c4de074e 252Specifying an engine (by its unique B<id> string) will cause B<ca>
bfa35550
RL
253to attempt to obtain a functional reference to the specified engine,
254thus initialising it if needed. The engine will then be set as the default
255for all available algorithms.
256
e8769719 257=item B<-subj> I<arg>
57eb1d32 258
c4de074e 259Supersedes subject name given in the request.
3d362f19
BK
260The arg must be formatted as I</type0=value0/type1=value1/type2=...>.
261Keyword characters may be escaped by \ (backslash), and whitespace is retained.
262Empty values are permitted, but the corresponding type will not be included
263in the resulting certificate.
57eb1d32
NL
264
265=item B<-utf8>
266
c4de074e 267This option causes field values to be interpreted as UTF8 strings, by
57eb1d32
NL
268default they are interpreted as ASCII. This means that the field
269values, whether prompted from a terminal or obtained from a
270configuration file, must be valid UTF8 strings.
271
6755ff11
MR
272=item B<-create_serial>
273
c4de074e 274If reading serial from the text file as specified in the configuration
6755ff11
MR
275fails, specifying this option creates a new random serial to be used as next
276serial number.
ffb46830
RS
277To get random serial numbers, use the B<-rand_serial> flag instead; this
278should only be used for simple error-recovery.
279
280=item B<-rand_serial>
281
282Generate a large random number to use as the serial number.
283This overrides any option or configuration to use a serial number file.
6755ff11 284
57eb1d32
NL
285=item B<-multivalue-rdn>
286
4c583c36 287This option causes the -subj argument to be interpreted with full
57eb1d32
NL
288support for multivalued RDNs. Example:
289
290I</DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe>
291
292If -multi-rdn is not used then the UID value is I<123456+CN=John Doe>.
293
e8769719 294=item B<-rand> I<file>
3ee1eac2
RS
295
296A file or files containing random data used to seed the random number
297generator.
298Multiple files can be specified separated by an OS-dependent character.
299The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
300all others.
301
e8769719 302=item B<-writerand> I<file>
3ee1eac2
RS
303
304Writes random data to the specified I<file> upon exit.
305This can be used with a subsequent B<-rand> flag.
306
e8769719 307=item B<-sm2-id> I<string>
bc42bd62
PY
308
309Specify the ID string to use when verifying an SM2 certificate. The ID string is
310required by the SM2 signature algorithm for signing and verification.
311
e8769719 312=item B<-sm2-hex-id> I<hex-string>
bc42bd62
PY
313
314Specify a binary ID string to use when signing or verifying using an SM2
315certificate. The argument for this option is string of hexadecimal digits.
316
aba3e65f
DSH
317=back
318
319=head1 CRL OPTIONS
320
321=over 4
322
323=item B<-gencrl>
324
c4de074e 325This option generates a CRL based on information in the index file.
aba3e65f 326
e8769719 327=item B<-crldays> I<num>
aba3e65f 328
c4de074e 329The number of days before the next CRL is due. That is the days from
aba3e65f
DSH
330now to place in the CRL nextUpdate field.
331
e8769719 332=item B<-crlhours> I<num>
aba3e65f 333
c4de074e 334The number of hours before the next CRL is due.
aba3e65f 335
e8769719 336=item B<-revoke> I<filename>
aba3e65f 337
c4de074e 338A filename containing a certificate to revoke.
aba3e65f 339
e8769719 340=item B<-valid> I<filename>
b4b42ce6 341
c4de074e 342A filename containing a certificate to add a Valid certificate entry.
b4b42ce6 343
e8769719 344=item B<-status> I<serial>
fc1d88f0 345
c4de074e 346Displays the revocation status of the certificate with the specified
fc1d88f0
RS
347serial number and exits.
348
349=item B<-updatedb>
350
351Updates the database index to purge expired certificates.
352
e8769719 353=item B<-crl_reason> I<reason>
d618f703 354
c4de074e 355Revocation reason, where B<reason> is one of: B<unspecified>, B<keyCompromise>,
d618f703
DSH
356B<CACompromise>, B<affiliationChanged>, B<superseded>, B<cessationOfOperation>,
357B<certificateHold> or B<removeFromCRL>. The matching of B<reason> is case
358insensitive. Setting any revocation reason will make the CRL v2.
359
42b91f28 360In practice B<removeFromCRL> is not particularly useful because it is only used
d618f703
DSH
361in delta CRLs which are not currently implemented.
362
e8769719 363=item B<-crl_hold> I<instruction>
d618f703
DSH
364
365This sets the CRL revocation reason code to B<certificateHold> and the hold
366instruction to B<instruction> which must be an OID. Although any OID can be
367used only B<holdInstructionNone> (the use of which is discouraged by RFC2459)
368B<holdInstructionCallIssuer> or B<holdInstructionReject> will normally be used.
369
e8769719 370=item B<-crl_compromise> I<time>
d618f703
DSH
371
372This sets the revocation reason to B<keyCompromise> and the compromise time to
373B<time>. B<time> should be in GeneralizedTime format that is B<YYYYMMDDHHMMSSZ>.
374
e8769719 375=item B<-crl_CA_compromise> I<time>
d618f703
DSH
376
377This is the same as B<crl_compromise> except the revocation reason is set to
378B<CACompromise>.
379
e8769719 380=item B<-crlexts> I<section>
aba3e65f 381
c4de074e 382The section of the configuration file containing CRL extensions to
aba3e65f
DSH
383include. If no CRL extension section is present then a V1 CRL is
384created, if the CRL extension section is present (even if it is
385empty) then a V2 CRL is created. The CRL extensions specified are
386CRL extensions and B<not> CRL entry extensions. It should be noted
137de5b1 387that some software (for example Netscape) can't handle V2 CRLs. See
9b86974e 388L<x509v3_config(5)> manual page for details of the
137de5b1 389extension section format.
aba3e65f
DSH
390
391=back
392
393=head1 CONFIGURATION FILE OPTIONS
394
8a0a9392
BM
395The section of the configuration file containing options for B<ca>
396is found as follows: If the B<-name> command line option is used,
397then it names the section to be used. Otherwise the section to
398be used must be named in the B<default_ca> option of the B<ca> section
399of the configuration file (or in the default section of the
400configuration file). Besides B<default_ca>, the following options are
401read directly from the B<ca> section:
402 RANDFILE
403 preserve
404 msie_hack
405With the exception of B<RANDFILE>, this is probably a bug and may
406change in future releases.
407
408Many of the configuration file options are identical to command line
aba3e65f
DSH
409options. Where the option is present in the configuration file
410and the command line the command line value is used. Where an
411option is described as mandatory then it must be present in
412the configuration file or the command line equivalent (if
413any) used.
414
415=over 4
416
5e76807b
DSH
417=item B<oid_file>
418
419This specifies a file containing additional B<OBJECT IDENTIFIERS>.
420Each line of the file should consist of the numerical form of the
421object identifier followed by white space then the short name followed
1bc74519 422by white space and finally the long name.
5e76807b
DSH
423
424=item B<oid_section>
425
426This specifies a section in the configuration file containing extra
427object identifiers. Each line should consist of the short name of the
428object identifier followed by B<=> and the numerical form. The short
429and long names are the same when this option is used.
430
aba3e65f
DSH
431=item B<new_certs_dir>
432
c4de074e 433The same as the B<-outdir> command line option. It specifies
aba3e65f
DSH
434the directory where new certificates will be placed. Mandatory.
435
436=item B<certificate>
437
c4de074e 438The same as B<-cert>. It gives the file containing the CA
aba3e65f
DSH
439certificate. Mandatory.
440
441=item B<private_key>
442
c4de074e 443Same as the B<-keyfile> option. The file containing the
aba3e65f
DSH
444CA private key. Mandatory.
445
446=item B<RANDFILE>
447
3ee1eac2
RS
448At startup the specified file is loaded into the random number generator,
449and at exit 256 bytes will be written to it.
aba3e65f
DSH
450
451=item B<default_days>
452
c4de074e 453The same as the B<-days> option. The number of days to certify
1bc74519 454a certificate for.
aba3e65f
DSH
455
456=item B<default_startdate>
457
c4de074e 458The same as the B<-startdate> option. The start date to certify
aba3e65f
DSH
459a certificate for. If not set the current time is used.
460
461=item B<default_enddate>
462
c4de074e 463The same as the B<-enddate> option. Either this option or
aba3e65f
DSH
464B<default_days> (or the command line equivalents) must be
465present.
466
467=item B<default_crl_hours default_crl_days>
468
c4de074e 469The same as the B<-crlhours> and the B<-crldays> options. These
aba3e65f
DSH
470will only be used if neither command line option is present. At
471least one of these must be present to generate a CRL.
472
473=item B<default_md>
474
aabbc24e
MC
475The same as the B<-md> option. Mandatory except where the signing algorithm does
476not require a digest (i.e. Ed25519 and Ed448).
aba3e65f
DSH
477
478=item B<database>
479
c4de074e 480The text database file to use. Mandatory. This file must be present
aba3e65f
DSH
481though initially it will be empty.
482
d6df2b28
RL
483=item B<unique_subject>
484
c4de074e 485If the value B<yes> is given, the valid certificate entries in the
d6df2b28
RL
486database must have unique subjects. if the value B<no> is given,
487several valid certificate entries may have the exact same subject.
488The default value is B<yes>, to be compatible with older (pre 0.9.8)
489versions of OpenSSL. However, to make CA certificate roll-over easier,
490it's recommended to use the value B<no>, especially if combined with
491the B<-selfsign> command line option.
492
5af88441
MC
493Note that it is valid in some circumstances for certificates to be created
494without any subject. In the case where there are multiple certificates without
df443918 495subjects this does not count as a duplicate.
5af88441 496
c5aba56c 497=item B<serial>
aba3e65f 498
c4de074e 499A text file containing the next serial number to use in hex. Mandatory.
aba3e65f
DSH
500This file must be present and contain a valid serial number.
501
8fbb2af3
RL
502=item B<crlnumber>
503
c4de074e 504A text file containing the next CRL number to use in hex. The crl number
8fbb2af3
RL
505will be inserted in the CRLs only if this file exists. If this file is
506present, it must contain a valid CRL number.
507
aba3e65f
DSH
508=item B<x509_extensions>
509
c4de074e 510The same as B<-extensions>.
aba3e65f
DSH
511
512=item B<crl_extensions>
513
c4de074e 514The same as B<-crlexts>.
aba3e65f
DSH
515
516=item B<preserve>
517
c4de074e 518The same as B<-preserveDN>
aba3e65f 519
89da653f
BM
520=item B<email_in_dn>
521
c4de074e 522The same as B<-noemailDN>. If you want the EMAIL field to be removed
89da653f
BM
523from the DN of the certificate simply set this to 'no'. If not present
524the default is to allow for the EMAIL filed in the certificate's DN.
525
aba3e65f
DSH
526=item B<msie_hack>
527
c4de074e 528The same as B<-msie_hack>
aba3e65f
DSH
529
530=item B<policy>
531
c4de074e 532The same as B<-policy>. Mandatory. See the B<POLICY FORMAT> section
aba3e65f
DSH
533for more information.
534
b325518f 535=item B<name_opt>, B<cert_opt>
e890dcdb 536
c4de074e 537These options allow the format used to display the certificate details
e890dcdb
DSH
538when asking the user to confirm signing. All the options supported by
539the B<x509> utilities B<-nameopt> and B<-certopt> switches can be used
540here, except the B<no_signame> and B<no_sigdump> are permanently set
541and cannot be disabled (this is because the certificate signature cannot
542be displayed because the certificate has not been signed at this point).
543
6f2f534b 544For convenience the values B<ca_default> are accepted by both to produce
e890dcdb
DSH
545a reasonable output.
546
547If neither option is present the format used in earlier versions of
548OpenSSL is used. Use of the old format is B<strongly> discouraged because
549it only displays fields mentioned in the B<policy> section, mishandles
550multicharacter string types and does not display extensions.
551
791bd0cd
DSH
552=item B<copy_extensions>
553
c4de074e 554Determines how extensions in certificate requests should be handled.
791bd0cd
DSH
555If set to B<none> or this option is not present then extensions are
556ignored and not copied to the certificate. If set to B<copy> then any
557extensions present in the request that are not already present are copied
558to the certificate. If set to B<copyall> then all extensions in the
559request are copied to the certificate: if the extension is already present
560in the certificate it is deleted first. See the B<WARNINGS> section before
561using this option.
562
563The main use of this option is to allow a certificate request to supply
564values for certain extensions such as subjectAltName.
565
aba3e65f
DSH
566=back
567
568=head1 POLICY FORMAT
569
570The policy section consists of a set of variables corresponding to
571certificate DN fields. If the value is "match" then the field value
572must match the same field in the CA certificate. If the value is
573"supplied" then it must be present. If the value is "optional" then
574it may be present. Any fields not mentioned in the policy section
575are silently deleted, unless the B<-preserveDN> option is set but
576this can be regarded more of a quirk than intended behaviour.
577
578=head1 SPKAC FORMAT
579
580The input to the B<-spkac> command line option is a Netscape
581signed public key and challenge. This will usually come from
1bc74519 582the B<KEYGEN> tag in an HTML form to create a new private key.
aba3e65f
DSH
583It is however possible to create SPKACs using the B<spkac> utility.
584
585The file should contain the variable SPKAC set to the value of
586the SPKAC and also the required DN components as name value pairs.
587If you need to include the same component twice then it can be
588preceded by a number and a '.'.
589
fc1d88f0
RS
590When processing SPKAC format, the output is DER if the B<-out>
591flag is used, but PEM format if sending to stdout or the B<-outdir>
592flag is used.
593
aba3e65f
DSH
594=head1 EXAMPLES
595
596Note: these examples assume that the B<ca> directory structure is
597already set up and the relevant files already exist. This usually
598involves creating a CA certificate and private key with B<req>, a
599serial number file and an empty index file and placing them in
600the relevant directories.
601
602To use the sample configuration file below the directories demoCA,
603demoCA/private and demoCA/newcerts would be created. The CA
604certificate would be copied to demoCA/cacert.pem and its private
605key to demoCA/private/cakey.pem. A file demoCA/serial would be
606created containing for example "01" and the empty index file
607demoCA/index.txt.
608
609
610Sign a certificate request:
611
1675f6eb 612 openssl ca -in req.pem -out newcert.pem
aba3e65f 613
bc42bd62
PY
614Sign an SM2 certificate request:
615
616 openssl ca -in sm2.csr -out sm2.crt -md sm3 -sigopt "sm2_id:1234567812345678" -sm2-id "1234567812345678"
617
d428bf8c
DSH
618Sign a certificate request, using CA extensions:
619
620 openssl ca -in req.pem -extensions v3_ca -out newcert.pem
621
aba3e65f
DSH
622Generate a CRL
623
1675f6eb 624 openssl ca -gencrl -out crl.pem
aba3e65f
DSH
625
626Sign several requests:
627
1675f6eb 628 openssl ca -infiles req1.pem req2.pem req3.pem
aba3e65f
DSH
629
630Certify a Netscape SPKAC:
631
1675f6eb 632 openssl ca -spkac spkac.txt
aba3e65f
DSH
633
634A sample SPKAC file (the SPKAC line has been truncated for clarity):
635
636 SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5
637 CN=Steve Test
638 emailAddress=steve@openssl.org
639 0.OU=OpenSSL Group
640 1.OU=Another Group
641
642A sample configuration file with the relevant sections for B<ca>:
643
644 [ ca ]
645 default_ca = CA_default # The default ca section
1bc74519 646
aba3e65f
DSH
647 [ CA_default ]
648
649 dir = ./demoCA # top dir
650 database = $dir/index.txt # index file.
1bc74519
RS
651 new_certs_dir = $dir/newcerts # new certs dir
652
aba3e65f
DSH
653 certificate = $dir/cacert.pem # The CA cert
654 serial = $dir/serial # serial no file
ffb46830 655 #rand_serial = yes # for random serial#'s
aba3e65f
DSH
656 private_key = $dir/private/cakey.pem# CA private key
657 RANDFILE = $dir/private/.rand # random number file
1bc74519 658
aba3e65f
DSH
659 default_days = 365 # how long to certify for
660 default_crl_days= 30 # how long before next CRL
661 default_md = md5 # md to use
662
663 policy = policy_any # default policy
89da653f 664 email_in_dn = no # Don't add the email into cert DN
aba3e65f 665
1bc74519
RS
666 name_opt = ca_default # Subject name display option
667 cert_opt = ca_default # Certificate display option
668 copy_extensions = none # Don't copy extensions from request
e890dcdb 669
aba3e65f
DSH
670 [ policy_any ]
671 countryName = supplied
672 stateOrProvinceName = optional
673 organizationName = optional
674 organizationalUnitName = optional
675 commonName = supplied
676 emailAddress = optional
677
aba3e65f
DSH
678=head1 FILES
679
680Note: the location of all files can change either by compile time options,
19d2bb57 681configuration file entries, environment variables or command line options.
aba3e65f
DSH
682The values below reflect the default values.
683
684 /usr/local/ssl/lib/openssl.cnf - master configuration file
685 ./demoCA - main CA directory
686 ./demoCA/cacert.pem - CA certificate
687 ./demoCA/private/cakey.pem - CA private key
688 ./demoCA/serial - CA serial number file
689 ./demoCA/serial.old - CA serial number backup file
690 ./demoCA/index.txt - CA text database file
691 ./demoCA/index.txt.old - CA text database backup file
692 ./demoCA/certs - certificate output file
693 ./demoCA/.rnd - CA random seed information
694
aba3e65f
DSH
695=head1 RESTRICTIONS
696
1bc74519 697The text database index file is a critical part of the process and
aba3e65f
DSH
698if corrupted it can be difficult to fix. It is theoretically possible
699to rebuild the index file from all the issued certificates and a current
700CRL: however there is no option to do this.
701
cb26a20c 702V2 CRL features like delta CRLs are not currently supported.
aba3e65f
DSH
703
704Although several requests can be input and handled at once it is only
77a795e4 705possible to include one SPKAC or self-signed certificate.
aba3e65f
DSH
706
707=head1 BUGS
708
77a795e4 709The use of an in-memory text database can cause problems when large
aba3e65f
DSH
710numbers of certificates are present because, as the name implies
711the database has to be kept in memory.
712
aba3e65f
DSH
713The B<ca> command really needs rewriting or the required functionality
714exposed at either a command or interface level so a more friendly utility
be739b0c
RS
715(perl script or GUI) can handle things properly. The script
716B<CA.pl> helps a little but not very much.
aba3e65f
DSH
717
718Any fields in a request that are not present in a policy are silently
89da653f
BM
719deleted. This does not happen if the B<-preserveDN> option is used. To
720enforce the absence of the EMAIL field within the DN, as suggested by
721RFCs, regardless the contents of the request' subject the B<-noemailDN>
722option can be used. The behaviour should be more friendly and
723configurable.
aba3e65f 724
42b91f28 725Canceling some commands by refusing to certify a certificate can
aba3e65f
DSH
726create an empty file.
727
791bd0cd
DSH
728=head1 WARNINGS
729
1f309464
LJ
730The B<ca> command is quirky and at times downright unfriendly.
731
732The B<ca> utility was originally meant as an example of how to do things
733in a CA. It was not supposed to be used as a full blown CA itself:
734nevertheless some people are using it for this purpose.
735
736The B<ca> command is effectively a single user command: no locking is
737done on the various files and attempts to run more than one B<ca> command
738on the same database can have unpredictable results.
739
791bd0cd
DSH
740The B<copy_extensions> option should be used with caution. If care is
741not taken then it can be a security risk. For example if a certificate
742request contains a basicConstraints extension with CA:TRUE and the
743B<copy_extensions> value is set to B<copyall> and the user does not spot
42b91f28 744this when the certificate is displayed then this will hand the requester
791bd0cd
DSH
745a valid CA certificate.
746
747This situation can be avoided by setting B<copy_extensions> to B<copy>
748and including basicConstraints with CA:FALSE in the configuration file.
749Then if the request contains a basicConstraints extension it will be
750ignored.
751
752It is advisable to also include values for other extensions such
753as B<keyUsage> to prevent a request supplying its own values.
754
755Additional restrictions can be placed on the CA certificate itself.
756For example if the CA certificate has:
757
758 basicConstraints = CA:TRUE, pathlen:0
759
760then even if a certificate is issued with CA:TRUE it will not be valid.
761
909873bd
PY
762=head1 HISTORY
763
764Since OpenSSL 1.1.1, the program follows RFC5280. Specifically,
765certificate validity period (specified by any of B<-startdate>,
766B<-enddate> and B<-days>) will be encoded as UTCTime if the dates are
767earlier than year 2049 (included), and as GeneralizedTime if the dates
768are in year 2050 or later.
769
aba3e65f
DSH
770=head1 SEE ALSO
771
b6b66573
DMSP
772L<openssl(1)>,
773L<openssl-req(1)>,
774L<openssl-spkac(1)>,
775L<openssl-x509(1)>,
776L<CA.pl(1)>,
777L<config(5)>,
778L<x509v3_config(5)>
aba3e65f 779
e2f92610
RS
780=head1 COPYRIGHT
781
d7b2124a 782Copyright 2000-2019 The OpenSSL Project Authors. All Rights Reserved.
e2f92610 783
449040b4 784Licensed under the Apache License 2.0 (the "License"). You may not use
e2f92610
RS
785this file except in compliance with the License. You can obtain a copy
786in the file LICENSE in the source distribution or at
787L<https://www.openssl.org/source/license.html>.
788
789=cut