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