mirror of
https://github.com/openssl/openssl.git
synced 2024-11-27 05:21:51 +08:00
e53ad1d8f2
No longer needed after rewrite of cmd-nits Reviewed-by: David von Oheimb <david.von.oheimb@siemens.com> Reviewed-by: Paul Dale <pauli@openssl.org> (Merged from https://github.com/openssl/openssl/pull/15311)
892 lines
27 KiB
Plaintext
892 lines
27 KiB
Plaintext
=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<-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<-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 prints
|
|
the results. For a more complete description see the
|
|
L</CERTIFICATE EXTENSIONS> section.
|
|
|
|
=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 the description in L<openssl-verify(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> (SSL client
|
|
use), B<serverAuth> (SSL server use), B<emailProtection> (S/MIME email)
|
|
and B<anyExtendedKeyUsage> are used.
|
|
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 use.
|
|
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 CERTIFICATE EXTENSIONS
|
|
|
|
The B<-purpose> option checks the certificate extensions and determines
|
|
what the certificate can be used for. The actual checks done are rather
|
|
complex and include various hacks and workarounds to handle broken
|
|
certificates and software.
|
|
|
|
The same code is used when verifying untrusted certificates in chains
|
|
so this section is useful if a chain is rejected by the verify code.
|
|
|
|
The basicConstraints extension CA flag is used to determine whether the
|
|
certificate can be used as a CA. If the CA flag is true then it is a CA,
|
|
if the CA flag is false then it is not a CA. B<All> CAs should have the
|
|
CA flag set to true.
|
|
|
|
If the basicConstraints extension is absent then the certificate is
|
|
considered to be a "possible CA" other extensions are checked according
|
|
to the intended use of the certificate. A warning is given in this case
|
|
because the certificate should really not be regarded as a CA: however
|
|
it is allowed to be a CA to work around some broken software.
|
|
|
|
If the certificate is a V1 certificate (and thus has no extensions) and
|
|
it is self-signed it is also assumed to be a CA but a warning is again
|
|
given: this is to work around the problem of Verisign roots which are V1
|
|
self-signed certificates.
|
|
|
|
If the keyUsage extension is present then additional restraints are
|
|
made on the uses of the certificate. A CA certificate B<must> have the
|
|
keyCertSign bit set if the keyUsage extension is present.
|
|
|
|
The extended key usage extension places additional restrictions on the
|
|
certificate uses. If this extension is present (whether critical or not)
|
|
the key can only be used for the purposes specified.
|
|
|
|
A complete description of each test is given below. The comments about
|
|
basicConstraints and keyUsage and V1 certificates above apply to B<all>
|
|
CA certificates.
|
|
|
|
|
|
=over 4
|
|
|
|
=item B<SSL Client>
|
|
|
|
The extended key usage extension must be absent or include the "web client
|
|
authentication" OID. keyUsage must be absent or it must have the
|
|
digitalSignature bit set. Netscape certificate type must be absent or it must
|
|
have the SSL client bit set.
|
|
|
|
=item B<SSL Client CA>
|
|
|
|
The extended key usage extension must be absent or include the "web client
|
|
authentication" OID. Netscape certificate type must be absent or it must have
|
|
the SSL CA bit set: this is used as a work around if the basicConstraints
|
|
extension is absent.
|
|
|
|
=item B<SSL Server>
|
|
|
|
The extended key usage extension must be absent or include the "web server
|
|
authentication" and/or one of the SGC OIDs. keyUsage must be absent or it
|
|
must have the digitalSignature, the keyEncipherment set or both bits set.
|
|
Netscape certificate type must be absent or have the SSL server bit set.
|
|
|
|
=item B<SSL Server CA>
|
|
|
|
The extended key usage extension must be absent or include the "web server
|
|
authentication" and/or one of the SGC OIDs. Netscape certificate type must
|
|
be absent or the SSL CA bit must be set: this is used as a work around if the
|
|
basicConstraints extension is absent.
|
|
|
|
=item B<Netscape SSL Server>
|
|
|
|
For Netscape SSL clients to connect to an SSL server it must have the
|
|
keyEncipherment bit set if the keyUsage extension is present. This isn't
|
|
always valid because some cipher suites use the key for digital signing.
|
|
Otherwise it is the same as a normal SSL server.
|
|
|
|
=item B<Common S/MIME Client Tests>
|
|
|
|
The extended key usage extension must be absent or include the "email
|
|
protection" OID. Netscape certificate type must be absent or should have the
|
|
S/MIME bit set. If the S/MIME bit is not set in Netscape certificate type
|
|
then the SSL client bit is tolerated as an alternative but a warning is shown:
|
|
this is because some Verisign certificates don't set the S/MIME bit.
|
|
|
|
=item B<S/MIME Signing>
|
|
|
|
In addition to the common S/MIME client tests the digitalSignature bit or
|
|
the nonRepudiation bit must be set if the keyUsage extension is present.
|
|
|
|
=item B<S/MIME Encryption>
|
|
|
|
In addition to the common S/MIME tests the keyEncipherment bit must be set
|
|
if the keyUsage extension is present.
|
|
|
|
=item B<S/MIME CA>
|
|
|
|
The extended key usage extension must be absent or include the "email
|
|
protection" OID. Netscape certificate type must be absent or must have the
|
|
S/MIME CA bit set: this is used as a work around if the basicConstraints
|
|
extension is absent.
|
|
|
|
=item B<CRL Signing>
|
|
|
|
The keyUsage extension must be absent or it must have the CRL signing bit
|
|
set.
|
|
|
|
=item B<CRL Signing CA>
|
|
|
|
The normal CA tests apply. Except in this case the basicConstraints extension
|
|
must be present.
|
|
|
|
=back
|
|
|
|
=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
|