=pod
{- OpenSSL::safe::output_do_not_edit_headers(); -}

=head1 NAME

openssl-x509 - Certificate display and signing command

=head1 SYNOPSIS

B<openssl> B<x509>
[B<-help>]
[B<-in> I<filename>|I<uri>]
[B<-passin> I<arg>]
[B<-new>]
[B<-x509toreq>]
[B<-req>]
[B<-copy_extensions> I<arg>]
[B<-inform> B<DER>|B<PEM>]
[B<-vfyopt> I<nm>:I<v>]
[B<-key> I<filename>|I<uri>]
[B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>]
[B<-signkey> I<filename>|I<uri>]
[B<-out> I<filename>]
[B<-outform> B<DER>|B<PEM>]
[B<-nocert>]
[B<-noout>]
[B<-dateopt>]
[B<-text>]
[B<-certopt> I<option>]
[B<-fingerprint>]
[B<-alias>]
[B<-serial>]
[B<-startdate>]
[B<-enddate>]
[B<-dates>]
[B<-subject>]
[B<-issuer>]
{- $OpenSSL::safe::opt_name_synopsis -}
[B<-email>]
[B<-hash>]
[B<-subject_hash>]
[B<-subject_hash_old>]
[B<-issuer_hash>]
[B<-issuer_hash_old>]
[B<-ext> I<extensions>]
[B<-ocspid>]
[B<-ocsp_uri>]
[B<-purpose>]
[B<-pubkey>]
[B<-modulus>]
[B<-checkend> I<num>]
[B<-checkhost> I<host>]
[B<-checkemail> I<host>]
[B<-checkip> I<ipaddr>]
[B<-set_serial> I<n>]
[B<-next_serial>]
[B<-days> I<arg>]
[B<-preserve_dates>]
[B<-subj> I<arg>]
[B<-force_pubkey> I<filename>]
[B<-clrext>]
[B<-extfile> I<filename>]
[B<-extensions> I<section>]
[B<-sigopt> I<nm>:I<v>]
[B<-badsig>]
[B<-I<digest>>]
[B<-CA> I<filename>|I<uri>]
[B<-CAform> B<DER>|B<PEM>|B<P12>]
[B<-CAkey> I<filename>|I<uri>]
[B<-CAkeyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>]
[B<-CAserial> I<filename>]
[B<-CAcreateserial>]
[B<-trustout>]
[B<-setalias> I<arg>]
[B<-clrtrust>]
[B<-addtrust> I<arg>]
[B<-clrreject>]
[B<-addreject> I<arg>]
{- $OpenSSL::safe::opt_r_synopsis -}
{- $OpenSSL::safe::opt_engine_synopsis -}{- $OpenSSL::safe::opt_provider_synopsis -}

=head1 DESCRIPTION

This command is a multi-purposes certificate handling command.
It can be used to print certificate information,
convert certificates to various forms, edit certificate trust settings,
generate certificates from scratch or from certificating requests
and then self-signing them or signing them like a "micro CA".

Since there are a large number of options they will split up into
various sections.

=head1 OPTIONS

=head2 Input, Output, and General Purpose Options

=over 4

=item B<-help>

Print out a usage message.

=item B<-in> I<filename>|I<uri>

This specifies the input to read a certificate from
or the input file for reading a certificate request if the B<-req> flag is used.
In both cases this defaults to standard input.

This option cannot be combined with the B<-new> flag.

=item B<-passin> I<arg>

The key and certificate file password source.
For more information about the format of I<arg>
see L<openssl-passphrase-options(1)>.

=item B<-new>

Generate a certificate from scratch, not using an input certificate
or certificate request. So the B<-in> option must not be used in this case.
Instead, the B<-subj> option needs to be given.
The public key to include can be given with the B<-force_pubkey> option
and defaults to the key given with the B<-key> (or B<-signkey>) option,
which implies self-signature.

=item B<-x509toreq>

Output a PKCS#10 certificate request (rather than a certificate).
The B<-key> (or B<-signkey>) option must be used to provide the private key for
self-signing; the corresponding public key is placed in the subjectPKInfo field.

X.509 extensions included in a certificate input are not copied by default.
X.509 extensions to be added can be specified using the B<-extfile> option.

=item B<-req>

By default a certificate is expected on input.
With this option a PKCS#10 certificate request is expected instead,
which must be correctly self-signed.

X.509 extensions included in the request are not copied by default.
X.509 extensions to be added can be specified using the B<-extfile> option.

=item B<-copy_extensions> I<arg>

Determines how to handle X.509 extensions
when converting from a certificate to a request using the B<-x509toreq> option
or converting from a request to a certificate using the B<-req> option.
If I<arg> is B<none> or this option is not present then extensions are ignored.
If I<arg> is B<copy> or B<copyall> then all extensions are copied,
except that subject identifier and authority key identifier extensions
are not taken over when producing a certificate request.

The B<-ext> option can be used to further restrict which extensions to copy.

=item B<-inform> B<DER>|B<PEM>

The input file format; unspecified by default.
See L<openssl-format-options(1)> for details.

=item B<-vfyopt> I<nm>:I<v>

Pass options to the signature algorithm during verify operations.
Names and values of these options are algorithm-specific.

=item B<-key> I<filename>|I<uri>

This option provides the private key for signing a new certificate or
certificate request.
Unless B<-force_pubkey> is given, the corresponding public key is placed in
the new certificate or certificate request, resulting in a self-signature.

This option cannot be used in conjunction with the B<-CA> option.

It sets the issuer name to the subject name (i.e., makes it self-issued)
and changes the public key to the supplied value (unless overridden
by B<-force_pubkey>).
Unless the B<-preserve_dates> option is supplied,
it sets the validity start date to the current time
and the end date to a value determined by the B<-days> option.

=item B<-signkey> I<filename>|I<uri>

This option is an alias of B<-key>.

=item B<-keyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>

The key input format; unspecified by default.
See L<openssl-format-options(1)> for details.

=item B<-out> I<filename>

This specifies the output filename to write to or standard output by default.

=item B<-outform> B<DER>|B<PEM>

The output format; the default is B<PEM>.
See L<openssl-format-options(1)> for details.

=item B<-nocert>

Do not output a certificate (except for printing as requested by below options).

=item B<-noout>

This option prevents output except for printing as requested by below options.

=back

=head2 Certificate Printing Options

Note: the B<-alias> and B<-purpose> options are also printing options
but are described in the L</Trust Settings> section.

=over 4

=item B<-dateopt>

Specify the date output format. Values are: rfc_822 and iso_8601.
Defaults to rfc_822.

=item B<-text>

Prints out the certificate in text form. Full details are printed including the
public key, signature algorithms, issuer and subject names, serial number
any extensions present and any trust settings.

=item B<-certopt> I<option>

Customise the print format used with B<-text>. The I<option> argument
can be a single option or multiple options separated by commas.
The B<-certopt> switch may be also be used more than once to set multiple
options. See the L</Text Printing Flags> section for more information.

=item B<-fingerprint>

Calculates and prints the digest of the DER encoded version of the entire
certificate (see digest options).
This is commonly called a "fingerprint". Because of the nature of message
digests, the fingerprint of a certificate is unique to that certificate and
two certificates with the same fingerprint can be considered to be the same.

=item B<-alias>

Prints the certificate "alias" (nickname), if any.

=item B<-serial>

Prints the certificate serial number.

=item B<-startdate>

Prints out the start date of the certificate, that is the notBefore date.

=item B<-enddate>

Prints out the expiry date of the certificate, that is the notAfter date.

=item B<-dates>

Prints out the start and expiry dates of a certificate.

=item B<-subject>

Prints the subject name.

=item B<-issuer>

Prints the issuer name.

{- $OpenSSL::safe::opt_name_item -}

=item B<-email>

Prints the email address(es) if any.

=item B<-hash>

Synonym for "-subject_hash" for backward compatibility reasons.

=item B<-subject_hash>

Prints the "hash" of the certificate subject name. This is used in OpenSSL to
form an index to allow certificates in a directory to be looked up by subject
name.

=item B<-subject_hash_old>

Prints the "hash" of the certificate subject name using the older algorithm
as used by OpenSSL before version 1.0.0.

=item B<-issuer_hash>

Prints the "hash" of the certificate issuer name.

=item B<-issuer_hash_old>

Prints the "hash" of the certificate issuer name using the older algorithm
as used by OpenSSL before version 1.0.0.

=item B<-ext> I<extensions>

Prints out the certificate extensions in text form.
Can also be used to restrict which extensions to copy.
Extensions are specified
with a comma separated string, e.g., "subjectAltName,subjectKeyIdentifier".
See the L<x509v3_config(5)> manual page for the extension names.

=item B<-ocspid>

Prints the OCSP hash values for the subject name and public key.

=item B<-ocsp_uri>

Prints the OCSP responder address(es) if any.

=item B<-purpose>

This option performs tests on the certificate extensions and outputs
the results. For a more complete description see
L<openssl-verification-options(1)/Certificate Extensions>.

=item B<-pubkey>

Prints the certificate's SubjectPublicKeyInfo block in PEM format.

=item B<-modulus>

This option prints out the value of the modulus of the public key
contained in the certificate.

=back

=head2 Certificate Checking Options

=over 4

=item B<-checkend> I<arg>

Checks if the certificate expires within the next I<arg> seconds and exits
nonzero if yes it will expire or zero if not.

=item B<-checkhost> I<host>

Check that the certificate matches the specified host.

=item B<-checkemail> I<email>

Check that the certificate matches the specified email address.

=item B<-checkip> I<ipaddr>

Check that the certificate matches the specified IP address.

=back

=head2 Certificate Output Options

=over 4

=item B<-set_serial> I<n>

Specifies the serial number to use.
This option can be used with the B<-key>, B<-signkey>, or B<-CA> options.
If used in conjunction with the B<-CA> option
the serial number file (as specified by the B<-CAserial> option) is not used.

The serial number can be decimal or hex (if preceded by C<0x>).

=item B<-next_serial>

Set the serial to be one more than the number in the certificate.

=item B<-days> I<arg>

Specifies the number of days until a newly generated certificate expires.
The default is 30.
Cannot be used together with the B<-preserve_dates> option.

=item B<-preserve_dates>

When signing a certificate, preserve "notBefore" and "notAfter" dates of any
input certificate instead of adjusting them to current time and duration.
Cannot be used together with the B<-days> option.

=item B<-subj> I<arg>

When a certificate is created set its subject name to the given value.
When the certificate is self-signed the issuer name is set to the same value.

The arg must be formatted as C</type0=value0/type1=value1/type2=...>.
Special characters may be escaped by C<\> (backslash), whitespace is retained.
Empty values are permitted, but the corresponding type will not be included
in the certificate.
Giving a single C</> will lead to an empty sequence of RDNs (a NULL-DN).
Multi-valued RDNs can be formed by placing a C<+> character instead of a C</>
between the AttributeValueAssertions (AVAs) that specify the members of the set.
Example:

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

This option can be used in conjunction with the B<-force_pubkey> option
to create a certificate even without providing an input certificate
or certificate request.

=item B<-force_pubkey> I<filename>

When a certificate is created set its public key to the key in I<filename>
instead of the key contained in the input
or given with the B<-key> (or B<-signkey>) option.

This option is useful for creating self-issued certificates that are not
self-signed, for instance when the key cannot be used for signing, such as DH.
It can also be used in conjunction with b<-new> and B<-subj> to directly
generate a certificate containing any desired public key.

=item B<-clrext>

When transforming a certificate to a new certificate
by default all certificate extensions are retained.

When transforming a certificate or certificate request,
the B<-clrext> option prevents taking over any extensions from the source.
In any case, when producing a certificate request,
neither subject identifier nor authority key identifier extensions are included.

=item B<-extfile> I<filename>

Configuration file containing certificate and request X.509 extensions to add.

=item B<-extensions> I<section>

The section in the extfile to add X.509 extensions from.
If this option is not
specified then the extensions should either be contained in the unnamed
(default) section or the default section should contain a variable called
"extensions" which contains the section to use.
See the L<x509v3_config(5)> manual page for details of the
extension section format.

=item B<-sigopt> I<nm>:I<v>

Pass options to the signature algorithm during sign operations.
This option may be given multiple times.
Names and values provided using this option are algorithm-specific.

=item B<-badsig>

Corrupt the signature before writing it; this can be useful
for testing.

=item B<-I<digest>>

The digest to use.
This affects any signing or printing option that uses a message
digest, such as the B<-fingerprint>, B<-key>, and B<-CA> options.
Any digest supported by the L<openssl-dgst(1)> command can be used.
If not specified then SHA1 is used with B<-fingerprint> or
the default digest for the signing algorithm is used, typically SHA256.

=back

=head2 Micro-CA Options

=over 4

=item B<-CA> I<filename>|I<uri>

Specifies the "CA" certificate to be used for signing.
When present, this behaves like a "micro CA" as follows:
The subject name of the "CA" certificate is placed as issuer name in the new
certificate, which is then signed using the "CA" key given as detailed below.

This option cannot be used in conjunction with B<-key> (or B<-signkey>).
This option is normally combined with the B<-req> option referencing a CSR.
Without the B<-req> option the input must be an existing certificate
unless the B<-new> option is given, which generates a certificate from scratch.

=item B<-CAform> B<DER>|B<PEM>|B<P12>,

The format for the CA certificate; unspecifed by default.
See L<openssl-format-options(1)> for details.

=item B<-CAkey> I<filename>|I<uri>

Sets the CA private key to sign a certificate with.
The private key must match the public key of the certificate given with B<-CA>.
If this option is not provided then the key must be present in the B<-CA> input.

=item B<-CAkeyform> B<DER>|B<PEM>|B<P12>|B<ENGINE>

The format for the CA key; unspecified by default.
See L<openssl-format-options(1)> for details.

=item B<-CAserial> I<filename>

Sets the CA serial number file to use.

When the B<-CA> option is used to sign a certificate it uses a serial
number specified in a file. This file consists of one line containing
an even number of hex digits with the serial number to use. After each
use the serial number is incremented and written out to the file again.

The default filename consists of the CA certificate file base name with
F<.srl> appended. For example if the CA certificate file is called
F<mycacert.pem> it expects to find a serial number file called
F<mycacert.srl>.

=item B<-CAcreateserial>

With this option the CA serial number file is created if it does not exist:
it will contain the serial number "02" and the certificate being signed will
have the 1 as its serial number. If the B<-CA> option is specified
and the serial number file does not exist a random number is generated;
this is the recommended practice.

=back

=head2 Trust Settings

A B<trusted certificate> is an ordinary certificate which has several
additional pieces of information attached to it such as the permitted
and prohibited uses of the certificate and possibly an "alias" (nickname).

Normally when a certificate is being verified at least one certificate
must be "trusted". By default a trusted certificate must be stored
locally and must be a root CA: any certificate chain ending in this CA
is then usable for any purpose.

Trust settings currently are only used with a root CA.
They allow a finer control over the purposes the root CA can be used for.
For example, a CA may be trusted for SSL client but not SSL server use.

See L<openssl-verification-options(1)> for more information
on the meaning of trust settings.

Future versions of OpenSSL will recognize trust settings on any
certificate: not just root CAs.

=over 4

=item B<-trustout>

Mark any certificate PEM output as <trusted> certificate rather than ordinary.
An ordinary or trusted certificate can be input but by default an ordinary
certificate is output and any trust settings are discarded.
With the B<-trustout> option a trusted certificate is output. A trusted
certificate is automatically output if any trust settings are modified.

=item B<-setalias> I<arg>

Sets the "alias" of the certificate. This will allow the certificate
to be referred to using a nickname for example "Steve's Certificate".

=item B<-clrtrust>

Clears all the permitted or trusted uses of the certificate.

=item B<-addtrust> I<arg>

Adds a trusted certificate use.
Any object name can be used here but currently only B<clientAuth>,
B<serverAuth>, B<emailProtection>, and B<anyExtendedKeyUsage> are defined.
As of OpenSSL 1.1.0, the last of these blocks all purposes when rejected or
enables all purposes when trusted.
Other OpenSSL applications may define additional uses.

=item B<-clrreject>

Clears all the prohibited or rejected uses of the certificate.

=item B<-addreject> I<arg>

Adds a prohibited trust anchor purpose.
It accepts the same values as the B<-addtrust> option.

=back

=head2 Generic options

=over 4

{- $OpenSSL::safe::opt_r_item -}

{- $OpenSSL::safe::opt_engine_item -}

{- $OpenSSL::safe::opt_provider_item -}

=back

=head2 Text Printing Flags

As well as customising the name printing format, it is also possible to
customise the actual fields printed using the B<certopt> option when
the B<text> option is present. The default behaviour is to print all fields.

=over 4

=item B<compatible>

Use the old format. This is equivalent to specifying no printing options at all.

=item B<no_header>

Don't print header information: that is the lines saying "Certificate"
and "Data".

=item B<no_version>

Don't print out the version number.

=item B<no_serial>

Don't print out the serial number.

=item B<no_signame>

Don't print out the signature algorithm used.

=item B<no_validity>

Don't print the validity, that is the B<notBefore> and B<notAfter> fields.

=item B<no_subject>

Don't print out the subject name.

=item B<no_issuer>

Don't print out the issuer name.

=item B<no_pubkey>

Don't print out the public key.

=item B<no_sigdump>

Don't give a hexadecimal dump of the certificate signature.

=item B<no_aux>

Don't print out certificate trust information.

=item B<no_extensions>

Don't print out any X509V3 extensions.

=item B<ext_default>

Retain default extension behaviour: attempt to print out unsupported
certificate extensions.

=item B<ext_error>

Print an error message for unsupported certificate extensions.

=item B<ext_parse>

ASN1 parse unsupported extensions.

=item B<ext_dump>

Hex dump unsupported extensions.

=item B<ca_default>

The value used by L<openssl-ca(1)>, equivalent to B<no_issuer>, B<no_pubkey>,
B<no_header>, and B<no_version>.

=back

=head1 EXAMPLES

Note: in these examples the '\' means the example should be all on one
line.

Print the contents of a certificate:

 openssl x509 -in cert.pem -noout -text

Print the "Subject Alternative Name" extension of a certificate:

 openssl x509 -in cert.pem -noout -ext subjectAltName

Print more extensions of a certificate:

 openssl x509 -in cert.pem -noout -ext subjectAltName,nsCertType

Print the certificate serial number:

 openssl x509 -in cert.pem -noout -serial

Print the certificate subject name:

 openssl x509 -in cert.pem -noout -subject

Print the certificate subject name in RFC2253 form:

 openssl x509 -in cert.pem -noout -subject -nameopt RFC2253

Print the certificate subject name in oneline form on a terminal
supporting UTF8:

 openssl x509 -in cert.pem -noout -subject -nameopt oneline,-esc_msb

Print the certificate SHA1 fingerprint:

 openssl x509 -sha1 -in cert.pem -noout -fingerprint

Convert a certificate from PEM to DER format:

 openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

Convert a certificate to a certificate request:

 openssl x509 -x509toreq -in cert.pem -out req.pem -key key.pem

Convert a certificate request into a self-signed certificate using
extensions for a CA:

 openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca \
        -key key.pem -out cacert.pem

Sign a certificate request using the CA certificate above and add user
certificate extensions:

 openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr \
        -CA cacert.pem -CAkey key.pem -CAcreateserial

Set a certificate to be trusted for SSL client use and change set its alias to
"Steve's Class 1 CA"

 openssl x509 -in cert.pem -addtrust clientAuth \
        -setalias "Steve's Class 1 CA" -out trust.pem

=head1 NOTES

The conversion to UTF8 format used with the name options assumes that
T61Strings use the ISO8859-1 character set. This is wrong but Netscape
and MSIE do this as do many certificates. So although this is incorrect
it is more likely to print the majority of certificates correctly.

The B<-email> option searches the subject name and the subject alternative
name extension. Only unique email addresses will be printed out: it will
not print the same address more than once.

=head1 BUGS

It is possible to produce invalid certificates or requests by specifying the
wrong private key, using unsuitable X.509 extensions,
or using inconsistent options in some cases: these should be checked.

There should be options to explicitly set such things as start and end
dates rather than an offset from the current time.

=head1 SEE ALSO

L<openssl(1)>,
L<openssl-req(1)>,
L<openssl-ca(1)>,
L<openssl-genrsa(1)>,
L<openssl-gendsa(1)>,
L<openssl-verify(1)>,
L<x509v3_config(5)>

=head1 HISTORY

The hash algorithm used in the B<-subject_hash> and B<-issuer_hash> options
before OpenSSL 1.0.0 was based on the deprecated MD5 algorithm and the encoding
of the distinguished name. In OpenSSL 1.0.0 and later it is based on a canonical
version of the DN using SHA1. This means that any directories using the old
form must have their links rebuilt using L<openssl-rehash(1)> or similar.

The B<-signkey> option has been renamed to B<-key> in OpenSSL 3.0,
keeping the old name as an alias.

The B<-engine> option was deprecated in OpenSSL 3.0.

The B<-C> option was removed in OpenSSL 3.0.

=head1 COPYRIGHT

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

Licensed under the Apache License 2.0 (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
L<https://www.openssl.org/source/license.html>.

=cut
