159191Skris 259191Skris=pod 359191Skris 459191Skris=head1 NAME 559191Skris 659191Skrisca - sample minimal CA application 759191Skris 859191Skris=head1 SYNOPSIS 959191Skris 1059191SkrisB<openssl> B<ca> 1159191Skris[B<-verbose>] 1259191Skris[B<-config filename>] 1359191Skris[B<-name section>] 1459191Skris[B<-gencrl>] 1559191Skris[B<-revoke file>] 16269682Sjkim[B<-status serial>] 17269682Sjkim[B<-updatedb>] 18109998Smarkm[B<-crl_reason reason>] 19109998Smarkm[B<-crl_hold instruction>] 20109998Smarkm[B<-crl_compromise time>] 21109998Smarkm[B<-crl_CA_compromise time>] 2259191Skris[B<-crldays days>] 2359191Skris[B<-crlhours hours>] 2459191Skris[B<-crlexts section>] 2559191Skris[B<-startdate date>] 2659191Skris[B<-enddate date>] 2759191Skris[B<-days arg>] 2859191Skris[B<-md arg>] 2959191Skris[B<-policy arg>] 3059191Skris[B<-keyfile arg>] 31269682Sjkim[B<-keyform PEM|DER>] 3259191Skris[B<-key arg>] 3368651Skris[B<-passin arg>] 3459191Skris[B<-cert file>] 35160814Ssimon[B<-selfsign>] 3659191Skris[B<-in file>] 3759191Skris[B<-out file>] 3859191Skris[B<-notext>] 3959191Skris[B<-outdir dir>] 4059191Skris[B<-infiles>] 4159191Skris[B<-spkac file>] 4259191Skris[B<-ss_cert file>] 4359191Skris[B<-preserveDN>] 44109998Smarkm[B<-noemailDN>] 4559191Skris[B<-batch>] 4659191Skris[B<-msie_hack>] 4759191Skris[B<-extensions section>] 48109998Smarkm[B<-extfile section>] 49111147Snectar[B<-engine id>] 50160814Ssimon[B<-subj arg>] 51160814Ssimon[B<-utf8>] 52160814Ssimon[B<-multivalue-rdn>] 5359191Skris 5459191Skris=head1 DESCRIPTION 5559191Skris 5659191SkrisThe B<ca> command is a minimal CA application. It can be used 5759191Skristo sign certificate requests in a variety of forms and generate 5859191SkrisCRLs it also maintains a text database of issued certificates 5959191Skrisand their status. 6059191Skris 6159191SkrisThe options descriptions will be divided into each purpose. 6259191Skris 6359191Skris=head1 CA OPTIONS 6459191Skris 6559191Skris=over 4 6659191Skris 6759191Skris=item B<-config filename> 6859191Skris 6959191Skrisspecifies the configuration file to use. 7059191Skris 7189837Skris=item B<-name section> 7289837Skris 7389837Skrisspecifies the configuration file section to use (overrides 7489837SkrisB<default_ca> in the B<ca> section). 7589837Skris 7659191Skris=item B<-in filename> 7759191Skris 7859191Skrisan input filename containing a single certificate request to be 7959191Skrissigned by the CA. 8059191Skris 8159191Skris=item B<-ss_cert filename> 8259191Skris 8359191Skrisa single self signed certificate to be signed by the CA. 8459191Skris 8559191Skris=item B<-spkac filename> 8659191Skris 8759191Skrisa file containing a single Netscape signed public key and challenge 88109998Smarkmand additional field values to be signed by the CA. See the B<SPKAC FORMAT> 89269682Sjkimsection for information on the required input and output format. 9059191Skris 9159191Skris=item B<-infiles> 9259191Skris 9359191Skrisif present this should be the last option, all subsequent arguments 94237658Sjkimare assumed to be the names of files containing certificate requests. 9559191Skris 9659191Skris=item B<-out filename> 9759191Skris 9859191Skristhe output file to output certificates to. The default is standard 9959191Skrisoutput. The certificate details will also be printed out to this 100269682Sjkimfile in PEM format (except that B<-spkac> outputs DER format). 10159191Skris 10259191Skris=item B<-outdir directory> 10359191Skris 10459191Skristhe directory to output certificates to. The certificate will be 10559191Skriswritten to a filename consisting of the serial number in hex with 10659191Skris".pem" appended. 10759191Skris 10859191Skris=item B<-cert> 10959191Skris 11059191Skristhe CA certificate file. 11159191Skris 11259191Skris=item B<-keyfile filename> 11359191Skris 11459191Skristhe private key to sign requests with. 11559191Skris 116269682Sjkim=item B<-keyform PEM|DER> 117269682Sjkim 118269682Sjkimthe format of the data in the private key file. 119269682SjkimThe default is PEM. 120269682Sjkim 12159191Skris=item B<-key password> 12259191Skris 12359191Skristhe password used to encrypt the private key. Since on some 12459191Skrissystems the command line arguments are visible (e.g. Unix with 12559191Skristhe 'ps' utility) this option should be used with caution. 12659191Skris 127160814Ssimon=item B<-selfsign> 128160814Ssimon 129160814Ssimonindicates the issued certificates are to be signed with the key 130160814Ssimonthe certificate requests were signed with (given with B<-keyfile>). 131160814SsimonCerificate requests signed with a different key are ignored. If 132160814SsimonB<-spkac>, B<-ss_cert> or B<-gencrl> are given, B<-selfsign> is 133160814Ssimonignored. 134160814Ssimon 135160814SsimonA consequence of using B<-selfsign> is that the self-signed 136160814Ssimoncertificate appears among the entries in the certificate database 137160814Ssimon(see the configuration option B<database>), and uses the same 138160814Ssimonserial number counter as all other certificates sign with the 139160814Ssimonself-signed certificate. 140160814Ssimon 14168651Skris=item B<-passin arg> 14268651Skris 14368651Skristhe key password source. For more information about the format of B<arg> 14468651Skrissee the B<PASS PHRASE ARGUMENTS> section in L<openssl(1)|openssl(1)>. 145109998Smarkm 14659191Skris=item B<-verbose> 14759191Skris 14859191Skristhis prints extra details about the operations being performed. 14959191Skris 15059191Skris=item B<-notext> 15159191Skris 15259191Skrisdon't output the text form of a certificate to the output file. 15359191Skris 15459191Skris=item B<-startdate date> 15559191Skris 15659191Skristhis allows the start date to be explicitly set. The format of the 15759191Skrisdate is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure). 15859191Skris 15959191Skris=item B<-enddate date> 16059191Skris 16159191Skristhis allows the expiry date to be explicitly set. The format of the 16259191Skrisdate is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure). 16359191Skris 16459191Skris=item B<-days arg> 16559191Skris 16659191Skristhe number of days to certify the certificate for. 16759191Skris 16859191Skris=item B<-md alg> 16959191Skris 17059191Skristhe message digest to use. Possible values include md5, sha1 and mdc2. 17159191SkrisThis option also applies to CRLs. 17259191Skris 17359191Skris=item B<-policy arg> 17459191Skris 17559191Skristhis option defines the CA "policy" to use. This is a section in 17659191Skristhe configuration file which decides which fields should be mandatory 17759191Skrisor match the CA certificate. Check out the B<POLICY FORMAT> section 17859191Skrisfor more information. 17959191Skris 18059191Skris=item B<-msie_hack> 18159191Skris 18259191Skristhis is a legacy option to make B<ca> work with very old versions of 18359191Skristhe IE certificate enrollment control "certenr3". It used UniversalStrings 18459191Skrisfor almost everything. Since the old control has various security bugs 18559191Skrisits use is strongly discouraged. The newer control "Xenroll" does not 18659191Skrisneed this option. 18759191Skris 18859191Skris=item B<-preserveDN> 18959191Skris 19059191SkrisNormally the DN order of a certificate is the same as the order of the 19159191Skrisfields in the relevant policy section. When this option is set the order 19259191Skrisis the same as the request. This is largely for compatibility with the 19359191Skrisolder IE enrollment control which would only accept certificates if their 19459191SkrisDNs match the order of the request. This is not needed for Xenroll. 19559191Skris 196109998Smarkm=item B<-noemailDN> 197109998Smarkm 198109998SmarkmThe DN of a certificate can contain the EMAIL field if present in the 199109998Smarkmrequest DN, however it is good policy just having the e-mail set into 200109998Smarkmthe altName extension of the certificate. When this option is set the 201109998SmarkmEMAIL field is removed from the certificate' subject and set only in 202109998Smarkmthe, eventually present, extensions. The B<email_in_dn> keyword can be 203109998Smarkmused in the configuration file to enable this behaviour. 204109998Smarkm 20559191Skris=item B<-batch> 20659191Skris 20759191Skristhis sets the batch mode. In this mode no questions will be asked 20859191Skrisand all certificates will be certified automatically. 20959191Skris 21059191Skris=item B<-extensions section> 21159191Skris 21259191Skristhe section of the configuration file containing certificate extensions 213109998Smarkmto be added when a certificate is issued (defaults to B<x509_extensions> 214109998Smarkmunless the B<-extfile> option is used). If no extension section is 215109998Smarkmpresent then, a V1 certificate is created. If the extension section 216238405Sjkimis present (even if it is empty), then a V3 certificate is created. See the:w 217238405SjkimL<x509v3_config(5)|x509v3_config(5)> manual page for details of the 218238405Sjkimextension section format. 21959191Skris 220109998Smarkm=item B<-extfile file> 221109998Smarkm 222109998Smarkman additional configuration file to read certificate extensions from 223109998Smarkm(using the default section unless the B<-extensions> option is also 224109998Smarkmused). 225109998Smarkm 226111147Snectar=item B<-engine id> 227111147Snectar 228238405Sjkimspecifying an engine (by its unique B<id> string) will cause B<ca> 229111147Snectarto attempt to obtain a functional reference to the specified engine, 230111147Snectarthus initialising it if needed. The engine will then be set as the default 231111147Snectarfor all available algorithms. 232111147Snectar 233160814Ssimon=item B<-subj arg> 234160814Ssimon 235160814Ssimonsupersedes subject name given in the request. 236160814SsimonThe arg must be formatted as I</type0=value0/type1=value1/type2=...>, 237160814Ssimoncharacters may be escaped by \ (backslash), no spaces are skipped. 238160814Ssimon 239160814Ssimon=item B<-utf8> 240160814Ssimon 241160814Ssimonthis option causes field values to be interpreted as UTF8 strings, by 242160814Ssimondefault they are interpreted as ASCII. This means that the field 243160814Ssimonvalues, whether prompted from a terminal or obtained from a 244160814Ssimonconfiguration file, must be valid UTF8 strings. 245160814Ssimon 246160814Ssimon=item B<-multivalue-rdn> 247160814Ssimon 248160814Ssimonthis option causes the -subj argument to be interpretedt with full 249160814Ssimonsupport for multivalued RDNs. Example: 250160814Ssimon 251160814SsimonI</DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe> 252160814Ssimon 253160814SsimonIf -multi-rdn is not used then the UID value is I<123456+CN=John Doe>. 254160814Ssimon 25559191Skris=back 25659191Skris 25759191Skris=head1 CRL OPTIONS 25859191Skris 25959191Skris=over 4 26059191Skris 26159191Skris=item B<-gencrl> 26259191Skris 26359191Skristhis option generates a CRL based on information in the index file. 26459191Skris 26559191Skris=item B<-crldays num> 26659191Skris 26759191Skristhe number of days before the next CRL is due. That is the days from 26859191Skrisnow to place in the CRL nextUpdate field. 26959191Skris 27059191Skris=item B<-crlhours num> 27159191Skris 27259191Skristhe number of hours before the next CRL is due. 27359191Skris 27459191Skris=item B<-revoke filename> 27559191Skris 27659191Skrisa filename containing a certificate to revoke. 27759191Skris 278269682Sjkim=item B<-status serial> 279269682Sjkim 280269682Sjkimdisplays the revocation status of the certificate with the specified 281269682Sjkimserial number and exits. 282269682Sjkim 283269682Sjkim=item B<-updatedb> 284269682Sjkim 285269682SjkimUpdates the database index to purge expired certificates. 286269682Sjkim 287109998Smarkm=item B<-crl_reason reason> 288109998Smarkm 289109998Smarkmrevocation reason, where B<reason> is one of: B<unspecified>, B<keyCompromise>, 290109998SmarkmB<CACompromise>, B<affiliationChanged>, B<superseded>, B<cessationOfOperation>, 291109998SmarkmB<certificateHold> or B<removeFromCRL>. The matching of B<reason> is case 292109998Smarkminsensitive. Setting any revocation reason will make the CRL v2. 293109998Smarkm 294109998SmarkmIn practive B<removeFromCRL> is not particularly useful because it is only used 295109998Smarkmin delta CRLs which are not currently implemented. 296109998Smarkm 297109998Smarkm=item B<-crl_hold instruction> 298109998Smarkm 299109998SmarkmThis sets the CRL revocation reason code to B<certificateHold> and the hold 300109998Smarkminstruction to B<instruction> which must be an OID. Although any OID can be 301109998Smarkmused only B<holdInstructionNone> (the use of which is discouraged by RFC2459) 302109998SmarkmB<holdInstructionCallIssuer> or B<holdInstructionReject> will normally be used. 303109998Smarkm 304109998Smarkm=item B<-crl_compromise time> 305109998Smarkm 306109998SmarkmThis sets the revocation reason to B<keyCompromise> and the compromise time to 307109998SmarkmB<time>. B<time> should be in GeneralizedTime format that is B<YYYYMMDDHHMMSSZ>. 308109998Smarkm 309109998Smarkm=item B<-crl_CA_compromise time> 310109998Smarkm 311109998SmarkmThis is the same as B<crl_compromise> except the revocation reason is set to 312109998SmarkmB<CACompromise>. 313109998Smarkm 31459191Skris=item B<-crlexts section> 31559191Skris 31659191Skristhe section of the configuration file containing CRL extensions to 31759191Skrisinclude. If no CRL extension section is present then a V1 CRL is 31859191Skriscreated, if the CRL extension section is present (even if it is 31959191Skrisempty) then a V2 CRL is created. The CRL extensions specified are 32059191SkrisCRL extensions and B<not> CRL entry extensions. It should be noted 321238405Sjkimthat some software (for example Netscape) can't handle V2 CRLs. See 322238405SjkimL<x509v3_config(5)|x509v3_config(5)> manual page for details of the 323238405Sjkimextension section format. 32459191Skris 32559191Skris=back 32659191Skris 32759191Skris=head1 CONFIGURATION FILE OPTIONS 32859191Skris 32989837SkrisThe section of the configuration file containing options for B<ca> 33089837Skrisis found as follows: If the B<-name> command line option is used, 33189837Skristhen it names the section to be used. Otherwise the section to 33289837Skrisbe used must be named in the B<default_ca> option of the B<ca> section 33389837Skrisof the configuration file (or in the default section of the 33489837Skrisconfiguration file). Besides B<default_ca>, the following options are 33589837Skrisread directly from the B<ca> section: 33689837Skris RANDFILE 33789837Skris preserve 33889837Skris msie_hack 33989837SkrisWith the exception of B<RANDFILE>, this is probably a bug and may 34089837Skrischange in future releases. 34189837Skris 34289837SkrisMany of the configuration file options are identical to command line 34359191Skrisoptions. Where the option is present in the configuration file 34459191Skrisand the command line the command line value is used. Where an 34559191Skrisoption is described as mandatory then it must be present in 34659191Skristhe configuration file or the command line equivalent (if 34759191Skrisany) used. 34859191Skris 34959191Skris=over 4 35059191Skris 35159191Skris=item B<oid_file> 35259191Skris 35359191SkrisThis specifies a file containing additional B<OBJECT IDENTIFIERS>. 35459191SkrisEach line of the file should consist of the numerical form of the 35559191Skrisobject identifier followed by white space then the short name followed 35659191Skrisby white space and finally the long name. 35759191Skris 35859191Skris=item B<oid_section> 35959191Skris 36059191SkrisThis specifies a section in the configuration file containing extra 36159191Skrisobject identifiers. Each line should consist of the short name of the 36259191Skrisobject identifier followed by B<=> and the numerical form. The short 36359191Skrisand long names are the same when this option is used. 36459191Skris 36559191Skris=item B<new_certs_dir> 36659191Skris 36759191Skristhe same as the B<-outdir> command line option. It specifies 36859191Skristhe directory where new certificates will be placed. Mandatory. 36959191Skris 37059191Skris=item B<certificate> 37159191Skris 37259191Skristhe same as B<-cert>. It gives the file containing the CA 37359191Skriscertificate. Mandatory. 37459191Skris 37559191Skris=item B<private_key> 37659191Skris 37759191Skrissame as the B<-keyfile> option. The file containing the 37859191SkrisCA private key. Mandatory. 37959191Skris 38059191Skris=item B<RANDFILE> 38159191Skris 38259191Skrisa file used to read and write random number seed information, or 38359191Skrisan EGD socket (see L<RAND_egd(3)|RAND_egd(3)>). 38459191Skris 38559191Skris=item B<default_days> 38659191Skris 38759191Skristhe same as the B<-days> option. The number of days to certify 38859191Skrisa certificate for. 38959191Skris 39059191Skris=item B<default_startdate> 39159191Skris 39259191Skristhe same as the B<-startdate> option. The start date to certify 39359191Skrisa certificate for. If not set the current time is used. 39459191Skris 39559191Skris=item B<default_enddate> 39659191Skris 39759191Skristhe same as the B<-enddate> option. Either this option or 39859191SkrisB<default_days> (or the command line equivalents) must be 39959191Skrispresent. 40059191Skris 40159191Skris=item B<default_crl_hours default_crl_days> 40259191Skris 40359191Skristhe same as the B<-crlhours> and the B<-crldays> options. These 40459191Skriswill only be used if neither command line option is present. At 40559191Skrisleast one of these must be present to generate a CRL. 40659191Skris 40759191Skris=item B<default_md> 40859191Skris 40959191Skristhe same as the B<-md> option. The message digest to use. Mandatory. 41059191Skris 41159191Skris=item B<database> 41259191Skris 41359191Skristhe text database file to use. Mandatory. This file must be present 41459191Skristhough initially it will be empty. 41559191Skris 416160814Ssimon=item B<unique_subject> 417160814Ssimon 418160814Ssimonif the value B<yes> is given, the valid certificate entries in the 419160814Ssimondatabase must have unique subjects. if the value B<no> is given, 420160814Ssimonseveral valid certificate entries may have the exact same subject. 421160814SsimonThe default value is B<yes>, to be compatible with older (pre 0.9.8) 422160814Ssimonversions of OpenSSL. However, to make CA certificate roll-over easier, 423160814Ssimonit's recommended to use the value B<no>, especially if combined with 424160814Ssimonthe B<-selfsign> command line option. 425160814Ssimon 426120631Snectar=item B<serial> 42759191Skris 42859191Skrisa text file containing the next serial number to use in hex. Mandatory. 42959191SkrisThis file must be present and contain a valid serial number. 43059191Skris 431160814Ssimon=item B<crlnumber> 432160814Ssimon 433160814Ssimona text file containing the next CRL number to use in hex. The crl number 434160814Ssimonwill be inserted in the CRLs only if this file exists. If this file is 435160814Ssimonpresent, it must contain a valid CRL number. 436160814Ssimon 43759191Skris=item B<x509_extensions> 43859191Skris 43959191Skristhe same as B<-extensions>. 44059191Skris 44159191Skris=item B<crl_extensions> 44259191Skris 44359191Skristhe same as B<-crlexts>. 44459191Skris 44559191Skris=item B<preserve> 44659191Skris 44759191Skristhe same as B<-preserveDN> 44859191Skris 449109998Smarkm=item B<email_in_dn> 450109998Smarkm 451109998Smarkmthe same as B<-noemailDN>. If you want the EMAIL field to be removed 452109998Smarkmfrom the DN of the certificate simply set this to 'no'. If not present 453109998Smarkmthe default is to allow for the EMAIL filed in the certificate's DN. 454109998Smarkm 45559191Skris=item B<msie_hack> 45659191Skris 45759191Skristhe same as B<-msie_hack> 45859191Skris 45959191Skris=item B<policy> 46059191Skris 46159191Skristhe same as B<-policy>. Mandatory. See the B<POLICY FORMAT> section 46259191Skrisfor more information. 46359191Skris 464160814Ssimon=item B<name_opt>, B<cert_opt> 465109998Smarkm 466109998Smarkmthese options allow the format used to display the certificate details 467109998Smarkmwhen asking the user to confirm signing. All the options supported by 468109998Smarkmthe B<x509> utilities B<-nameopt> and B<-certopt> switches can be used 469109998Smarkmhere, except the B<no_signame> and B<no_sigdump> are permanently set 470109998Smarkmand cannot be disabled (this is because the certificate signature cannot 471109998Smarkmbe displayed because the certificate has not been signed at this point). 472109998Smarkm 473120631SnectarFor convenience the values B<ca_default> are accepted by both to produce 474109998Smarkma reasonable output. 475109998Smarkm 476109998SmarkmIf neither option is present the format used in earlier versions of 477109998SmarkmOpenSSL is used. Use of the old format is B<strongly> discouraged because 478109998Smarkmit only displays fields mentioned in the B<policy> section, mishandles 479109998Smarkmmulticharacter string types and does not display extensions. 480109998Smarkm 481109998Smarkm=item B<copy_extensions> 482109998Smarkm 483109998Smarkmdetermines how extensions in certificate requests should be handled. 484109998SmarkmIf set to B<none> or this option is not present then extensions are 485109998Smarkmignored and not copied to the certificate. If set to B<copy> then any 486109998Smarkmextensions present in the request that are not already present are copied 487109998Smarkmto the certificate. If set to B<copyall> then all extensions in the 488109998Smarkmrequest are copied to the certificate: if the extension is already present 489109998Smarkmin the certificate it is deleted first. See the B<WARNINGS> section before 490109998Smarkmusing this option. 491109998Smarkm 492109998SmarkmThe main use of this option is to allow a certificate request to supply 493109998Smarkmvalues for certain extensions such as subjectAltName. 494109998Smarkm 49559191Skris=back 49659191Skris 49759191Skris=head1 POLICY FORMAT 49859191Skris 49959191SkrisThe policy section consists of a set of variables corresponding to 50059191Skriscertificate DN fields. If the value is "match" then the field value 50159191Skrismust match the same field in the CA certificate. If the value is 50259191Skris"supplied" then it must be present. If the value is "optional" then 50359191Skrisit may be present. Any fields not mentioned in the policy section 50459191Skrisare silently deleted, unless the B<-preserveDN> option is set but 50559191Skristhis can be regarded more of a quirk than intended behaviour. 50659191Skris 50759191Skris=head1 SPKAC FORMAT 50859191Skris 50959191SkrisThe input to the B<-spkac> command line option is a Netscape 51059191Skrissigned public key and challenge. This will usually come from 51159191Skristhe B<KEYGEN> tag in an HTML form to create a new private key. 51259191SkrisIt is however possible to create SPKACs using the B<spkac> utility. 51359191Skris 51459191SkrisThe file should contain the variable SPKAC set to the value of 51559191Skristhe SPKAC and also the required DN components as name value pairs. 51659191SkrisIf you need to include the same component twice then it can be 51759191Skrispreceded by a number and a '.'. 51859191Skris 519269682SjkimWhen processing SPKAC format, the output is DER if the B<-out> 520269682Sjkimflag is used, but PEM format if sending to stdout or the B<-outdir> 521269682Sjkimflag is used. 522269682Sjkim 52359191Skris=head1 EXAMPLES 52459191Skris 52559191SkrisNote: these examples assume that the B<ca> directory structure is 52659191Skrisalready set up and the relevant files already exist. This usually 52759191Skrisinvolves creating a CA certificate and private key with B<req>, a 52859191Skrisserial number file and an empty index file and placing them in 52959191Skristhe relevant directories. 53059191Skris 53159191SkrisTo use the sample configuration file below the directories demoCA, 53259191SkrisdemoCA/private and demoCA/newcerts would be created. The CA 53359191Skriscertificate would be copied to demoCA/cacert.pem and its private 53459191Skriskey to demoCA/private/cakey.pem. A file demoCA/serial would be 53559191Skriscreated containing for example "01" and the empty index file 53659191SkrisdemoCA/index.txt. 53759191Skris 53859191Skris 53959191SkrisSign a certificate request: 54059191Skris 54159191Skris openssl ca -in req.pem -out newcert.pem 54259191Skris 54368651SkrisSign a certificate request, using CA extensions: 54468651Skris 54568651Skris openssl ca -in req.pem -extensions v3_ca -out newcert.pem 54668651Skris 54759191SkrisGenerate a CRL 54859191Skris 54959191Skris openssl ca -gencrl -out crl.pem 55059191Skris 55159191SkrisSign several requests: 55259191Skris 55359191Skris openssl ca -infiles req1.pem req2.pem req3.pem 55459191Skris 55559191SkrisCertify a Netscape SPKAC: 55659191Skris 55759191Skris openssl ca -spkac spkac.txt 55859191Skris 55959191SkrisA sample SPKAC file (the SPKAC line has been truncated for clarity): 56059191Skris 56159191Skris SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5 56259191Skris CN=Steve Test 56359191Skris emailAddress=steve@openssl.org 56459191Skris 0.OU=OpenSSL Group 56559191Skris 1.OU=Another Group 56659191Skris 56759191SkrisA sample configuration file with the relevant sections for B<ca>: 56859191Skris 56959191Skris [ ca ] 57059191Skris default_ca = CA_default # The default ca section 57159191Skris 57259191Skris [ CA_default ] 57359191Skris 57459191Skris dir = ./demoCA # top dir 57559191Skris database = $dir/index.txt # index file. 57659191Skris new_certs_dir = $dir/newcerts # new certs dir 57759191Skris 57859191Skris certificate = $dir/cacert.pem # The CA cert 57959191Skris serial = $dir/serial # serial no file 58059191Skris private_key = $dir/private/cakey.pem# CA private key 58159191Skris RANDFILE = $dir/private/.rand # random number file 58259191Skris 58359191Skris default_days = 365 # how long to certify for 58459191Skris default_crl_days= 30 # how long before next CRL 58559191Skris default_md = md5 # md to use 58659191Skris 58759191Skris policy = policy_any # default policy 588109998Smarkm email_in_dn = no # Don't add the email into cert DN 58959191Skris 590160814Ssimon name_opt = ca_default # Subject name display option 591160814Ssimon cert_opt = ca_default # Certificate display option 592109998Smarkm copy_extensions = none # Don't copy extensions from request 593109998Smarkm 59459191Skris [ policy_any ] 59559191Skris countryName = supplied 59659191Skris stateOrProvinceName = optional 59759191Skris organizationName = optional 59859191Skris organizationalUnitName = optional 59959191Skris commonName = supplied 60059191Skris emailAddress = optional 60159191Skris 60259191Skris=head1 FILES 60359191Skris 60459191SkrisNote: the location of all files can change either by compile time options, 60559191Skrisconfiguration file entries, environment variables or command line options. 60659191SkrisThe values below reflect the default values. 60759191Skris 60859191Skris /usr/local/ssl/lib/openssl.cnf - master configuration file 60959191Skris ./demoCA - main CA directory 61059191Skris ./demoCA/cacert.pem - CA certificate 61159191Skris ./demoCA/private/cakey.pem - CA private key 61259191Skris ./demoCA/serial - CA serial number file 61359191Skris ./demoCA/serial.old - CA serial number backup file 61459191Skris ./demoCA/index.txt - CA text database file 61559191Skris ./demoCA/index.txt.old - CA text database backup file 61659191Skris ./demoCA/certs - certificate output file 61759191Skris ./demoCA/.rnd - CA random seed information 61859191Skris 61959191Skris=head1 ENVIRONMENT VARIABLES 62059191Skris 62159191SkrisB<OPENSSL_CONF> reflects the location of master configuration file it can 62259191Skrisbe overridden by the B<-config> command line option. 62359191Skris 62459191Skris=head1 RESTRICTIONS 62559191Skris 62659191SkrisThe text database index file is a critical part of the process and 62759191Skrisif corrupted it can be difficult to fix. It is theoretically possible 62859191Skristo rebuild the index file from all the issued certificates and a current 62959191SkrisCRL: however there is no option to do this. 63059191Skris 631160814SsimonV2 CRL features like delta CRLs are not currently supported. 63259191Skris 63359191SkrisAlthough several requests can be input and handled at once it is only 63459191Skrispossible to include one SPKAC or self signed certificate. 63559191Skris 63659191Skris=head1 BUGS 63759191Skris 63859191SkrisThe use of an in memory text database can cause problems when large 63959191Skrisnumbers of certificates are present because, as the name implies 64059191Skristhe database has to be kept in memory. 64159191Skris 64259191SkrisThe B<ca> command really needs rewriting or the required functionality 64359191Skrisexposed at either a command or interface level so a more friendly utility 64459191Skris(perl script or GUI) can handle things properly. The scripts B<CA.sh> and 64559191SkrisB<CA.pl> help a little but not very much. 64659191Skris 64759191SkrisAny fields in a request that are not present in a policy are silently 648109998Smarkmdeleted. This does not happen if the B<-preserveDN> option is used. To 649109998Smarkmenforce the absence of the EMAIL field within the DN, as suggested by 650109998SmarkmRFCs, regardless the contents of the request' subject the B<-noemailDN> 651109998Smarkmoption can be used. The behaviour should be more friendly and 652109998Smarkmconfigurable. 65359191Skris 65459191SkrisCancelling some commands by refusing to certify a certificate can 65559191Skriscreate an empty file. 65659191Skris 657109998Smarkm=head1 WARNINGS 658109998Smarkm 659109998SmarkmThe B<ca> command is quirky and at times downright unfriendly. 660109998Smarkm 661109998SmarkmThe B<ca> utility was originally meant as an example of how to do things 662109998Smarkmin a CA. It was not supposed to be used as a full blown CA itself: 663109998Smarkmnevertheless some people are using it for this purpose. 664109998Smarkm 665109998SmarkmThe B<ca> command is effectively a single user command: no locking is 666109998Smarkmdone on the various files and attempts to run more than one B<ca> command 667109998Smarkmon the same database can have unpredictable results. 668109998Smarkm 669109998SmarkmThe B<copy_extensions> option should be used with caution. If care is 670109998Smarkmnot taken then it can be a security risk. For example if a certificate 671109998Smarkmrequest contains a basicConstraints extension with CA:TRUE and the 672109998SmarkmB<copy_extensions> value is set to B<copyall> and the user does not spot 673109998Smarkmthis when the certificate is displayed then this will hand the requestor 674109998Smarkma valid CA certificate. 675109998Smarkm 676109998SmarkmThis situation can be avoided by setting B<copy_extensions> to B<copy> 677109998Smarkmand including basicConstraints with CA:FALSE in the configuration file. 678109998SmarkmThen if the request contains a basicConstraints extension it will be 679109998Smarkmignored. 680109998Smarkm 681109998SmarkmIt is advisable to also include values for other extensions such 682109998Smarkmas B<keyUsage> to prevent a request supplying its own values. 683109998Smarkm 684109998SmarkmAdditional restrictions can be placed on the CA certificate itself. 685109998SmarkmFor example if the CA certificate has: 686109998Smarkm 687109998Smarkm basicConstraints = CA:TRUE, pathlen:0 688109998Smarkm 689109998Smarkmthen even if a certificate is issued with CA:TRUE it will not be valid. 690109998Smarkm 69159191Skris=head1 SEE ALSO 69259191Skris 69359191SkrisL<req(1)|req(1)>, L<spkac(1)|spkac(1)>, L<x509(1)|x509(1)>, L<CA.pl(1)|CA.pl(1)>, 694238405SjkimL<config(5)|config(5)>, L<x509v3_config(5)|x509v3_config(5)> 69559191Skris 69659191Skris=cut 697