@node certtool Invocation
@subsection Invoking certtool
@pindex certtool
@ignore
#  -*- buffer-read-only: t -*- vi: set ro:
#
# DO NOT EDIT THIS FILE   (invoke-certtool.texi)
#
# It has been AutoGen-ed
# From the definitions    ../src/certtool-args.def
# and the template file   agtexi-cmd.tpl
@end ignore


Tool to parse and generate X.509 certificates, requests and private keys.
It can be used interactively or non interactively by
specifying the template command line option.

The tool accepts files or URLs supported by GnuTLS. In case PIN is required for the URL
access you can provide it using the environment variables GNUTLS_PIN and GNUTLS_SO_PIN.


This section was generated by @strong{AutoGen},
using the @code{agtexi-cmd} template and the option descriptions for the @code{certtool} program.
This software is released under the GNU General Public License, version 3 or later.


@anchor{certtool usage}
@subsubheading certtool help/usage (@option{--help})
@cindex certtool help

This is the automatically generated usage text for certtool.

The text printed is the same whether selected with the @code{help} option
(@option{--help}) or the @code{more-help} option (@option{--more-help}).  @code{more-help} will print
the usage text by passing it through a pager program.
@code{more-help} is disabled on platforms without a working
@code{fork(2)} function.  The @code{PAGER} environment variable is
used to select the program, defaulting to @file{more}.  Both will exit
with a status code of 0.

@exampleindent 0
@example
certtool is unavailable - no --help
@end example
@exampleindent 4

@anchor{certtool debug}
@subsubheading debug option (-d)

This is the ``enable debugging'' option.
This option takes a number argument.
Specifies the debug level.
@anchor{certtool generate-request}
@subsubheading generate-request option (-q)

This is the ``generate a pkcs #10 certificate request'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
must not appear in combination with any of the following options:
infile.
@end itemize

Will generate a PKCS #10 certificate request. To specify a private key use --load-privkey.
@anchor{certtool verify-chain}
@subsubheading verify-chain option (-e)

This is the ``verify a pem encoded certificate chain'' option.
The last certificate in the chain must be a self signed one. It can be combined with --verify-purpose or --verify-hostname.
@anchor{certtool verify}
@subsubheading verify option

This is the ``verify a pem encoded certificate chain using a trusted list'' option.
The trusted certificate list can be loaded with --load-ca-certificate. If no
certificate list is provided, then the system's certificate list is used. Note that
during verification multiple paths may be explored. On a successful verification
the successful path will be the last one. It can be combined with --verify-purpose or --verify-hostname.
@anchor{certtool verify-crl}
@subsubheading verify-crl option

This is the ``verify a crl using a trusted list'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
must appear in combination with the following options:
load-ca-certificate.
@end itemize

The trusted certificate list must be loaded with --load-ca-certificate.
@anchor{certtool verify-hostname}
@subsubheading verify-hostname option

This is the ``specify a hostname to be used for certificate chain verification'' option.
This option takes a string argument.
This is to be combined with one of the verify certificate options.
@anchor{certtool verify-email}
@subsubheading verify-email option

This is the ``specify a email to be used for certificate chain verification'' option.
This option takes a string argument.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
must not appear in combination with any of the following options:
verify-hostname.
@end itemize

This is to be combined with one of the verify certificate options.
@anchor{certtool verify-purpose}
@subsubheading verify-purpose option

This is the ``specify a purpose oid to be used for certificate chain verification'' option.
This option takes a string argument.
This object identifier restricts the purpose of the certificates to be verified. Example purposes are 1.3.6.1.5.5.7.3.1 (TLS WWW), 1.3.6.1.5.5.7.3.4 (EMAIL) etc. Note that a CA certificate without a purpose set (extended key usage) is valid for any purpose.
@anchor{certtool get-dh-params}
@subsubheading get-dh-params option

This is the ``get the included pkcs #3 encoded diffie-hellman parameters'' option.
Returns stored DH parameters in GnuTLS. Those parameters are used in the SRP protocol. The parameters returned by fresh generation
are more efficient since GnuTLS 3.0.9.
@anchor{certtool load-privkey}
@subsubheading load-privkey option

This is the ``loads a private key file'' option.
This option takes a string argument.
This can be either a file or a PKCS #11 URL
@anchor{certtool load-pubkey}
@subsubheading load-pubkey option

This is the ``loads a public key file'' option.
This option takes a string argument.
This can be either a file or a PKCS #11 URL
@anchor{certtool load-certificate}
@subsubheading load-certificate option

This is the ``loads a certificate file'' option.
This option takes a string argument.
This can be either a file or a PKCS #11 URL
@anchor{certtool load-ca-privkey}
@subsubheading load-ca-privkey option

This is the ``loads the certificate authority's private key file'' option.
This option takes a string argument.
This can be either a file or a PKCS #11 URL
@anchor{certtool load-ca-certificate}
@subsubheading load-ca-certificate option

This is the ``loads the certificate authority's certificate file'' option.
This option takes a string argument.
This can be either a file or a PKCS #11 URL
@anchor{certtool password}
@subsubheading password option

This is the ``password to use'' option.
This option takes a string argument.
You can use this option to specify the password in the command line instead of reading it from the tty. Note, that the command line arguments are available for view in others in the system. Specifying password as '' is the same as specifying no password.
@anchor{certtool null-password}
@subsubheading null-password option

This is the ``enforce a null password'' option.
This option enforces a NULL password. This is different than the empty or no password in schemas like PKCS #8.
@anchor{certtool empty-password}
@subsubheading empty-password option

This is the ``enforce an empty password'' option.
This option enforces an empty password. This is different than the NULL or no password in schemas like PKCS #8.
@anchor{certtool cprint}
@subsubheading cprint option

This is the ``in certain operations it prints the information in c-friendly format'' option.
In certain operations it prints the information in C-friendly format, suitable for including into C programs.
@anchor{certtool fingerprint}
@subsubheading fingerprint option

This is the ``print the fingerprint of the given certificate'' option.
This is a simple hash of the DER encoding of the certificate. It can be combined with the --hash parameter. However, it is recommended for identification to use the key-id which depends only on the certificate's key.
@anchor{certtool key-id}
@subsubheading key-id option

This is the ``print the key id of the given certificate'' option.
This is a hash of the public key of the given certificate. It identifies the key uniquely, remains the same on a certificate renewal and depends only on signed fields of the certificate.
@anchor{certtool p12-info}
@subsubheading p12-info option

This is the ``print information on a pkcs #12 structure'' option.
This option will dump the contents and print the metadata of the provided PKCS #12 structure.
@anchor{certtool p12-name}
@subsubheading p12-name option

This is the ``the pkcs #12 friendly name to use'' option.
This option takes a string argument.
The name to be used for the primary certificate and private key in a PKCS #12 file.
@anchor{certtool p7-generate}
@subsubheading p7-generate option

This is the ``generate a pkcs #7 structure'' option.
This option generates a PKCS #7 certificate container structure. To add certificates in the structure use --load-certificate and --load-crl.
@anchor{certtool p7-sign}
@subsubheading p7-sign option

This is the ``signs using a pkcs #7 structure'' option.
This option generates a PKCS #7 structure containing a signature for the provided data. The data are stored within the structure. The signer certificate has to be specified using --load-certificate and --load-privkey.
@anchor{certtool p7-detached-sign}
@subsubheading p7-detached-sign option

This is the ``signs using a detached pkcs #7 structure'' option.
This option generates a PKCS #7 structure containing a signature for the provided data. The signer certificate has to be specified using --load-certificate and --load-privkey.
@anchor{certtool p7-time}
@subsubheading p7-time option

This is the ``will include a timestamp in the pkcs #7 structure'' option.
This option will include a timestamp in the generated signature
@anchor{certtool p7-verify}
@subsubheading p7-verify option

This is the ``verify the provided pkcs #7 structure'' option.
This option verifies the signed PKCS #7 structure. The certificate list to use for verification can be specified with --load-ca-certificate. When no certificate list is provided, then the system's certificate list is used. Alternatively a direct signer can be provided using --load-certificate. A key purpose can be enforced with the --verify-purpose option, and the --load-data option will utilize detached data.
@anchor{certtool p8-info}
@subsubheading p8-info option

This is the ``print information on a pkcs #8 structure'' option.
This option will print information about encrypted PKCS #8 structures. That option does not require the decryption of the structure.
@anchor{certtool pubkey-info}
@subsubheading pubkey-info option

This is the ``print information on a public key'' option.
The option combined with --load-request, --load-pubkey, --load-privkey and --load-certificate will extract the public key of the object in question.
@anchor{certtool to-p12}
@subsubheading to-p12 option

This is the ``generate a pkcs #12 structure'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
must appear in combination with the following options:
load-certificate.
@end itemize

It requires a certificate, a private key and possibly a CA certificate to be specified.
@anchor{certtool rsa}
@subsubheading rsa option

This is the ``generate rsa key'' option.
When combined with --generate-privkey generates an RSA private key.
@anchor{certtool dsa}
@subsubheading dsa option

This is the ``generate dsa key'' option.
When combined with --generate-privkey generates a DSA private key.
@anchor{certtool ecc}
@subsubheading ecc option

This is the ``generate ecc (ecdsa) key'' option.
When combined with --generate-privkey generates an elliptic curve private key to be used with ECDSA.
@anchor{certtool ecdsa}
@subsubheading ecdsa option

This is an alias for the @code{ecc} option,
@pxref{certtool ecc, the ecc option documentation}.

@anchor{certtool hash}
@subsubheading hash option

This is the ``hash algorithm to use for signing'' option.
This option takes a string argument.
Available hash functions are SHA1, RMD160, SHA256, SHA384, SHA512.
@anchor{certtool inder}
@subsubheading inder option

This is the ``use der format for input certificates, private keys, and dh parameters '' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
can be disabled with --no-inder.
@end itemize

The input files will be assumed to be in DER or RAW format. 
Unlike options that in PEM input would allow multiple input data (e.g. multiple 
certificates), when reading in DER format a single data structure is read.
@anchor{certtool inraw}
@subsubheading inraw option

This is an alias for the @code{inder} option,
@pxref{certtool inder, the inder option documentation}.

@anchor{certtool outder}
@subsubheading outder option

This is the ``use der format for output certificates, private keys, and dh parameters'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
can be disabled with --no-outder.
@end itemize

The output will be in DER or RAW format.
@anchor{certtool outraw}
@subsubheading outraw option

This is an alias for the @code{outder} option,
@pxref{certtool outder, the outder option documentation}.

@anchor{certtool curve}
@subsubheading curve option

This is the ``specify the curve used for ec key generation'' option.
This option takes a string argument.
Supported values are secp192r1, secp224r1, secp256r1, secp384r1 and secp521r1.
@anchor{certtool sec-param}
@subsubheading sec-param option

This is the ``specify the security level [low, legacy, medium, high, ultra]'' option.
This option takes a string argument @file{Security parameter}.
This is alternative to the bits option.
@anchor{certtool ask-pass}
@subsubheading ask-pass option

This is the ``enable interaction for entering password when in batch mode.'' option.
This option will enable interaction to enter password when in batch mode. That is useful when the template option has been specified.
@anchor{certtool pkcs-cipher}
@subsubheading pkcs-cipher option

This is the ``cipher to use for pkcs #8 and #12 operations'' option.
This option takes a string argument @file{Cipher}.
Cipher may be one of 3des, 3des-pkcs12, aes-128, aes-192, aes-256, rc2-40, arcfour.
@anchor{certtool provider}
@subsubheading provider option

This is the ``specify the pkcs #11 provider library'' option.
This option takes a string argument.
This will override the default options in /etc/gnutls/pkcs11.conf
@anchor{certtool exit status}
@subsubheading certtool exit status

One of the following exit values will be returned:
@table @samp
@item 0 (EXIT_SUCCESS)
Successful program execution.
@item 1 (EXIT_FAILURE)
The operation failed or the command syntax was not valid.
@end table
@anchor{certtool See Also}
@subsubheading certtool See Also
    p11tool (1)
@anchor{certtool Examples}
@subsubheading certtool Examples
@subsubheading Generating private keys
To create an RSA private key, run:
@example
$ certtool --generate-privkey --outfile key.pem --rsa
@end example

To create a DSA or elliptic curves (ECDSA) private key use the
above command combined with 'dsa' or 'ecc' options.

@subsubheading Generating certificate requests
To create a certificate request (needed when the certificate is  issued  by
another party), run:
@example
certtool --generate-request --load-privkey key.pem \
   --outfile request.pem
@end example

If the private key is stored in a smart card you can generate
a request by specifying the private key object URL.
@example
$ ./certtool --generate-request --load-privkey "pkcs11:..." \
  --load-pubkey "pkcs11:..." --outfile request.pem
@end example


@subsubheading Generating a self-signed certificate
To create a self signed certificate, use the command:
@example
$ certtool --generate-privkey --outfile ca-key.pem
$ certtool --generate-self-signed --load-privkey ca-key.pem \
   --outfile ca-cert.pem
@end example

Note that a self-signed certificate usually belongs to a certificate
authority, that signs other certificates.

@subsubheading Generating a certificate
To generate a certificate using the previous request, use the command:
@example
$ certtool --generate-certificate --load-request request.pem \
   --outfile cert.pem --load-ca-certificate ca-cert.pem \
   --load-ca-privkey ca-key.pem
@end example

To generate a certificate using the private key only, use the command:
@example
$ certtool --generate-certificate --load-privkey key.pem \
   --outfile cert.pem --load-ca-certificate ca-cert.pem \
   --load-ca-privkey ca-key.pem
@end example

@subsubheading Certificate information
To view the certificate information, use:
@example
$ certtool --certificate-info --infile cert.pem
@end example

@subsubheading PKCS #12 structure generation
To generate a PKCS #12 structure using the previous key and certificate,
use the command:
@example
$ certtool --load-certificate cert.pem --load-privkey key.pem \
   --to-p12 --outder --outfile key.p12
@end example

Some tools (reportedly web browsers) have problems with that file
because it does not contain the CA certificate for the certificate.
To work around that problem in the tool, you can use the
--load-ca-certificate parameter as follows:

@example
$ certtool --load-ca-certificate ca.pem \
  --load-certificate cert.pem --load-privkey key.pem \
  --to-p12 --outder --outfile key.p12
@end example

@subsubheading Diffie-Hellman parameter generation
To generate parameters for Diffie-Hellman key exchange, use the command:
@example
$ certtool --generate-dh-params --outfile dh.pem --sec-param medium
@end example

@subsubheading Proxy certificate generation
Proxy certificate can be used to delegate your credential to a
temporary, typically short-lived, certificate.  To create one from the
previously created certificate, first create a temporary key and then
generate a proxy certificate for it, using the commands:

@example
$ certtool --generate-privkey > proxy-key.pem
$ certtool --generate-proxy --load-ca-privkey key.pem \
  --load-privkey proxy-key.pem --load-certificate cert.pem \
  --outfile proxy-cert.pem
@end example

@subsubheading Certificate revocation list generation
To create an empty Certificate Revocation List (CRL) do:

@example
$ certtool --generate-crl --load-ca-privkey x509-ca-key.pem \
           --load-ca-certificate x509-ca.pem
@end example

To create a CRL that contains some revoked certificates, place the
certificates in a file and use @code{--load-certificate} as follows:

@example
$ certtool --generate-crl --load-ca-privkey x509-ca-key.pem \
  --load-ca-certificate x509-ca.pem --load-certificate revoked-certs.pem
@end example

To verify a Certificate Revocation List (CRL) do:

@example
$ certtool --verify-crl --load-ca-certificate x509-ca.pem < crl.pem
@end example
@anchor{certtool Files}
@subsubheading certtool Files
@subsubheading Certtool's template file format
A template file can be used to avoid the interactive questions of
certtool. Initially create a file named 'cert.cfg' that contains the information
about the certificate. The template can be used as below:

@example
$ certtool --generate-certificate --load-privkey key.pem  \
   --template cert.cfg --outfile cert.pem \
   --load-ca-certificate ca-cert.pem --load-ca-privkey ca-key.pem
@end example

An example certtool template file that can be used to generate a certificate
request or a self signed certificate follows.

@example
# X.509 Certificate options
#
# DN options

# The organization of the subject.
organization = "Koko inc."

# The organizational unit of the subject.
unit = "sleeping dept."

# The locality of the subject.
# locality =

# The state of the certificate owner.
state = "Attiki"

# The country of the subject. Two letter code.
country = GR

# The common name of the certificate owner.
cn = "Cindy Lauper"

# A user id of the certificate owner.
#uid = "clauper"

# Set domain components
#dc = "name"
#dc = "domain"

# If the supported DN OIDs are not adequate you can set
# any OID here.
# For example set the X.520 Title and the X.520 Pseudonym
# by using OID and string pairs.
#dn_oid = 2.5.4.12 Dr. 
#dn_oid = 2.5.4.65 jackal

# This is deprecated and should not be used in new
# certificates.
# pkcs9_email = "none@@none.org"

# An alternative way to set the certificate's distinguished name directly
# is with the "dn" option. The attribute names allowed are:
# C (country), street, O (organization), OU (unit), title, CN (common name),
# L (locality), ST (state), placeOfBirth, gender, countryOfCitizenship, 
# countryOfResidence, serialNumber, telephoneNumber, surName, initials, 
# generationQualifier, givenName, pseudonym, dnQualifier, postalCode, name, 
# businessCategory, DC, UID, jurisdictionOfIncorporationLocalityName, 
# jurisdictionOfIncorporationStateOrProvinceName,
# jurisdictionOfIncorporationCountryName, XmppAddr, and numeric OIDs.

#dn = "cn = Nikos,st = New\, Something,C=GR,surName=Mavrogiannopoulos,2.5.4.9=Arkadias"

# The serial number of the certificate
# Comment the field for a time-based serial number.
serial = 007

# In how many days, counting from today, this certificate will expire.
# Use -1 if there is no expiration date.
expiration_days = 700

# Alternatively you may set concrete dates and time. The GNU date string 
# formats are accepted. See:
# http://www.gnu.org/software/tar/manual/html_node/Date-input-formats.html

#activation_date = "2004-02-29 16:21:42"
#expiration_date = "2025-02-29 16:24:41"

# X.509 v3 extensions

# A dnsname in case of a WWW server.
#dns_name = "www.none.org"
#dns_name = "www.morethanone.org"

# A subject alternative name URI
#uri = "http://www.example.com"

# An IP address in case of a server.
#ip_address = "192.168.1.1"

# An email in case of a person
email = "none@@none.org"

# Challenge password used in certificate requests
challenge_password = 123456

# Password when encrypting a private key
#password = secret

# An URL that has CRLs (certificate revocation lists)
# available. Needed in CA certificates.
#crl_dist_points = "http://www.getcrl.crl/getcrl/"

# Whether this is a CA certificate or not
#ca

#### Key usage

# The following key usage flags are used by CAs and end certificates

# Whether this certificate will be used to sign data (needed
# in TLS DHE ciphersuites). This is the digitalSignature flag
# in RFC5280 terminology.
signing_key

# Whether this certificate will be used to encrypt data (needed
# in TLS RSA ciphersuites). Note that it is preferred to use different
# keys for encryption and signing. This is the keyEncipherment flag
# in RFC5280 terminology.
encryption_key

# Whether this key will be used to sign other certificates. The
# keyCertSign flag in RFC5280 terminology.
#cert_signing_key

# Whether this key will be used to sign CRLs. The
# cRLSign flag in RFC5280 terminology.
#crl_signing_key

# The keyAgreement flag of RFC5280. It's purpose is loosely
# defined. Not use it unless required by a protocol.
#key_agreement

# The dataEncipherment flag of RFC5280. It's purpose is loosely
# defined. Not use it unless required by a protocol.
#data_encipherment

# The nonRepudiation flag of RFC5280. It's purpose is loosely
# defined. Not use it unless required by a protocol.
#non_repudiation

#### Extended key usage (key purposes)

# The following extensions are used in an end certificate
# to clarify its purpose. Some CAs also use it to indicate
# the types of certificates they are purposed to sign.


# Whether this certificate will be used for a TLS client;
# this sets the id-kp-serverAuth (1.3.6.1.5.5.7.3.1) of 
# extended key usage.
#tls_www_client

# Whether this certificate will be used for a TLS server;
# This sets the id-kp-clientAuth (1.3.6.1.5.5.7.3.2) of 
# extended key usage.
#tls_www_server

# Whether this key will be used to sign code. This sets the
# id-kp-codeSigning (1.3.6.1.5.5.7.3.3) of extended key usage
# extension.
#code_signing_key

# Whether this key will be used to sign OCSP data. This sets the
# id-kp-OCSPSigning (1.3.6.1.5.5.7.3.9) of extended key usage extension.
#ocsp_signing_key

# Whether this key will be used for time stamping. This sets the
# id-kp-timeStamping (1.3.6.1.5.5.7.3.8) of extended key usage extension.
#time_stamping_key

# Whether this key will be used for email protection. This sets the
# id-kp-emailProtection (1.3.6.1.5.5.7.3.4) of extended key usage extension.
#email_protection_key

# Whether this key will be used for IPsec IKE operations (1.3.6.1.5.5.7.3.17).
#ipsec_ike_key

## adding custom key purpose OIDs

# for microsoft smart card logon
# key_purpose_oid = 1.3.6.1.4.1.311.20.2.2

# for email protection
# key_purpose_oid = 1.3.6.1.5.5.7.3.4

# for any purpose (must not be used in intermediate CA certificates)
# key_purpose_oid = 2.5.29.37.0

### end of key purpose OIDs

# When generating a certificate from a certificate
# request, then honor the extensions stored in the request
# and store them in the real certificate.
#honor_crq_extensions

# Path length contraint. Sets the maximum number of
# certificates that can be used to certify this certificate.
# (i.e. the certificate chain length)
#path_len = -1
#path_len = 2

# OCSP URI
# ocsp_uri = http://my.ocsp.server/ocsp

# CA issuers URI
# ca_issuers_uri = http://my.ca.issuer

# Certificate policies
#policy1 = 1.3.6.1.4.1.5484.1.10.99.1.0
#policy1_txt = "This is a long policy to summarize"
#policy1_url = http://www.example.com/a-policy-to-read

#policy2 = 1.3.6.1.4.1.5484.1.10.99.1.1
#policy2_txt = "This is a short policy"
#policy2_url = http://www.example.com/another-policy-to-read

# Name constraints

# DNS
#nc_permit_dns = example.com
#nc_exclude_dns = test.example.com

# EMAIL
#nc_permit_email = "nmav@@ex.net"

# Exclude subdomains of example.com
#nc_exclude_email = .example.com

# Exclude all e-mail addresses of example.com
#nc_exclude_email = example.com


# Options for proxy certificates
#proxy_policy_language = 1.3.6.1.5.5.7.21.1


# Options for generating a CRL

# The number of days the next CRL update will be due.
# next CRL update will be in 43 days
#crl_next_update = 43

# this is the 5th CRL by this CA
# Comment the field for a time-based number.
#crl_number = 5

@end example
