]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man1/openssl-ca.pod.in
Document command parameters.
[thirdparty/openssl.git] / doc / man1 / openssl-ca.pod.in
CommitLineData
aba3e65f
DSH
1=pod
2
9fcb9702
RS
3=begin comment
4{- join("\n", @autowarntext) -}
5
6=end comment
7
aba3e65f
DSH
8=head1 NAME
9
b6b66573 10openssl-ca - sample minimal CA application
aba3e65f
DSH
11
12=head1 SYNOPSIS
13
14B<openssl> B<ca>
169394d4 15[B<-help>]
aba3e65f 16[B<-verbose>]
e8769719
RS
17[B<-config> I<filename>]
18[B<-name> I<section>]
aba3e65f 19[B<-gencrl>]
e8769719
RS
20[B<-revoke> I<file>]
21[B<-valid> I<file>]
22[B<-status> I<serial>]
fc1d88f0 23[B<-updatedb>]
e8769719
RS
24[B<-crl_reason> I<reason>]
25[B<-crl_hold> I<instruction>]
26[B<-crl_compromise> I<time>]
27[B<-crl_CA_compromise> I<time>]
28[B<-crldays> I<days>]
29[B<-crlhours> I<hours>]
30[B<-crlexts> I<section>]
31[B<-startdate> I<date>]
32[B<-enddate> I<date>]
33[B<-days> I<arg>]
34[B<-md> I<arg>]
35[B<-policy> I<arg>]
36[B<-keyfile> I<arg>]
37[B<-keyform> B<DER>|B<PEM>]
38[B<-key> I<arg>]
39[B<-passin> I<arg>]
40[B<-cert> I<file>]
d6df2b28 41[B<-selfsign>]
e8769719
RS
42[B<-in> I<file>]
43[B<-out> I<file>]
82fc1d9c 44[B<-notext>]
e8769719 45[B<-outdir> I<dir>]
aba3e65f 46[B<-infiles>]
e8769719
RS
47[B<-spkac> I<file>]
48[B<-ss_cert> I<file>]
aba3e65f 49[B<-preserveDN>]
89da653f 50[B<-noemailDN>]
aba3e65f
DSH
51[B<-batch>]
52[B<-msie_hack>]
e8769719
RS
53[B<-extensions> I<section>]
54[B<-extfile> I<section>]
55[B<-engine> I<id>]
56[B<-subj> I<arg>]
57eb1d32 57[B<-utf8>]
e8769719 58[B<-sigopt> I<nm>:I<v>]
6755ff11 59[B<-create_serial>]
ffb46830 60[B<-rand_serial>]
57eb1d32 61[B<-multivalue-rdn>]
e8769719
RS
62[B<-sm2-id> I<string>]
63[B<-sm2-hex-id> I<hex-string>]
9fcb9702 64{- $OpenSSL::safe::opt_r_synopsis -}
92de469f 65[I<certreq>...]
aba3e65f 66
9f3c076b 67=for openssl ifdef engine sm2-id sm2-hex-id
1738c0ce 68
aba3e65f
DSH
69=head1 DESCRIPTION
70
35a810bb 71This command is a minimal CA application. It can be used
aba3e65f 72to sign certificate requests in a variety of forms and generate
92de469f 73CRLs. It also maintains a text database of issued certificates
aba3e65f 74and their status.
92de469f
RS
75When signing certificates, a single certificate request can be specified
76with the B<-in> option, or multiple requests can be processed by
77specifying a set of B<certreq> files after all options.
aba3e65f
DSH
78
79The options descriptions will be divided into each purpose.
80
3dfda1a6 81=head1 OPTIONS
aba3e65f
DSH
82
83=over 4
84
6755ff11
MR
85=item B<-help>
86
87Print out a usage message.
88
89=item B<-verbose>
90
c4de074e 91This prints extra details about the operations being performed.
6755ff11 92
e8769719 93=item B<-config> I<filename>
aba3e65f 94
c4de074e 95Specifies the configuration file to use.
e9681f83
RS
96Optional; for a description of the default value,
97see L<openssl(1)/COMMAND SUMMARY>.
aba3e65f 98
e8769719 99=item B<-name> I<section>
8a0a9392 100
c4de074e 101Specifies the configuration file section to use (overrides
8a0a9392
BM
102B<default_ca> in the B<ca> section).
103
e8769719 104=item B<-in> I<filename>
aba3e65f 105
c4de074e 106An input filename containing a single certificate request to be
aba3e65f
DSH
107signed by the CA.
108
e8769719 109=item B<-ss_cert> I<filename>
aba3e65f 110
c4de074e 111A single self-signed certificate to be signed by the CA.
aba3e65f 112
e8769719 113=item B<-spkac> I<filename>
aba3e65f 114
c4de074e 115A file containing a single Netscape signed public key and challenge
d618f703 116and additional field values to be signed by the CA. See the B<SPKAC FORMAT>
fc1d88f0 117section for information on the required input and output format.
aba3e65f
DSH
118
119=item B<-infiles>
120
c4de074e 121If present this should be the last option, all subsequent arguments
1bc74519 122are taken as the names of files containing certificate requests.
aba3e65f 123
e8769719 124=item B<-out> I<filename>
aba3e65f 125
c4de074e 126The output file to output certificates to. The default is standard
aba3e65f 127output. The certificate details will also be printed out to this
fc1d88f0 128file in PEM format (except that B<-spkac> outputs DER format).
aba3e65f 129
e8769719 130=item B<-outdir> I<directory>
aba3e65f 131
c4de074e 132The directory to output certificates to. The certificate will be
aba3e65f 133written to a filename consisting of the serial number in hex with
1948394d 134F<.pem> appended.
aba3e65f
DSH
135
136=item B<-cert>
137
c4de074e 138The CA certificate file.
aba3e65f 139
e8769719 140=item B<-keyfile> I<filename>
aba3e65f 141
c4de074e 142The private key to sign requests with.
aba3e65f 143
e8769719 144=item B<-keyform> B<DER>|B<PEM>
fc1d88f0 145
777182a0
RS
146The format of the private key file; the default is B<PEM>.
147See L<openssl(1)/Format Options> for details.
fc1d88f0 148
e8769719 149=item B<-sigopt> I<nm>:I<v>
d7b2124a
P
150
151Pass options to the signature algorithm during sign or verify operations.
152Names and values of these options are algorithm-specific.
153
e8769719 154=item B<-key> I<password>
aba3e65f 155
c4de074e 156The password used to encrypt the private key. Since on some
aba3e65f 157systems the command line arguments are visible (e.g. Unix with
f5c14c63 158the L<ps(1)> utility) this option should be used with caution.
aba3e65f 159
d6df2b28
RL
160=item B<-selfsign>
161
c4de074e 162Indicates the issued certificates are to be signed with the key
d6df2b28 163the certificate requests were signed with (given with B<-keyfile>).
42b91f28 164Certificate requests signed with a different key are ignored. If
d6df2b28
RL
165B<-spkac>, B<-ss_cert> or B<-gencrl> are given, B<-selfsign> is
166ignored.
167
168A consequence of using B<-selfsign> is that the self-signed
169certificate appears among the entries in the certificate database
170(see the configuration option B<database>), and uses the same
171serial number counter as all other certificates sign with the
172self-signed certificate.
173
e8769719 174=item B<-passin> I<arg>
bd08a2bd 175
c4de074e 176The key password source. For more information about the format of B<arg>
3a4e43de 177see L<openssl(1)/Pass Phrase Options>.
bad40585 178
82fc1d9c
DSH
179=item B<-notext>
180
c4de074e 181Don't output the text form of a certificate to the output file.
82fc1d9c 182
e8769719 183=item B<-startdate> I<date>
aba3e65f 184
c4de074e 185This allows the start date to be explicitly set. The format of the
909873bd
PY
186date is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure), or
187YYYYMMDDHHMMSSZ (the same as an ASN1 GeneralizedTime structure). In
a970b14f 188both formats, seconds SS and timezone Z must be present.
aba3e65f 189
e8769719 190=item B<-enddate> I<date>
aba3e65f 191
c4de074e 192This allows the expiry date to be explicitly set. The format of the
909873bd
PY
193date is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure), or
194YYYYMMDDHHMMSSZ (the same as an ASN1 GeneralizedTime structure). In
a970b14f 195both formats, seconds SS and timezone Z must be present.
aba3e65f 196
e8769719 197=item B<-days> I<arg>
aba3e65f 198
c4de074e 199The number of days to certify the certificate for.
aba3e65f 200
e8769719 201=item B<-md> I<alg>
aba3e65f 202
c4de074e 203The message digest to use.
35a810bb 204Any digest supported by the L<openssl-dgst(1)> command can be used. For signing
aabbc24e
MC
205algorithms that do not support a digest (i.e. Ed25519 and Ed448) any message
206digest that is set is ignored. This option also applies to CRLs.
aba3e65f 207
e8769719 208=item B<-policy> I<arg>
aba3e65f 209
c4de074e 210This option defines the CA "policy" to use. This is a section in
aba3e65f
DSH
211the configuration file which decides which fields should be mandatory
212or match the CA certificate. Check out the B<POLICY FORMAT> section
213for more information.
214
215=item B<-msie_hack>
216
35a810bb
RL
217This is a deprecated option to make this command work with very old versions
218of the IE certificate enrollment control "certenr3". It used UniversalStrings
aba3e65f 219for almost everything. Since the old control has various security bugs
a95d7574 220its use is strongly discouraged.
aba3e65f
DSH
221
222=item B<-preserveDN>
223
53b1899e 224Normally the DN order of a certificate is the same as the order of the
1bc74519 225fields in the relevant policy section. When this option is set the order
19d2bb57 226is the same as the request. This is largely for compatibility with the
53b1899e
DSH
227older IE enrollment control which would only accept certificates if their
228DNs match the order of the request. This is not needed for Xenroll.
aba3e65f 229
89da653f
BM
230=item B<-noemailDN>
231
232The DN of a certificate can contain the EMAIL field if present in the
233request DN, however it is good policy just having the e-mail set into
234the altName extension of the certificate. When this option is set the
235EMAIL field is removed from the certificate' subject and set only in
236the, eventually present, extensions. The B<email_in_dn> keyword can be
237used in the configuration file to enable this behaviour.
238
aba3e65f
DSH
239=item B<-batch>
240
c4de074e 241This sets the batch mode. In this mode no questions will be asked
aba3e65f
DSH
242and all certificates will be certified automatically.
243
e8769719 244=item B<-extensions> I<section>
aba3e65f 245
c4de074e 246The section of the configuration file containing certificate extensions
dfebac32
BM
247to be added when a certificate is issued (defaults to B<x509_extensions>
248unless the B<-extfile> option is used). If no extension section is
249present then, a V1 certificate is created. If the extension section
143b6316 250is present (even if it is empty), then a V3 certificate is created. See the
9b86974e 251L<x509v3_config(5)> manual page for details of the
137de5b1 252extension section format.
dfebac32 253
e8769719 254=item B<-extfile> I<file>
dfebac32 255
c4de074e 256An additional configuration file to read certificate extensions from
dfebac32
BM
257(using the default section unless the B<-extensions> option is also
258used).
aba3e65f 259
e8769719 260=item B<-engine> I<id>
bfa35550 261
2f0ea936 262Specifying an engine (by its unique I<id> string) will cause B<ca>
bfa35550
RL
263to attempt to obtain a functional reference to the specified engine,
264thus initialising it if needed. The engine will then be set as the default
265for all available algorithms.
266
e8769719 267=item B<-subj> I<arg>
57eb1d32 268
c4de074e 269Supersedes subject name given in the request.
2f0ea936 270The arg must be formatted as C</type0=value0/type1=value1/type2=...>.
a43384fd
RL
271Keyword characters may be escaped by C<\> (backslash), and whitespace is
272retained.
3d362f19
BK
273Empty values are permitted, but the corresponding type will not be included
274in the resulting certificate.
57eb1d32
NL
275
276=item B<-utf8>
277
c4de074e 278This option causes field values to be interpreted as UTF8 strings, by
57eb1d32
NL
279default they are interpreted as ASCII. This means that the field
280values, whether prompted from a terminal or obtained from a
281configuration file, must be valid UTF8 strings.
282
6755ff11
MR
283=item B<-create_serial>
284
c4de074e 285If reading serial from the text file as specified in the configuration
6755ff11
MR
286fails, specifying this option creates a new random serial to be used as next
287serial number.
ffb46830
RS
288To get random serial numbers, use the B<-rand_serial> flag instead; this
289should only be used for simple error-recovery.
290
291=item B<-rand_serial>
292
293Generate a large random number to use as the serial number.
294This overrides any option or configuration to use a serial number file.
6755ff11 295
57eb1d32
NL
296=item B<-multivalue-rdn>
297
4c583c36 298This option causes the -subj argument to be interpreted with full
57eb1d32
NL
299support for multivalued RDNs. Example:
300
a43384fd 301C</DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe>
57eb1d32 302
a43384fd 303If B<-multi-rdn> is not used then the UID value is C<123456+CN=John Doe>.
57eb1d32 304
e8769719 305=item B<-sm2-id> I<string>
bc42bd62
PY
306
307Specify the ID string to use when verifying an SM2 certificate. The ID string is
308required by the SM2 signature algorithm for signing and verification.
309
e8769719 310=item B<-sm2-hex-id> I<hex-string>
bc42bd62
PY
311
312Specify a binary ID string to use when signing or verifying using an SM2
313certificate. The argument for this option is string of hexadecimal digits.
314
9fcb9702
RS
315{- $OpenSSL::safe::opt_r_item -}
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
2f0ea936 355Revocation reason, where I<reason> is one of: B<unspecified>, B<keyCompromise>,
d618f703 356B<CACompromise>, B<affiliationChanged>, B<superseded>, B<cessationOfOperation>,
2f0ea936 357B<certificateHold> or B<removeFromCRL>. The matching of I<reason> is case
d618f703
DSH
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
2f0ea936 366instruction to I<instruction> which must be an OID. Although any OID can be
d618f703
DSH
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
2f0ea936 373I<time>. I<time> should be in GeneralizedTime format that is I<YYYYMMDDHHMMSSZ>.
d618f703 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
35a810bb 395The section of the configuration file containing options for this command
8a0a9392
BM
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.
35a810bb 583It is however possible to create SPKACs using L<openssl-spkac(1)>.
aba3e65f
DSH
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
35a810bb
RL
596Note: these examples assume that the directory structure this command
597assumes is already set up and the relevant files already exist. This
598usually involves creating a CA certificate and private key with
599L<openssl-req(1)>, a serial number file and an empty index file and
600placing them in the relevant directories.
aba3e65f 601
1948394d
RL
602To use the sample configuration file below the directories F<demoCA>,
603F<demoCA/private> and F<demoCA/newcerts> would be created. The CA
604certificate would be copied to F<demoCA/cacert.pem> and its private
605key to F<demoCA/private/cakey.pem>. A file F<demoCA/serial> would be
aba3e65f 606created containing for example "01" and the empty index file
1948394d 607F<demoCA/index.txt>.
aba3e65f
DSH
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
35a810bb 642A sample configuration file with the relevant sections for this command:
aba3e65f
DSH
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
35a810bb 713This command really needs rewriting or the required functionality
aba3e65f 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
35a810bb 730This command is quirky and at times downright unfriendly.
1f309464 731
35a810bb
RL
732This command was originally meant as an example of how to do
733things in a CA. It was not supposed to be used as a full blown CA itself:
1f309464
LJ
734nevertheless some people are using it for this purpose.
735
35a810bb
RL
736This command command is effectively a single user command: no locking
737is done on the various files and attempts to run more than one B<openssl ca>
738command on the same database can have unpredictable results.
1f309464 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