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