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