]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/man1/openssl-ca.pod.in
Use a function to generate do-not-edit comment
[thirdparty/openssl.git] / doc / man1 / openssl-ca.pod.in
CommitLineData
aba3e65f 1=pod
625c781d 2{- OpenSSL::safe::output_do_not_edit_headers(); -}
9fcb9702 3
aba3e65f
DSH
4=head1 NAME
5
b6b66573 6openssl-ca - sample minimal CA application
aba3e65f
DSH
7
8=head1 SYNOPSIS
9
10B<openssl> B<ca>
169394d4 11[B<-help>]
aba3e65f 12[B<-verbose>]
e8769719
RS
13[B<-config> I<filename>]
14[B<-name> I<section>]
aba3e65f 15[B<-gencrl>]
e8769719
RS
16[B<-revoke> I<file>]
17[B<-valid> I<file>]
18[B<-status> I<serial>]
fc1d88f0 19[B<-updatedb>]
e8769719
RS
20[B<-crl_reason> I<reason>]
21[B<-crl_hold> I<instruction>]
22[B<-crl_compromise> I<time>]
23[B<-crl_CA_compromise> I<time>]
24[B<-crldays> I<days>]
25[B<-crlhours> I<hours>]
26[B<-crlexts> I<section>]
27[B<-startdate> I<date>]
28[B<-enddate> I<date>]
29[B<-days> I<arg>]
30[B<-md> I<arg>]
31[B<-policy> I<arg>]
32[B<-keyfile> I<arg>]
33[B<-keyform> B<DER>|B<PEM>]
34[B<-key> I<arg>]
35[B<-passin> I<arg>]
36[B<-cert> I<file>]
d6df2b28 37[B<-selfsign>]
e8769719
RS
38[B<-in> I<file>]
39[B<-out> I<file>]
82fc1d9c 40[B<-notext>]
e8769719 41[B<-outdir> I<dir>]
aba3e65f 42[B<-infiles>]
e8769719
RS
43[B<-spkac> I<file>]
44[B<-ss_cert> I<file>]
aba3e65f 45[B<-preserveDN>]
89da653f 46[B<-noemailDN>]
aba3e65f
DSH
47[B<-batch>]
48[B<-msie_hack>]
e8769719
RS
49[B<-extensions> I<section>]
50[B<-extfile> I<section>]
51[B<-engine> I<id>]
52[B<-subj> I<arg>]
57eb1d32 53[B<-utf8>]
e8769719 54[B<-sigopt> I<nm>:I<v>]
6755ff11 55[B<-create_serial>]
ffb46830 56[B<-rand_serial>]
57eb1d32 57[B<-multivalue-rdn>]
e8769719
RS
58[B<-sm2-id> I<string>]
59[B<-sm2-hex-id> I<hex-string>]
9fcb9702 60{- $OpenSSL::safe::opt_r_synopsis -}
92de469f 61[I<certreq>...]
aba3e65f 62
9f3c076b 63=for openssl ifdef engine sm2-id sm2-hex-id
1738c0ce 64
aba3e65f
DSH
65=head1 DESCRIPTION
66
35a810bb 67This command is a minimal CA application. It can be used
aba3e65f 68to sign certificate requests in a variety of forms and generate
92de469f 69CRLs. It also maintains a text database of issued certificates
aba3e65f 70and their status.
92de469f
RS
71When signing certificates, a single certificate request can be specified
72with the B<-in> option, or multiple requests can be processed by
73specifying a set of B<certreq> files after all options.
aba3e65f
DSH
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 444At startup the specified file is loaded into the random number generator,
23f39931
DMSP
445and at exit 256 bytes will be written to it. (Note: Using a RANDFILE is
446not necessary anymore, see the L</HISTORY> section.
aba3e65f
DSH
447
448=item B<default_days>
449
c4de074e 450The same as the B<-days> option. The number of days to certify
1bc74519 451a certificate for.
aba3e65f
DSH
452
453=item B<default_startdate>
454
c4de074e 455The same as the B<-startdate> option. The start date to certify
aba3e65f
DSH
456a certificate for. If not set the current time is used.
457
458=item B<default_enddate>
459
c4de074e 460The same as the B<-enddate> option. Either this option or
aba3e65f
DSH
461B<default_days> (or the command line equivalents) must be
462present.
463
464=item B<default_crl_hours default_crl_days>
465
c4de074e 466The same as the B<-crlhours> and the B<-crldays> options. These
aba3e65f
DSH
467will only be used if neither command line option is present. At
468least one of these must be present to generate a CRL.
469
470=item B<default_md>
471
aabbc24e
MC
472The same as the B<-md> option. Mandatory except where the signing algorithm does
473not require a digest (i.e. Ed25519 and Ed448).
aba3e65f
DSH
474
475=item B<database>
476
c4de074e 477The text database file to use. Mandatory. This file must be present
aba3e65f
DSH
478though initially it will be empty.
479
d6df2b28
RL
480=item B<unique_subject>
481
c4de074e 482If the value B<yes> is given, the valid certificate entries in the
d6df2b28
RL
483database must have unique subjects. if the value B<no> is given,
484several valid certificate entries may have the exact same subject.
485The default value is B<yes>, to be compatible with older (pre 0.9.8)
486versions of OpenSSL. However, to make CA certificate roll-over easier,
487it's recommended to use the value B<no>, especially if combined with
488the B<-selfsign> command line option.
489
5af88441
MC
490Note that it is valid in some circumstances for certificates to be created
491without any subject. In the case where there are multiple certificates without
df443918 492subjects this does not count as a duplicate.
5af88441 493
c5aba56c 494=item B<serial>
aba3e65f 495
c4de074e 496A text file containing the next serial number to use in hex. Mandatory.
aba3e65f
DSH
497This file must be present and contain a valid serial number.
498
8fbb2af3
RL
499=item B<crlnumber>
500
c4de074e 501A text file containing the next CRL number to use in hex. The crl number
8fbb2af3
RL
502will be inserted in the CRLs only if this file exists. If this file is
503present, it must contain a valid CRL number.
504
aba3e65f
DSH
505=item B<x509_extensions>
506
c4de074e 507The same as B<-extensions>.
aba3e65f
DSH
508
509=item B<crl_extensions>
510
c4de074e 511The same as B<-crlexts>.
aba3e65f
DSH
512
513=item B<preserve>
514
c4de074e 515The same as B<-preserveDN>
aba3e65f 516
89da653f
BM
517=item B<email_in_dn>
518
c4de074e 519The same as B<-noemailDN>. If you want the EMAIL field to be removed
89da653f
BM
520from the DN of the certificate simply set this to 'no'. If not present
521the default is to allow for the EMAIL filed in the certificate's DN.
522
aba3e65f
DSH
523=item B<msie_hack>
524
c4de074e 525The same as B<-msie_hack>
aba3e65f
DSH
526
527=item B<policy>
528
c4de074e 529The same as B<-policy>. Mandatory. See the B<POLICY FORMAT> section
aba3e65f
DSH
530for more information.
531
b325518f 532=item B<name_opt>, B<cert_opt>
e890dcdb 533
c4de074e 534These options allow the format used to display the certificate details
e890dcdb
DSH
535when asking the user to confirm signing. All the options supported by
536the B<x509> utilities B<-nameopt> and B<-certopt> switches can be used
537here, except the B<no_signame> and B<no_sigdump> are permanently set
538and cannot be disabled (this is because the certificate signature cannot
539be displayed because the certificate has not been signed at this point).
540
6f2f534b 541For convenience the values B<ca_default> are accepted by both to produce
e890dcdb
DSH
542a reasonable output.
543
544If neither option is present the format used in earlier versions of
545OpenSSL is used. Use of the old format is B<strongly> discouraged because
546it only displays fields mentioned in the B<policy> section, mishandles
547multicharacter string types and does not display extensions.
548
791bd0cd
DSH
549=item B<copy_extensions>
550
c4de074e 551Determines how extensions in certificate requests should be handled.
791bd0cd
DSH
552If set to B<none> or this option is not present then extensions are
553ignored and not copied to the certificate. If set to B<copy> then any
554extensions present in the request that are not already present are copied
555to the certificate. If set to B<copyall> then all extensions in the
556request are copied to the certificate: if the extension is already present
557in the certificate it is deleted first. See the B<WARNINGS> section before
558using this option.
559
560The main use of this option is to allow a certificate request to supply
561values for certain extensions such as subjectAltName.
562
aba3e65f
DSH
563=back
564
565=head1 POLICY FORMAT
566
567The policy section consists of a set of variables corresponding to
568certificate DN fields. If the value is "match" then the field value
569must match the same field in the CA certificate. If the value is
570"supplied" then it must be present. If the value is "optional" then
571it may be present. Any fields not mentioned in the policy section
572are silently deleted, unless the B<-preserveDN> option is set but
573this can be regarded more of a quirk than intended behaviour.
574
575=head1 SPKAC FORMAT
576
577The input to the B<-spkac> command line option is a Netscape
578signed public key and challenge. This will usually come from
1bc74519 579the B<KEYGEN> tag in an HTML form to create a new private key.
35a810bb 580It is however possible to create SPKACs using L<openssl-spkac(1)>.
aba3e65f
DSH
581
582The file should contain the variable SPKAC set to the value of
583the SPKAC and also the required DN components as name value pairs.
584If you need to include the same component twice then it can be
585preceded by a number and a '.'.
586
fc1d88f0
RS
587When processing SPKAC format, the output is DER if the B<-out>
588flag is used, but PEM format if sending to stdout or the B<-outdir>
589flag is used.
590
aba3e65f
DSH
591=head1 EXAMPLES
592
35a810bb
RL
593Note: these examples assume that the directory structure this command
594assumes is already set up and the relevant files already exist. This
595usually involves creating a CA certificate and private key with
596L<openssl-req(1)>, a serial number file and an empty index file and
597placing them in the relevant directories.
aba3e65f 598
1948394d
RL
599To use the sample configuration file below the directories F<demoCA>,
600F<demoCA/private> and F<demoCA/newcerts> would be created. The CA
601certificate would be copied to F<demoCA/cacert.pem> and its private
602key to F<demoCA/private/cakey.pem>. A file F<demoCA/serial> would be
aba3e65f 603created containing for example "01" and the empty index file
1948394d 604F<demoCA/index.txt>.
aba3e65f
DSH
605
606
607Sign a certificate request:
608
1675f6eb 609 openssl ca -in req.pem -out newcert.pem
aba3e65f 610
bc42bd62
PY
611Sign an SM2 certificate request:
612
613 openssl ca -in sm2.csr -out sm2.crt -md sm3 -sigopt "sm2_id:1234567812345678" -sm2-id "1234567812345678"
614
d428bf8c
DSH
615Sign a certificate request, using CA extensions:
616
617 openssl ca -in req.pem -extensions v3_ca -out newcert.pem
618
aba3e65f
DSH
619Generate a CRL
620
1675f6eb 621 openssl ca -gencrl -out crl.pem
aba3e65f
DSH
622
623Sign several requests:
624
1675f6eb 625 openssl ca -infiles req1.pem req2.pem req3.pem
aba3e65f
DSH
626
627Certify a Netscape SPKAC:
628
1675f6eb 629 openssl ca -spkac spkac.txt
aba3e65f
DSH
630
631A sample SPKAC file (the SPKAC line has been truncated for clarity):
632
633 SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5
634 CN=Steve Test
635 emailAddress=steve@openssl.org
636 0.OU=OpenSSL Group
637 1.OU=Another Group
638
35a810bb 639A sample configuration file with the relevant sections for this command:
aba3e65f
DSH
640
641 [ ca ]
642 default_ca = CA_default # The default ca section
1bc74519 643
aba3e65f
DSH
644 [ CA_default ]
645
646 dir = ./demoCA # top dir
647 database = $dir/index.txt # index file.
1bc74519
RS
648 new_certs_dir = $dir/newcerts # new certs dir
649
aba3e65f
DSH
650 certificate = $dir/cacert.pem # The CA cert
651 serial = $dir/serial # serial no file
ffb46830 652 #rand_serial = yes # for random serial#'s
aba3e65f 653 private_key = $dir/private/cakey.pem# CA private key
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
aba3e65f 689
aba3e65f
DSH
690=head1 RESTRICTIONS
691
1bc74519 692The text database index file is a critical part of the process and
aba3e65f
DSH
693if corrupted it can be difficult to fix. It is theoretically possible
694to rebuild the index file from all the issued certificates and a current
695CRL: however there is no option to do this.
696
cb26a20c 697V2 CRL features like delta CRLs are not currently supported.
aba3e65f
DSH
698
699Although several requests can be input and handled at once it is only
77a795e4 700possible to include one SPKAC or self-signed certificate.
aba3e65f
DSH
701
702=head1 BUGS
703
77a795e4 704The use of an in-memory text database can cause problems when large
aba3e65f
DSH
705numbers of certificates are present because, as the name implies
706the database has to be kept in memory.
707
35a810bb 708This command really needs rewriting or the required functionality
aba3e65f 709exposed at either a command or interface level so a more friendly utility
be739b0c
RS
710(perl script or GUI) can handle things properly. The script
711B<CA.pl> helps a little but not very much.
aba3e65f
DSH
712
713Any fields in a request that are not present in a policy are silently
89da653f
BM
714deleted. This does not happen if the B<-preserveDN> option is used. To
715enforce the absence of the EMAIL field within the DN, as suggested by
716RFCs, regardless the contents of the request' subject the B<-noemailDN>
717option can be used. The behaviour should be more friendly and
718configurable.
aba3e65f 719
42b91f28 720Canceling some commands by refusing to certify a certificate can
aba3e65f
DSH
721create an empty file.
722
791bd0cd
DSH
723=head1 WARNINGS
724
35a810bb 725This command is quirky and at times downright unfriendly.
1f309464 726
35a810bb
RL
727This command was originally meant as an example of how to do
728things in a CA. It was not supposed to be used as a full blown CA itself:
1f309464
LJ
729nevertheless some people are using it for this purpose.
730
35a810bb
RL
731This command command is effectively a single user command: no locking
732is done on the various files and attempts to run more than one B<openssl ca>
733command on the same database can have unpredictable results.
1f309464 734
791bd0cd
DSH
735The B<copy_extensions> option should be used with caution. If care is
736not taken then it can be a security risk. For example if a certificate
737request contains a basicConstraints extension with CA:TRUE and the
738B<copy_extensions> value is set to B<copyall> and the user does not spot
42b91f28 739this when the certificate is displayed then this will hand the requester
791bd0cd
DSH
740a valid CA certificate.
741
742This situation can be avoided by setting B<copy_extensions> to B<copy>
743and including basicConstraints with CA:FALSE in the configuration file.
744Then if the request contains a basicConstraints extension it will be
745ignored.
746
747It is advisable to also include values for other extensions such
748as B<keyUsage> to prevent a request supplying its own values.
749
750Additional restrictions can be placed on the CA certificate itself.
751For example if the CA certificate has:
752
753 basicConstraints = CA:TRUE, pathlen:0
754
755then even if a certificate is issued with CA:TRUE it will not be valid.
756
909873bd
PY
757=head1 HISTORY
758
759Since OpenSSL 1.1.1, the program follows RFC5280. Specifically,
760certificate validity period (specified by any of B<-startdate>,
761B<-enddate> and B<-days>) will be encoded as UTCTime if the dates are
762earlier than year 2049 (included), and as GeneralizedTime if the dates
763are in year 2050 or later.
764
23f39931
DMSP
765OpenSSL 1.1.1 introduced a new random generator (CSPRNG) with an improved
766seeding mechanism. The new seeding mechanism makes it unnecessary to
767define a RANDFILE for saving and restoring randomness. This option is
768retained mainly for compatibility reasons.
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