Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
CA(1)				     OpenSSL				   CA(1)

NAME
     openssl-ca, ca - sample minimal CA application

SYNOPSIS
     openssl ca [-help] [-verbose] [-config filename] [-name section] [-gencrl]
     [-revoke file] [-valid file] [-status serial] [-updatedb] [-crl_reason rea-
     son] [-crl_hold instruction] [-crl_compromise time] [-crl_CA_compromise
     time] [-crldays days] [-crlhours hours] [-crlexts section] [-startdate
     date] [-enddate date] [-days arg] [-md arg] [-policy arg] [-keyfile arg]
     [-keyform PEM|DER] [-key arg] [-passin arg] [-cert file] [-selfsign] [-in
     file] [-out file] [-notext] [-outdir dir] [-infiles] [-spkac file]
     [-ss_cert file] [-preserveDN] [-noemailDN] [-batch] [-msie_hack] [-exten-
     sions section] [-extfile section] [-engine id] [-subj arg] [-utf8] [-sigopt
     nm:v] [-create_serial] [-rand_serial] [-multivalue-rdn] [-rand file...]
     [-writerand file]

DESCRIPTION
     The ca command is a minimal CA application. It can be used to sign certifi-
     cate requests in a variety of forms and generate CRLs it also maintains a
     text database of issued certificates and their status.

     The options descriptions will be divided into each purpose.

OPTIONS
     -help
	 Print out a usage message.

     -verbose
	 This prints extra details about the operations being performed.

     -config filename
	 Specifies the configuration file to use.  Optional; for a description
	 of the default value, see "COMMAND SUMMARY" in openssl(1).

     -name section
	 Specifies the configuration file section to use (overrides default_ca
	 in the ca section).

     -in filename
	 An input filename containing a single certificate request to be signed
	 by the CA.

     -ss_cert filename
	 A single self-signed certificate to be signed by the CA.

     -spkac filename
	 A file containing a single Netscape signed public key and challenge and
	 additional field values to be signed by the CA. See the SPKAC FORMAT
	 section for information on the required input and output format.

     -infiles
	 If present this should be the last option, all subsequent arguments are
	 taken as the names of files containing certificate requests.

     -out filename
	 The output file to output certificates to. The default is standard out-
	 put. The certificate details will also be printed out to this file in
	 PEM format (except that -spkac outputs DER format).

     -outdir directory
	 The directory to output certificates to. The certificate will be writ-
	 ten to a filename consisting of the serial number in hex with ".pem"
	 appended.

     -cert
	 The CA certificate file.

     -keyfile filename
	 The private key to sign requests with.

     -keyform PEM|DER
	 The format of the data in the private key file.  The default is PEM.

     -sigopt nm:v
	 Pass options to the signature algorithm during sign or verify opera-
	 tions.  Names and values of these options are algorithm-specific.

     -key password
	 The password used to encrypt the private key. Since on some systems the
	 command line arguments are visible (e.g. Unix with the 'ps' utility)
	 this option should be used with caution.

     -selfsign
	 Indicates the issued certificates are to be signed with the key the
	 certificate requests were signed with (given with -keyfile).  Certifi-
	 cate requests signed with a different key are ignored.  If -spkac,
	 -ss_cert or -gencrl are given, -selfsign is ignored.

	 A consequence of using -selfsign is that the self-signed certificate
	 appears among the entries in the certificate database (see the configu-
	 ration option database), and uses the same serial number counter as all
	 other certificates sign with the self-signed certificate.

     -passin arg
	 The key password source. For more information about the format of arg
	 see "Pass Phrase Options" in openssl(1).

     -notext
	 Don't output the text form of a certificate to the output file.

     -startdate date
	 This allows the start date to be explicitly set. The format of the date
	 is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure), or YYYYMMD-
	 DHHMMSSZ (the same as an ASN1 GeneralizedTime structure). In both for-
	 mats, seconds SS and timezone Z must be present.

     -enddate date
	 This allows the expiry date to be explicitly set. The format of the
	 date is YYMMDDHHMMSSZ (the same as an ASN1 UTCTime structure), or
	 YYYYMMDDHHMMSSZ (the same as an ASN1 GeneralizedTime structure). In
	 both formats, seconds SS and timezone Z must be present.

     -days arg
	 The number of days to certify the certificate for.

     -md alg
	 The message digest to use.  Any digest supported by the OpenSSL dgst
	 command can be used. For signing algorithms that do not support a di-
	 gest (i.e. Ed25519 and Ed448) any message digest that is set is ig-
	 nored. This option also applies to CRLs.

     -policy arg
	 This option defines the CA "policy" to use. This is a section in the
	 configuration file which decides which fields should be mandatory or
	 match the CA certificate. Check out the POLICY FORMAT section for more
	 information.

     -msie_hack
	 This is a deprecated option to make ca work with very old versions of
	 the IE certificate enrollment control "certenr3". It used Universal-
	 Strings for almost everything. Since the old control has various secu-
	 rity bugs its use is strongly discouraged.

     -preserveDN
	 Normally the DN order of a certificate is the same as the order of the
	 fields in the relevant policy section. When this option is set the or-
	 der is the same as the request. This is largely for compatibility with
	 the older IE enrollment control which would only accept certificates if
	 their DNs match the order of the request. This is not needed for Xen-
	 roll.

     -noemailDN
	 The DN of a certificate can contain the EMAIL field if present in the
	 request DN, however, it is good policy just having the e-mail set into
	 the altName extension of the certificate. When this option is set the
	 EMAIL field is removed from the certificate' subject and set only in
	 the, eventually present, extensions. The email_in_dn keyword can be
	 used in the configuration file to enable this behaviour.

     -batch
	 This sets the batch mode. In this mode no questions will be asked and
	 all certificates will be certified automatically.

     -extensions section
	 The section of the configuration file containing certificate extensions
	 to be added when a certificate is issued (defaults to x509_extensions
	 unless the -extfile option is used). If no extension section is present
	 then, a V1 certificate is created. If the extension section is present
	 (even if it is empty), then a V3 certificate is created. See the
	 x509v3_config(5) manual page for details of the extension section for-
	 mat.

     -extfile file
	 An additional configuration file to read certificate extensions from
	 (using the default section unless the -extensions option is also used).

     -engine id
	 Specifying an engine (by its unique id string) will cause ca to attempt
	 to obtain a functional reference to the specified engine, thus initial-
	 ising it if needed. The engine will then be set as the default for all
	 available algorithms.

     -subj arg
	 Supersedes subject name given in the request.	The arg must be format-
	 ted as /type0=value0/type1=value1/type2=....  Keyword characters may be
	 escaped by \ (backslash), and whitespace is retained.	Empty values are
	 permitted, but the corresponding type will not be included in the re-
	 sulting certificate.

     -utf8
	 This option causes field values to be interpreted as UTF8 strings, by
	 default they are interpreted as ASCII. This means that the field val-
	 ues, whether prompted from a terminal or obtained from a configuration
	 file, must be valid UTF8 strings.

     -create_serial
	 If reading serial from the text file as specified in the configuration
	 fails, specifying this option creates a new random serial to be used as
	 next serial number.  To get random serial numbers, use the -rand_serial
	 flag instead; this should only be used for simple error-recovery.

     -rand_serial
	 Generate a large random number to use as the serial number.  This over-
	 rides any option or configuration to use a serial number file.

     -multivalue-rdn
	 This option causes the -subj argument to be interpreted with full sup-
	 port for multivalued RDNs. Example:

	 /DC=org/DC=OpenSSL/DC=users/UID=123456+CN=John Doe

	 If -multi-rdn is not used then the UID value is 123456+CN=John Doe.

     -rand file...
	 A file or files containing random data used to seed the random number
	 generator.  Multiple files can be specified separated by an OS-depen-
	 dent character.  The separator is ; for MS-Windows, , for OpenVMS, and
	 : for all others.

     [-writerand file]
	 Writes random data to the specified file upon exit.  This can be used
	 with a subsequent -rand flag.

CRL OPTIONS
     -gencrl
	 This option generates a CRL based on information in the index file.

     -crldays num
	 The number of days before the next CRL is due. That is the days from
	 now to place in the CRL nextUpdate field.

     -crlhours num
	 The number of hours before the next CRL is due.

     -revoke filename
	 A filename containing a certificate to revoke.

     -valid filename
	 A filename containing a certificate to add a Valid certificate entry.

     -status serial
	 Displays the revocation status of the certificate with the specified
	 serial number and exits.

     -updatedb
	 Updates the database index to purge expired certificates.

     -crl_reason reason
	 Revocation reason, where reason is one of: unspecified, keyCompromise,
	 CACompromise, affiliationChanged, superseded, cessationOfOperation,
	 certificateHold or removeFromCRL. The matching of reason is case insen-
	 sitive. Setting any revocation reason will make the CRL v2.

	 In practice removeFromCRL is not particularly useful because it is only
	 used in delta CRLs which are not currently implemented.

     -crl_hold instruction
	 This sets the CRL revocation reason code to certificateHold and the
	 hold instruction to instruction which must be an OID. Although any OID
	 can be used only holdInstructionNone (the use of which is discouraged
	 by RFC2459) holdInstructionCallIssuer or holdInstructionReject will
	 normally be used.

     -crl_compromise time
	 This sets the revocation reason to keyCompromise and the compromise
	 time to time. time should be in GeneralizedTime format that is YYYYMMD-
	 DHHMMSSZ.

     -crl_CA_compromise time
	 This is the same as crl_compromise except the revocation reason is set
	 to CACompromise.

     -crlexts section
	 The section of the configuration file containing CRL extensions to in-
	 clude. If no CRL extension section is present then a V1 CRL is created,
	 if the CRL extension section is present (even if it is empty) then a V2
	 CRL is created. The CRL extensions specified are CRL extensions and not
	 CRL entry extensions.	It should be noted that some software (for exam-
	 ple Netscape) can't handle V2 CRLs. See x509v3_config(5) manual page
	 for details of the extension section format.

CONFIGURATION FILE OPTIONS
     The section of the configuration file containing options for ca is found as
     follows: If the -name command line option is used, then it names the sec-
     tion to be used. Otherwise the section to be used must be named in the de-
     fault_ca option of the ca section of the configuration file (or in the de-
     fault section of the configuration file). Besides default_ca, the following
     options are read directly from the ca section:
      RANDFILE
      preserve
      msie_hack With the exception of RANDFILE, this is probably a bug and may
     change in future releases.

     Many of the configuration file options are identical to command line op-
     tions. Where the option is present in the configuration file and the com-
     mand line the command line value is used. Where an option is described as
     mandatory then it must be present in the configuration file or the command
     line equivalent (if any) used.

     oid_file
	 This specifies a file containing additional OBJECT IDENTIFIERS.  Each
	 line of the file should consist of the numerical form of the object
	 identifier followed by white space then the short name followed by
	 white space and finally the long name.

     oid_section
	 This specifies a section in the configuration file containing extra ob-
	 ject identifiers. Each line should consist of the short name of the ob-
	 ject identifier followed by = and the numerical form. The short and
	 long names are the same when this option is used.

     new_certs_dir
	 The same as the -outdir command line option. It specifies the directory
	 where new certificates will be placed. Mandatory.

     certificate
	 The same as -cert. It gives the file containing the CA certificate.
	 Mandatory.

     private_key
	 Same as the -keyfile option. The file containing the CA private key.
	 Mandatory.

     RANDFILE
	 At startup the specified file is loaded into the random number genera-
	 tor, and at exit 256 bytes will be written to it.

     default_days
	 The same as the -days option. The number of days to certify a certifi-
	 cate for.

     default_startdate
	 The same as the -startdate option. The start date to certify a certifi-
	 cate for. If not set the current time is used.

     default_enddate
	 The same as the -enddate option. Either this option or default_days (or
	 the command line equivalents) must be present.

     default_crl_hours default_crl_days
	 The same as the -crlhours and the -crldays options. These will only be
	 used if neither command line option is present. At least one of these
	 must be present to generate a CRL.

     default_md
	 The same as the -md option. Mandatory except where the signing algo-
	 rithm does not require a digest (i.e. Ed25519 and Ed448).

     database
	 The text database file to use. Mandatory. This file must be present
	 though initially it will be empty.

     unique_subject
	 If the value yes is given, the valid certificate entries in the data-
	 base must have unique subjects.  if the value no is given, several
	 valid certificate entries may have the exact same subject.  The default
	 value is yes, to be compatible with older (pre 0.9.8) versions of
	 OpenSSL.  However, to make CA certificate roll-over easier, it's recom-
	 mended to use the value no, especially if combined with the -selfsign
	 command line option.

	 Note that it is valid in some circumstances for certificates to be cre-
	 ated without any subject. In the case where there are multiple certifi-
	 cates without subjects this does not count as a duplicate.

     serial
	 A text file containing the next serial number to use in hex. Mandatory.
	 This file must be present and contain a valid serial number.

     crlnumber
	 A text file containing the next CRL number to use in hex. The crl num-
	 ber will be inserted in the CRLs only if this file exists. If this file
	 is present, it must contain a valid CRL number.

     x509_extensions
	 The same as -extensions.

     crl_extensions
	 The same as -crlexts.

     preserve
	 The same as -preserveDN

     email_in_dn
	 The same as -noemailDN. If you want the EMAIL field to be removed from
	 the DN of the certificate simply set this to 'no'. If not present the
	 default is to allow for the EMAIL filed in the certificate's DN.

     msie_hack
	 The same as -msie_hack

     policy
	 The same as -policy. Mandatory. See the POLICY FORMAT section for more
	 information.

     name_opt, cert_opt
	 These options allow the format used to display the certificate details
	 when asking the user to confirm signing. All the options supported by
	 the x509 utilities -nameopt and -certopt switches can be used here, ex-
	 cept the no_signame and no_sigdump are permanently set and cannot be
	 disabled (this is because the certificate signature cannot be displayed
	 because the certificate has not been signed at this point).

	 For convenience the values ca_default are accepted by both to produce a
	 reasonable output.

	 If neither option is present the format used in earlier versions of
	 OpenSSL is used. Use of the old format is strongly discouraged because
	 it only displays fields mentioned in the policy section, mishandles
	 multicharacter string types and does not display extensions.

     copy_extensions
	 Determines how extensions in certificate requests should be handled.
	 If set to none or this option is not present then extensions are ig-
	 nored and not copied to the certificate. If set to copy then any exten-
	 sions present in the request that are not already present are copied to
	 the certificate. If set to copyall then all extensions in the request
	 are copied to the certificate: if the extension is already present in
	 the certificate it is deleted first. See the WARNINGS section before
	 using this option.

	 The main use of this option is to allow a certificate request to supply
	 values for certain extensions such as subjectAltName.

POLICY FORMAT
     The policy section consists of a set of variables corresponding to certifi-
     cate DN fields. If the value is "match" then the field value must match the
     same field in the CA certificate. If the value is "supplied" then it must
     be present. If the value is "optional" then it may be present. Any fields
     not mentioned in the policy section are silently deleted, unless the -pre-
     serveDN option is set but this can be regarded more of a quirk than in-
     tended behaviour.

SPKAC FORMAT
     The input to the -spkac command line option is a Netscape signed public key
     and challenge. This will usually come from the KEYGEN tag in an HTML form
     to create a new private key.  It is however possible to create SPKACs using
     the spkac utility.

     The file should contain the variable SPKAC set to the value of the SPKAC
     and also the required DN components as name value pairs.  If you need to
     include the same component twice then it can be preceded by a number and a
     '.'.

     When processing SPKAC format, the output is DER if the -out flag is used,
     but PEM format if sending to stdout or the -outdir flag is used.

EXAMPLES
     Note: these examples assume that the ca directory structure is already set
     up and the relevant files already exist. This usually involves creating a
     CA certificate and private key with req, a serial number file and an empty
     index file and placing them in the relevant directories.

     To use the sample configuration file below the directories demoCA, de-
     moCA/private and demoCA/newcerts would be created. The CA certificate would
     be copied to demoCA/cacert.pem and its private key to demoCA/pri-
     vate/cakey.pem. A file demoCA/serial would be created containing for exam-
     ple "01" and the empty index file demoCA/index.txt.

     Sign a certificate request:

      openssl ca -in req.pem -out newcert.pem

     Sign a certificate request, using CA extensions:

      openssl ca -in req.pem -extensions v3_ca -out newcert.pem

     Generate a CRL

      openssl ca -gencrl -out crl.pem

     Sign several requests:

      openssl ca -infiles req1.pem req2.pem req3.pem

     Certify a Netscape SPKAC:

      openssl ca -spkac spkac.txt

     A sample SPKAC file (the SPKAC line has been truncated for clarity):

      SPKAC=MIG0MGAwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAn7PDhCeV/xIxUg8V70YRxK2A5
      CN=Steve Test
      emailAddress=steve@openssl.org
      0.OU=OpenSSL Group
      1.OU=Another Group

     A sample configuration file with the relevant sections for ca:

      [ ca ]
      default_ca      = CA_default	      # The default ca section

      [ CA_default ]

      dir	     = ./demoCA 	     # top dir
      database	     = $dir/index.txt	     # index file.
      new_certs_dir  = $dir/newcerts	     # new certs dir

      certificate    = $dir/cacert.pem	     # The CA cert
      serial	     = $dir/serial	     # serial no file
      #rand_serial    = yes		     # for random serial#'s
      private_key    = $dir/private/cakey.pem# CA private key
      RANDFILE	     = $dir/private/.rand    # random number file

      default_days   = 365		     # how long to certify for
      default_crl_days= 30		     # how long before next CRL
      default_md     = md5		     # md to use

      policy	     = policy_any	     # default policy
      email_in_dn    = no		     # Don't add the email into cert DN

      name_opt	     = ca_default	     # Subject name display option
      cert_opt	     = ca_default	     # Certificate display option
      copy_extensions = none		     # Don't copy extensions from request

      [ policy_any ]
      countryName	     = supplied
      stateOrProvinceName    = optional
      organizationName	     = optional
      organizationalUnitName = optional
      commonName	     = supplied
      emailAddress	     = optional

FILES
     Note: the location of all files can change either by compile time options,
     configuration file entries, environment variables or command line options.
     The values below reflect the default values.

      /usr/local/ssl/lib/openssl.cnf - master configuration file
      ./demoCA			     - main CA directory
      ./demoCA/cacert.pem	     - CA certificate
      ./demoCA/private/cakey.pem     - CA private key
      ./demoCA/serial		     - CA serial number file
      ./demoCA/serial.old	     - CA serial number backup file
      ./demoCA/index.txt	     - CA text database file
      ./demoCA/index.txt.old	     - CA text database backup file
      ./demoCA/certs		     - certificate output file
      ./demoCA/.rnd		     - CA random seed information

RESTRICTIONS
     The text database index file is a critical part of the process and if cor-
     rupted it can be difficult to fix. It is theoretically possible to rebuild
     the index file from all the issued certificates and a current CRL: however
     there is no option to do this.

     V2 CRL features like delta CRLs are not currently supported.

     Although several requests can be input and handled at once it is only pos-
     sible to include one SPKAC or self-signed certificate.

BUGS
     The use of an in-memory text database can cause problems when large numbers
     of certificates are present because, as the name implies the database has
     to be kept in memory.

     The ca command really needs rewriting or the required functionality exposed
     at either a command or interface level so a more friendly utility (perl
     script or GUI) can handle things properly. The script CA.pl helps a little
     but not very much.

     Any fields in a request that are not present in a policy are silently
     deleted. This does not happen if the -preserveDN option is used. To enforce
     the absence of the EMAIL field within the DN, as suggested by RFCs, regard-
     less the contents of the request' subject the -noemailDN option can be
     used. The behaviour should be more friendly and configurable.

     Canceling some commands by refusing to certify a certificate can create an
     empty file.

WARNINGS
     The ca command is quirky and at times downright unfriendly.

     The ca utility was originally meant as an example of how to do things in a
     CA. It was not supposed to be used as a full blown CA itself: nevertheless
     some people are using it for this purpose.

     The ca command is effectively a single user command: no locking is done on
     the various files and attempts to run more than one ca command on the same
     database can have unpredictable results.

     The copy_extensions option should be used with caution. If care is not
     taken then it can be a security risk. For example if a certificate request
     contains a basicConstraints extension with CA:TRUE and the copy_extensions
     value is set to copyall and the user does not spot this when the certifi-
     cate is displayed then this will hand the requester a valid CA certificate.

     This situation can be avoided by setting copy_extensions to copy and in-
     cluding basicConstraints with CA:FALSE in the configuration file.	Then if
     the request contains a basicConstraints extension it will be ignored.

     It is advisable to also include values for other extensions such as
     keyUsage to prevent a request supplying its own values.

     Additional restrictions can be placed on the CA certificate itself.  For
     example if the CA certificate has:

      basicConstraints = CA:TRUE, pathlen:0

     then even if a certificate is issued with CA:TRUE it will not be valid.

HISTORY
     Since OpenSSL 1.1.1, the program follows RFC5280. Specifically, certificate
     validity period (specified by any of -startdate, -enddate and -days) will
     be encoded as UTCTime if the dates are earlier than year 2049 (included),
     and as GeneralizedTime if the dates are in year 2050 or later.

SEE ALSO
     req(1), spkac(1), x509(1), CA.pl(1), config(5), x509v3_config(5)

COPYRIGHT
     Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.

     Licensed under the OpenSSL license (the "License").  You may not use this
     file except in compliance with the License.  You can obtain a copy in the
     file LICENSE in the source distribution or at
     <https://www.openssl.org/source/license.html>.

1.1.1w				   2023-09-11				   CA(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=ca&sektion=1&manpath=FreeBSD+15.1-RELEASE+and+Ports>

home | help