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