xref: /onnv-gate/usr/src/common/openssl/doc/apps/ca.pod (revision 2175:b0b2f052a486)
1*2175Sjp161948
2*2175Sjp161948=pod
3*2175Sjp161948
4*2175Sjp161948=head1 NAME
5*2175Sjp161948
6*2175Sjp161948ca - sample minimal CA application
7*2175Sjp161948
8*2175Sjp161948=head1 SYNOPSIS
9*2175Sjp161948
10*2175Sjp161948B<openssl> B<ca>
11*2175Sjp161948[B<-verbose>]
12*2175Sjp161948[B<-config filename>]
13*2175Sjp161948[B<-name section>]
14*2175Sjp161948[B<-gencrl>]
15*2175Sjp161948[B<-revoke file>]
16*2175Sjp161948[B<-crl_reason reason>]
17*2175Sjp161948[B<-crl_hold instruction>]
18*2175Sjp161948[B<-crl_compromise time>]
19*2175Sjp161948[B<-crl_CA_compromise time>]
20*2175Sjp161948[B<-crldays days>]
21*2175Sjp161948[B<-crlhours hours>]
22*2175Sjp161948[B<-crlexts section>]
23*2175Sjp161948[B<-startdate date>]
24*2175Sjp161948[B<-enddate date>]
25*2175Sjp161948[B<-days arg>]
26*2175Sjp161948[B<-md arg>]
27*2175Sjp161948[B<-policy arg>]
28*2175Sjp161948[B<-keyfile arg>]
29*2175Sjp161948[B<-key arg>]
30*2175Sjp161948[B<-passin arg>]
31*2175Sjp161948[B<-cert file>]
32*2175Sjp161948[B<-selfsign>]
33*2175Sjp161948[B<-in file>]
34*2175Sjp161948[B<-out file>]
35*2175Sjp161948[B<-notext>]
36*2175Sjp161948[B<-outdir dir>]
37*2175Sjp161948[B<-infiles>]
38*2175Sjp161948[B<-spkac file>]
39*2175Sjp161948[B<-ss_cert file>]
40*2175Sjp161948[B<-preserveDN>]
41*2175Sjp161948[B<-noemailDN>]
42*2175Sjp161948[B<-batch>]
43*2175Sjp161948[B<-msie_hack>]
44*2175Sjp161948[B<-extensions section>]
45*2175Sjp161948[B<-extfile section>]
46*2175Sjp161948[B<-engine id>]
47*2175Sjp161948[B<-subj arg>]
48*2175Sjp161948[B<-utf8>]
49*2175Sjp161948[B<-multivalue-rdn>]
50*2175Sjp161948
51*2175Sjp161948=head1 DESCRIPTION
52*2175Sjp161948
53*2175Sjp161948The B<ca> command is a minimal CA application. It can be used
54*2175Sjp161948to sign certificate requests in a variety of forms and generate
55*2175Sjp161948CRLs it also maintains a text database of issued certificates
56*2175Sjp161948and their status.
57*2175Sjp161948
58*2175Sjp161948The options descriptions will be divided into each purpose.
59*2175Sjp161948
60*2175Sjp161948=head1 CA OPTIONS
61*2175Sjp161948
62*2175Sjp161948=over 4
63*2175Sjp161948
64*2175Sjp161948=item B<-config filename>
65*2175Sjp161948
66*2175Sjp161948specifies the configuration file to use.
67*2175Sjp161948
68*2175Sjp161948=item B<-name section>
69*2175Sjp161948
70*2175Sjp161948specifies the configuration file section to use (overrides
71*2175Sjp161948B<default_ca> in the B<ca> section).
72*2175Sjp161948
73*2175Sjp161948=item B<-in filename>
74*2175Sjp161948
75*2175Sjp161948an input filename containing a single certificate request to be
76*2175Sjp161948signed by the CA.
77*2175Sjp161948
78*2175Sjp161948=item B<-ss_cert filename>
79*2175Sjp161948
80*2175Sjp161948a single self signed certificate to be signed by the CA.
81*2175Sjp161948
82*2175Sjp161948=item B<-spkac filename>
83*2175Sjp161948
84*2175Sjp161948a file containing a single Netscape signed public key and challenge
85*2175Sjp161948and additional field values to be signed by the CA. See the B<SPKAC FORMAT>
86*2175Sjp161948section for information on the required format.
87*2175Sjp161948
88*2175Sjp161948=item B<-infiles>
89*2175Sjp161948
90*2175Sjp161948if present this should be the last option, all subsequent arguments
91*2175Sjp161948are assumed to the the names of files containing certificate requests.
92*2175Sjp161948
93*2175Sjp161948=item B<-out filename>
94*2175Sjp161948
95*2175Sjp161948the output file to output certificates to. The default is standard
96*2175Sjp161948output. The certificate details will also be printed out to this
97*2175Sjp161948file.
98*2175Sjp161948
99*2175Sjp161948=item B<-outdir directory>
100*2175Sjp161948
101*2175Sjp161948the directory to output certificates to. The certificate will be
102*2175Sjp161948written to a filename consisting of the serial number in hex with
103*2175Sjp161948".pem" appended.
104*2175Sjp161948
105*2175Sjp161948=item B<-cert>
106*2175Sjp161948
107*2175Sjp161948the CA certificate file.
108*2175Sjp161948
109*2175Sjp161948=item B<-keyfile filename>
110*2175Sjp161948
111*2175Sjp161948the private key to sign requests with.
112*2175Sjp161948
113*2175Sjp161948=item B<-key password>
114*2175Sjp161948
115*2175Sjp161948the password used to encrypt the private key. Since on some
116*2175Sjp161948systems the command line arguments are visible (e.g. Unix with
117*2175Sjp161948the 'ps' utility) this option should be used with caution.
118*2175Sjp161948
119*2175Sjp161948=item B<-selfsign>
120*2175Sjp161948
121*2175Sjp161948indicates the issued certificates are to be signed with the key
122*2175Sjp161948the certificate requests were signed with (given with B<-keyfile>).
123*2175Sjp161948Cerificate requests signed with a different key are ignored.  If
124*2175Sjp161948B<-spkac>, B<-ss_cert> or B<-gencrl> are given, B<-selfsign> is
125*2175Sjp161948ignored.
126*2175Sjp161948
127*2175Sjp161948A consequence of using B<-selfsign> is that the self-signed
128*2175Sjp161948certificate appears among the entries in the certificate database
129*2175Sjp161948(see the configuration option B<database>), and uses the same
130*2175Sjp161948serial number counter as all other certificates sign with the
131*2175Sjp161948self-signed certificate.
132*2175Sjp161948
133*2175Sjp161948=item B<-passin arg>
134*2175Sjp161948
135*2175Sjp161948the key password source. For more information about the format of B<arg>
136*2175Sjp161948see the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>.
137*2175Sjp161948
138*2175Sjp161948=item B<-verbose>
139*2175Sjp161948
140*2175Sjp161948this prints extra details about the operations being performed.
141*2175Sjp161948
142*2175Sjp161948=item B<-notext>
143*2175Sjp161948
144*2175Sjp161948don't output the text form of a certificate to the output file.
145*2175Sjp161948
146*2175Sjp161948=item B<-startdate date>
147*2175Sjp161948
148*2175Sjp161948this allows the start date to be explicitly set. The format of the
149*2175Sjp161948date is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure).
150*2175Sjp161948
151*2175Sjp161948=item B<-enddate date>
152*2175Sjp161948
153*2175Sjp161948this allows the expiry date to be explicitly set. The format of the
154*2175Sjp161948date is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure).
155*2175Sjp161948
156*2175Sjp161948=item B<-days arg>
157*2175Sjp161948
158*2175Sjp161948the number of days to certify the certificate for.
159*2175Sjp161948
160*2175Sjp161948=item B<-md alg>
161*2175Sjp161948
162*2175Sjp161948the message digest to use. Possible values include md5, sha1 and mdc2.
163*2175Sjp161948This option also applies to CRLs.
164*2175Sjp161948
165*2175Sjp161948=item B<-policy arg>
166*2175Sjp161948
167*2175Sjp161948this option defines the CA "policy" to use. This is a section in
168*2175Sjp161948the configuration file which decides which fields should be mandatory
169*2175Sjp161948or match the CA certificate. Check out the B<POLICY FORMAT> section
170*2175Sjp161948for more information.
171*2175Sjp161948
172*2175Sjp161948=item B<-msie_hack>
173*2175Sjp161948
174*2175Sjp161948this is a legacy option to make B<ca> work with very old versions of
175*2175Sjp161948the IE certificate enrollment control "certenr3". It used UniversalStrings
176*2175Sjp161948for almost everything. Since the old control has various security bugs
177*2175Sjp161948its use is strongly discouraged. The newer control "Xenroll" does not
178*2175Sjp161948need this option.
179*2175Sjp161948
180*2175Sjp161948=item B<-preserveDN>
181*2175Sjp161948
182*2175Sjp161948Normally the DN order of a certificate is the same as the order of the
183*2175Sjp161948fields in the relevant policy section. When this option is set the order
184*2175Sjp161948is the same as the request. This is largely for compatibility with the
185*2175Sjp161948older IE enrollment control which would only accept certificates if their
186*2175Sjp161948DNs match the order of the request. This is not needed for Xenroll.
187*2175Sjp161948
188*2175Sjp161948=item B<-noemailDN>
189*2175Sjp161948
190*2175Sjp161948The DN of a certificate can contain the EMAIL field if present in the
191*2175Sjp161948request DN, however it is good policy just having the e-mail set into
192*2175Sjp161948the altName extension of the certificate. When this option is set the
193*2175Sjp161948EMAIL field is removed from the certificate' subject and set only in
194*2175Sjp161948the, eventually present, extensions. The B<email_in_dn> keyword can be
195*2175Sjp161948used in the configuration file to enable this behaviour.
196*2175Sjp161948
197*2175Sjp161948=item B<-batch>
198*2175Sjp161948
199*2175Sjp161948this sets the batch mode. In this mode no questions will be asked
200*2175Sjp161948and all certificates will be certified automatically.
201*2175Sjp161948
202*2175Sjp161948=item B<-extensions section>
203*2175Sjp161948
204*2175Sjp161948the section of the configuration file containing certificate extensions
205*2175Sjp161948to be added when a certificate is issued (defaults to B<x509_extensions>
206*2175Sjp161948unless the B<-extfile> option is used). If no extension section is
207*2175Sjp161948present then, a V1 certificate is created. If the extension section
208*2175Sjp161948is present (even if it is empty), then a V3 certificate is created.
209*2175Sjp161948
210*2175Sjp161948=item B<-extfile file>
211*2175Sjp161948
212*2175Sjp161948an additional configuration file to read certificate extensions from
213*2175Sjp161948(using the default section unless the B<-extensions> option is also
214*2175Sjp161948used).
215*2175Sjp161948
216*2175Sjp161948=item B<-engine id>
217*2175Sjp161948
218*2175Sjp161948specifying an engine (by it's unique B<id> string) will cause B<req>
219*2175Sjp161948to attempt to obtain a functional reference to the specified engine,
220*2175Sjp161948thus initialising it if needed. The engine will then be set as the default
221*2175Sjp161948for all available algorithms.
222*2175Sjp161948
223*2175Sjp161948=item B<-subj arg>
224*2175Sjp161948
225*2175Sjp161948supersedes subject name given in the request.
226*2175Sjp161948The arg must be formatted as I</type0=value0/type1=value1/type2=...>,
227*2175Sjp161948characters may be escaped by \ (backslash), no spaces are skipped.
228*2175Sjp161948
229*2175Sjp161948=item B<-utf8>
230*2175Sjp161948
231*2175Sjp161948this option causes field values to be interpreted as UTF8 strings, by
232*2175Sjp161948default they are interpreted as ASCII. This means that the field
233*2175Sjp161948values, whether prompted from a terminal or obtained from a
234*2175Sjp161948configuration file, must be valid UTF8 strings.
235*2175Sjp161948
236*2175Sjp161948=item B<-multivalue-rdn>
237*2175Sjp161948
238*2175Sjp161948this option causes the -subj argument to be interpretedt with full
239*2175Sjp161948support for multivalued RDNs. Example:
240*2175Sjp161948
241*2175Sjp161948I</DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe>
242*2175Sjp161948
243*2175Sjp161948If -multi-rdn is not used then the UID value is I<123456+CN=John Doe>.
244*2175Sjp161948
245*2175Sjp161948=back
246*2175Sjp161948
247*2175Sjp161948=head1 CRL OPTIONS
248*2175Sjp161948
249*2175Sjp161948=over 4
250*2175Sjp161948
251*2175Sjp161948=item B<-gencrl>
252*2175Sjp161948
253*2175Sjp161948this option generates a CRL based on information in the index file.
254*2175Sjp161948
255*2175Sjp161948=item B<-crldays num>
256*2175Sjp161948
257*2175Sjp161948the number of days before the next CRL is due. That is the days from
258*2175Sjp161948now to place in the CRL nextUpdate field.
259*2175Sjp161948
260*2175Sjp161948=item B<-crlhours num>
261*2175Sjp161948
262*2175Sjp161948the number of hours before the next CRL is due.
263*2175Sjp161948
264*2175Sjp161948=item B<-revoke filename>
265*2175Sjp161948
266*2175Sjp161948a filename containing a certificate to revoke.
267*2175Sjp161948
268*2175Sjp161948=item B<-crl_reason reason>
269*2175Sjp161948
270*2175Sjp161948revocation reason, where B<reason> is one of: B<unspecified>, B<keyCompromise>,
271*2175Sjp161948B<CACompromise>, B<affiliationChanged>, B<superseded>, B<cessationOfOperation>,
272*2175Sjp161948B<certificateHold> or B<removeFromCRL>. The matching of B<reason> is case
273*2175Sjp161948insensitive. Setting any revocation reason will make the CRL v2.
274*2175Sjp161948
275*2175Sjp161948In practive B<removeFromCRL> is not particularly useful because it is only used
276*2175Sjp161948in delta CRLs which are not currently implemented.
277*2175Sjp161948
278*2175Sjp161948=item B<-crl_hold instruction>
279*2175Sjp161948
280*2175Sjp161948This sets the CRL revocation reason code to B<certificateHold> and the hold
281*2175Sjp161948instruction to B<instruction> which must be an OID. Although any OID can be
282*2175Sjp161948used only B<holdInstructionNone> (the use of which is discouraged by RFC2459)
283*2175Sjp161948B<holdInstructionCallIssuer> or B<holdInstructionReject> will normally be used.
284*2175Sjp161948
285*2175Sjp161948=item B<-crl_compromise time>
286*2175Sjp161948
287*2175Sjp161948This sets the revocation reason to B<keyCompromise> and the compromise time to
288*2175Sjp161948B<time>. B<time> should be in GeneralizedTime format that is B<YYYYMMDDHHMMSSZ>.
289*2175Sjp161948
290*2175Sjp161948=item B<-crl_CA_compromise time>
291*2175Sjp161948
292*2175Sjp161948This is the same as B<crl_compromise> except the revocation reason is set to
293*2175Sjp161948B<CACompromise>.
294*2175Sjp161948
295*2175Sjp161948=item B<-crlexts section>
296*2175Sjp161948
297*2175Sjp161948the section of the configuration file containing CRL extensions to
298*2175Sjp161948include. If no CRL extension section is present then a V1 CRL is
299*2175Sjp161948created, if the CRL extension section is present (even if it is
300*2175Sjp161948empty) then a V2 CRL is created. The CRL extensions specified are
301*2175Sjp161948CRL extensions and B<not> CRL entry extensions.  It should be noted
302*2175Sjp161948that some software (for example Netscape) can't handle V2 CRLs.
303*2175Sjp161948
304*2175Sjp161948=back
305*2175Sjp161948
306*2175Sjp161948=head1 CONFIGURATION FILE OPTIONS
307*2175Sjp161948
308*2175Sjp161948The section of the configuration file containing options for B<ca>
309*2175Sjp161948is found as follows: If the B<-name> command line option is used,
310*2175Sjp161948then it names the section to be used. Otherwise the section to
311*2175Sjp161948be used must be named in the B<default_ca> option of the B<ca> section
312*2175Sjp161948of the configuration file (or in the default section of the
313*2175Sjp161948configuration file). Besides B<default_ca>, the following options are
314*2175Sjp161948read directly from the B<ca> section:
315*2175Sjp161948 RANDFILE
316*2175Sjp161948 preserve
317*2175Sjp161948 msie_hack
318*2175Sjp161948With the exception of B<RANDFILE>, this is probably a bug and may
319*2175Sjp161948change in future releases.
320*2175Sjp161948
321*2175Sjp161948Many of the configuration file options are identical to command line
322*2175Sjp161948options. Where the option is present in the configuration file
323*2175Sjp161948and the command line the command line value is used. Where an
324*2175Sjp161948option is described as mandatory then it must be present in
325*2175Sjp161948the configuration file or the command line equivalent (if
326*2175Sjp161948any) used.
327*2175Sjp161948
328*2175Sjp161948=over 4
329*2175Sjp161948
330*2175Sjp161948=item B<oid_file>
331*2175Sjp161948
332*2175Sjp161948This specifies a file containing additional B<OBJECT IDENTIFIERS>.
333*2175Sjp161948Each line of the file should consist of the numerical form of the
334*2175Sjp161948object identifier followed by white space then the short name followed
335*2175Sjp161948by white space and finally the long name.
336*2175Sjp161948
337*2175Sjp161948=item B<oid_section>
338*2175Sjp161948
339*2175Sjp161948This specifies a section in the configuration file containing extra
340*2175Sjp161948object identifiers. Each line should consist of the short name of the
341*2175Sjp161948object identifier followed by B<=> and the numerical form. The short
342*2175Sjp161948and long names are the same when this option is used.
343*2175Sjp161948
344*2175Sjp161948=item B<new_certs_dir>
345*2175Sjp161948
346*2175Sjp161948the same as the B<-outdir> command line option. It specifies
347*2175Sjp161948the directory where new certificates will be placed. Mandatory.
348*2175Sjp161948
349*2175Sjp161948=item B<certificate>
350*2175Sjp161948
351*2175Sjp161948the same as B<-cert>. It gives the file containing the CA
352*2175Sjp161948certificate. Mandatory.
353*2175Sjp161948
354*2175Sjp161948=item B<private_key>
355*2175Sjp161948
356*2175Sjp161948same as the B<-keyfile> option. The file containing the
357*2175Sjp161948CA private key. Mandatory.
358*2175Sjp161948
359*2175Sjp161948=item B<RANDFILE>
360*2175Sjp161948
361*2175Sjp161948a file used to read and write random number seed information, or
362*2175Sjp161948an EGD socket (see L<RAND_egd(3)|RAND_egd(3)>).
363*2175Sjp161948
364*2175Sjp161948=item B<default_days>
365*2175Sjp161948
366*2175Sjp161948the same as the B<-days> option. The number of days to certify
367*2175Sjp161948a certificate for.
368*2175Sjp161948
369*2175Sjp161948=item B<default_startdate>
370*2175Sjp161948
371*2175Sjp161948the same as the B<-startdate> option. The start date to certify
372*2175Sjp161948a certificate for. If not set the current time is used.
373*2175Sjp161948
374*2175Sjp161948=item B<default_enddate>
375*2175Sjp161948
376*2175Sjp161948the same as the B<-enddate> option. Either this option or
377*2175Sjp161948B<default_days> (or the command line equivalents) must be
378*2175Sjp161948present.
379*2175Sjp161948
380*2175Sjp161948=item B<default_crl_hours default_crl_days>
381*2175Sjp161948
382*2175Sjp161948the same as the B<-crlhours> and the B<-crldays> options. These
383*2175Sjp161948will only be used if neither command line option is present. At
384*2175Sjp161948least one of these must be present to generate a CRL.
385*2175Sjp161948
386*2175Sjp161948=item B<default_md>
387*2175Sjp161948
388*2175Sjp161948the same as the B<-md> option. The message digest to use. Mandatory.
389*2175Sjp161948
390*2175Sjp161948=item B<database>
391*2175Sjp161948
392*2175Sjp161948the text database file to use. Mandatory. This file must be present
393*2175Sjp161948though initially it will be empty.
394*2175Sjp161948
395*2175Sjp161948=item B<unique_subject>
396*2175Sjp161948
397*2175Sjp161948if the value B<yes> is given, the valid certificate entries in the
398*2175Sjp161948database must have unique subjects.  if the value B<no> is given,
399*2175Sjp161948several valid certificate entries may have the exact same subject.
400*2175Sjp161948The default value is B<yes>, to be compatible with older (pre 0.9.8)
401*2175Sjp161948versions of OpenSSL.  However, to make CA certificate roll-over easier,
402*2175Sjp161948it's recommended to use the value B<no>, especially if combined with
403*2175Sjp161948the B<-selfsign> command line option.
404*2175Sjp161948
405*2175Sjp161948=item B<serial>
406*2175Sjp161948
407*2175Sjp161948a text file containing the next serial number to use in hex. Mandatory.
408*2175Sjp161948This file must be present and contain a valid serial number.
409*2175Sjp161948
410*2175Sjp161948=item B<crlnumber>
411*2175Sjp161948
412*2175Sjp161948a text file containing the next CRL number to use in hex. The crl number
413*2175Sjp161948will be inserted in the CRLs only if this file exists. If this file is
414*2175Sjp161948present, it must contain a valid CRL number.
415*2175Sjp161948
416*2175Sjp161948=item B<x509_extensions>
417*2175Sjp161948
418*2175Sjp161948the same as B<-extensions>.
419*2175Sjp161948
420*2175Sjp161948=item B<crl_extensions>
421*2175Sjp161948
422*2175Sjp161948the same as B<-crlexts>.
423*2175Sjp161948
424*2175Sjp161948=item B<preserve>
425*2175Sjp161948
426*2175Sjp161948the same as B<-preserveDN>
427*2175Sjp161948
428*2175Sjp161948=item B<email_in_dn>
429*2175Sjp161948
430*2175Sjp161948the same as B<-noemailDN>. If you want the EMAIL field to be removed
431*2175Sjp161948from the DN of the certificate simply set this to 'no'. If not present
432*2175Sjp161948the default is to allow for the EMAIL filed in the certificate's DN.
433*2175Sjp161948
434*2175Sjp161948=item B<msie_hack>
435*2175Sjp161948
436*2175Sjp161948the same as B<-msie_hack>
437*2175Sjp161948
438*2175Sjp161948=item B<policy>
439*2175Sjp161948
440*2175Sjp161948the same as B<-policy>. Mandatory. See the B<POLICY FORMAT> section
441*2175Sjp161948for more information.
442*2175Sjp161948
443*2175Sjp161948=item B<name_opt>, B<cert_opt>
444*2175Sjp161948
445*2175Sjp161948these options allow the format used to display the certificate details
446*2175Sjp161948when asking the user to confirm signing. All the options supported by
447*2175Sjp161948the B<x509> utilities B<-nameopt> and B<-certopt> switches can be used
448*2175Sjp161948here, except the B<no_signame> and B<no_sigdump> are permanently set
449*2175Sjp161948and cannot be disabled (this is because the certificate signature cannot
450*2175Sjp161948be displayed because the certificate has not been signed at this point).
451*2175Sjp161948
452*2175Sjp161948For convenience the values B<ca_default> are accepted by both to produce
453*2175Sjp161948a reasonable output.
454*2175Sjp161948
455*2175Sjp161948If neither option is present the format used in earlier versions of
456*2175Sjp161948OpenSSL is used. Use of the old format is B<strongly> discouraged because
457*2175Sjp161948it only displays fields mentioned in the B<policy> section, mishandles
458*2175Sjp161948multicharacter string types and does not display extensions.
459*2175Sjp161948
460*2175Sjp161948=item B<copy_extensions>
461*2175Sjp161948
462*2175Sjp161948determines how extensions in certificate requests should be handled.
463*2175Sjp161948If set to B<none> or this option is not present then extensions are
464*2175Sjp161948ignored and not copied to the certificate. If set to B<copy> then any
465*2175Sjp161948extensions present in the request that are not already present are copied
466*2175Sjp161948to the certificate. If set to B<copyall> then all extensions in the
467*2175Sjp161948request are copied to the certificate: if the extension is already present
468*2175Sjp161948in the certificate it is deleted first. See the B<WARNINGS> section before
469*2175Sjp161948using this option.
470*2175Sjp161948
471*2175Sjp161948The main use of this option is to allow a certificate request to supply
472*2175Sjp161948values for certain extensions such as subjectAltName.
473*2175Sjp161948
474*2175Sjp161948=back
475*2175Sjp161948
476*2175Sjp161948=head1 POLICY FORMAT
477*2175Sjp161948
478*2175Sjp161948The policy section consists of a set of variables corresponding to
479*2175Sjp161948certificate DN fields. If the value is "match" then the field value
480*2175Sjp161948must match the same field in the CA certificate. If the value is
481*2175Sjp161948"supplied" then it must be present. If the value is "optional" then
482*2175Sjp161948it may be present. Any fields not mentioned in the policy section
483*2175Sjp161948are silently deleted, unless the B<-preserveDN> option is set but
484*2175Sjp161948this can be regarded more of a quirk than intended behaviour.
485*2175Sjp161948
486*2175Sjp161948=head1 SPKAC FORMAT
487*2175Sjp161948
488*2175Sjp161948The input to the B<-spkac> command line option is a Netscape
489*2175Sjp161948signed public key and challenge. This will usually come from
490*2175Sjp161948the B<KEYGEN> tag in an HTML form to create a new private key.
491*2175Sjp161948It is however possible to create SPKACs using the B<spkac> utility.
492*2175Sjp161948
493*2175Sjp161948The file should contain the variable SPKAC set to the value of
494*2175Sjp161948the SPKAC and also the required DN components as name value pairs.
495*2175Sjp161948If you need to include the same component twice then it can be
496*2175Sjp161948preceded by a number and a '.'.
497*2175Sjp161948
498*2175Sjp161948=head1 EXAMPLES
499*2175Sjp161948
500*2175Sjp161948Note: these examples assume that the B<ca> directory structure is
501*2175Sjp161948already set up and the relevant files already exist. This usually
502*2175Sjp161948involves creating a CA certificate and private key with B<req>, a
503*2175Sjp161948serial number file and an empty index file and placing them in
504*2175Sjp161948the relevant directories.
505*2175Sjp161948
506*2175Sjp161948To use the sample configuration file below the directories demoCA,
507*2175Sjp161948demoCA/private and demoCA/newcerts would be created. The CA
508*2175Sjp161948certificate would be copied to demoCA/cacert.pem and its private
509*2175Sjp161948key to demoCA/private/cakey.pem. A file demoCA/serial would be
510*2175Sjp161948created containing for example "01" and the empty index file
511*2175Sjp161948demoCA/index.txt.
512*2175Sjp161948
513*2175Sjp161948
514*2175Sjp161948Sign a certificate request:
515*2175Sjp161948
516*2175Sjp161948 openssl ca -in req.pem -out newcert.pem
517*2175Sjp161948
518*2175Sjp161948Sign a certificate request, using CA extensions:
519*2175Sjp161948
520*2175Sjp161948 openssl ca -in req.pem -extensions v3_ca -out newcert.pem
521*2175Sjp161948
522*2175Sjp161948Generate a CRL
523*2175Sjp161948
524*2175Sjp161948 openssl ca -gencrl -out crl.pem
525*2175Sjp161948
526*2175Sjp161948Sign several requests:
527*2175Sjp161948
528*2175Sjp161948 openssl ca -infiles req1.pem req2.pem req3.pem
529*2175Sjp161948
530*2175Sjp161948Certify a Netscape SPKAC:
531*2175Sjp161948
532*2175Sjp161948 openssl ca -spkac spkac.txt
533*2175Sjp161948
534*2175Sjp161948A sample SPKAC file (the SPKAC line has been truncated for clarity):
535*2175Sjp161948
536*2175Sjp161948 SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5
537*2175Sjp161948 CN=Steve Test
538*2175Sjp161948 emailAddress=steve@openssl.org
539*2175Sjp161948 0.OU=OpenSSL Group
540*2175Sjp161948 1.OU=Another Group
541*2175Sjp161948
542*2175Sjp161948A sample configuration file with the relevant sections for B<ca>:
543*2175Sjp161948
544*2175Sjp161948 [ ca ]
545*2175Sjp161948 default_ca      = CA_default            # The default ca section
546*2175Sjp161948
547*2175Sjp161948 [ CA_default ]
548*2175Sjp161948
549*2175Sjp161948 dir            = ./demoCA              # top dir
550*2175Sjp161948 database       = $dir/index.txt        # index file.
551*2175Sjp161948 new_certs_dir	= $dir/newcerts         # new certs dir
552*2175Sjp161948
553*2175Sjp161948 certificate    = $dir/cacert.pem       # The CA cert
554*2175Sjp161948 serial         = $dir/serial           # serial no file
555*2175Sjp161948 private_key    = $dir/private/cakey.pem# CA private key
556*2175Sjp161948 RANDFILE       = $dir/private/.rand    # random number file
557*2175Sjp161948
558*2175Sjp161948 default_days   = 365                   # how long to certify for
559*2175Sjp161948 default_crl_days= 30                   # how long before next CRL
560*2175Sjp161948 default_md     = md5                   # md to use
561*2175Sjp161948
562*2175Sjp161948 policy         = policy_any            # default policy
563*2175Sjp161948 email_in_dn    = no                    # Don't add the email into cert DN
564*2175Sjp161948
565*2175Sjp161948 name_opt	= ca_default		# Subject name display option
566*2175Sjp161948 cert_opt	= ca_default		# Certificate display option
567*2175Sjp161948 copy_extensions = none			# Don't copy extensions from request
568*2175Sjp161948
569*2175Sjp161948 [ policy_any ]
570*2175Sjp161948 countryName            = supplied
571*2175Sjp161948 stateOrProvinceName    = optional
572*2175Sjp161948 organizationName       = optional
573*2175Sjp161948 organizationalUnitName = optional
574*2175Sjp161948 commonName             = supplied
575*2175Sjp161948 emailAddress           = optional
576*2175Sjp161948
577*2175Sjp161948=head1 FILES
578*2175Sjp161948
579*2175Sjp161948Note: the location of all files can change either by compile time options,
580*2175Sjp161948configuration file entries, environment variables or command line options.
581*2175Sjp161948The values below reflect the default values.
582*2175Sjp161948
583*2175Sjp161948 /usr/local/ssl/lib/openssl.cnf - master configuration file
584*2175Sjp161948 ./demoCA                       - main CA directory
585*2175Sjp161948 ./demoCA/cacert.pem            - CA certificate
586*2175Sjp161948 ./demoCA/private/cakey.pem     - CA private key
587*2175Sjp161948 ./demoCA/serial                - CA serial number file
588*2175Sjp161948 ./demoCA/serial.old            - CA serial number backup file
589*2175Sjp161948 ./demoCA/index.txt             - CA text database file
590*2175Sjp161948 ./demoCA/index.txt.old         - CA text database backup file
591*2175Sjp161948 ./demoCA/certs                 - certificate output file
592*2175Sjp161948 ./demoCA/.rnd                  - CA random seed information
593*2175Sjp161948
594*2175Sjp161948=head1 ENVIRONMENT VARIABLES
595*2175Sjp161948
596*2175Sjp161948B<OPENSSL_CONF> reflects the location of master configuration file it can
597*2175Sjp161948be overridden by the B<-config> command line option.
598*2175Sjp161948
599*2175Sjp161948=head1 RESTRICTIONS
600*2175Sjp161948
601*2175Sjp161948The text database index file is a critical part of the process and
602*2175Sjp161948if corrupted it can be difficult to fix. It is theoretically possible
603*2175Sjp161948to rebuild the index file from all the issued certificates and a current
604*2175Sjp161948CRL: however there is no option to do this.
605*2175Sjp161948
606*2175Sjp161948V2 CRL features like delta CRLs are not currently supported.
607*2175Sjp161948
608*2175Sjp161948Although several requests can be input and handled at once it is only
609*2175Sjp161948possible to include one SPKAC or self signed certificate.
610*2175Sjp161948
611*2175Sjp161948=head1 BUGS
612*2175Sjp161948
613*2175Sjp161948The use of an in memory text database can cause problems when large
614*2175Sjp161948numbers of certificates are present because, as the name implies
615*2175Sjp161948the database has to be kept in memory.
616*2175Sjp161948
617*2175Sjp161948The B<ca> command really needs rewriting or the required functionality
618*2175Sjp161948exposed at either a command or interface level so a more friendly utility
619*2175Sjp161948(perl script or GUI) can handle things properly. The scripts B<CA.sh> and
620*2175Sjp161948B<CA.pl> help a little but not very much.
621*2175Sjp161948
622*2175Sjp161948Any fields in a request that are not present in a policy are silently
623*2175Sjp161948deleted. This does not happen if the B<-preserveDN> option is used. To
624*2175Sjp161948enforce the absence of the EMAIL field within the DN, as suggested by
625*2175Sjp161948RFCs, regardless the contents of the request' subject the B<-noemailDN>
626*2175Sjp161948option can be used. The behaviour should be more friendly and
627*2175Sjp161948configurable.
628*2175Sjp161948
629*2175Sjp161948Cancelling some commands by refusing to certify a certificate can
630*2175Sjp161948create an empty file.
631*2175Sjp161948
632*2175Sjp161948=head1 WARNINGS
633*2175Sjp161948
634*2175Sjp161948The B<ca> command is quirky and at times downright unfriendly.
635*2175Sjp161948
636*2175Sjp161948The B<ca> utility was originally meant as an example of how to do things
637*2175Sjp161948in a CA. It was not supposed to be used as a full blown CA itself:
638*2175Sjp161948nevertheless some people are using it for this purpose.
639*2175Sjp161948
640*2175Sjp161948The B<ca> command is effectively a single user command: no locking is
641*2175Sjp161948done on the various files and attempts to run more than one B<ca> command
642*2175Sjp161948on the same database can have unpredictable results.
643*2175Sjp161948
644*2175Sjp161948The B<copy_extensions> option should be used with caution. If care is
645*2175Sjp161948not taken then it can be a security risk. For example if a certificate
646*2175Sjp161948request contains a basicConstraints extension with CA:TRUE and the
647*2175Sjp161948B<copy_extensions> value is set to B<copyall> and the user does not spot
648*2175Sjp161948this when the certificate is displayed then this will hand the requestor
649*2175Sjp161948a valid CA certificate.
650*2175Sjp161948
651*2175Sjp161948This situation can be avoided by setting B<copy_extensions> to B<copy>
652*2175Sjp161948and including basicConstraints with CA:FALSE in the configuration file.
653*2175Sjp161948Then if the request contains a basicConstraints extension it will be
654*2175Sjp161948ignored.
655*2175Sjp161948
656*2175Sjp161948It is advisable to also include values for other extensions such
657*2175Sjp161948as B<keyUsage> to prevent a request supplying its own values.
658*2175Sjp161948
659*2175Sjp161948Additional restrictions can be placed on the CA certificate itself.
660*2175Sjp161948For example if the CA certificate has:
661*2175Sjp161948
662*2175Sjp161948 basicConstraints = CA:TRUE, pathlen:0
663*2175Sjp161948
664*2175Sjp161948then even if a certificate is issued with CA:TRUE it will not be valid.
665*2175Sjp161948
666*2175Sjp161948=head1 SEE ALSO
667*2175Sjp161948
668*2175Sjp161948L<req(1)|req(1)>, L<spkac(1)|spkac(1)>, L<x509(1)|x509(1)>, L<CA.pl(1)|CA.pl(1)>,
669*2175Sjp161948L<config(5)|config(5)>
670*2175Sjp161948
671*2175Sjp161948=cut
672