=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>

If the B<-req> option is not used this specifies the input
to read a certificate from or standard input if this option is not specified.
With the B<-req> option this specifies a certificate request file.

=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> option,
which implies self-signature.

=item B<-x509toreq>

Output a PKCS#10 certificate request (rather than a certificate).
The B<-key> 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 causes the new certificate or certificate request
to be self-signed using the supplied private key.
This 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 either
the B<-key> 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> 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 the B<-key> option.
This option is normally combined with the B<-req> option referencing a CSR.
Without the B<-req> option the input must be a self-signed 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
