=pod

=encoding utf8 

=head1 NAME

x509 - Certificate display and signing utility

=head1 SYNOPSIS

B<gmssl> B<x509>
[B<-help>]
[B<-inform DER|PEM|NET>]
[B<-outform DER|PEM|NET>]
[B<-keyform DER|PEM>]
[B<-CAform DER|PEM>]
[B<-CAkeyform DER|PEM>]
[B<-in filename>]
[B<-out filename>]
[B<-serial>]
[B<-hash>]
[B<-subject_hash>]
[B<-issuer_hash>]
[B<-ocspid>]
[B<-subject>]
[B<-issuer>]
[B<-nameopt option>]
[B<-email>]
[B<-ocsp_uri>]
[B<-startdate>]
[B<-enddate>]
[B<-purpose>]
[B<-dates>]
[B<-checkend num>]
[B<-modulus>]
[B<-pubkey>]
[B<-fingerprint>]
[B<-alias>]
[B<-noout>]
[B<-trustout>]
[B<-clrtrust>]
[B<-clrreject>]
[B<-addtrust arg>]
[B<-addreject arg>]
[B<-setalias arg>]
[B<-days arg>]
[B<-set_serial n>]
[B<-signkey filename>]
[B<-passin arg>]
[B<-x509toreq>]
[B<-req>]
[B<-CA filename>]
[B<-CAkey filename>]
[B<-CAcreateserial>]
[B<-CAserial filename>]
[B<-force_pubkey key>]
[B<-text>]
[B<-certopt option>]
[B<-C>]
[B<-[digest]>]
[B<-clrext>]
[B<-extfile filename>]
[B<-extensions section>]
[B<-engine id>]

=head1 DESCRIPTION

The B<x509> command is a multi purpose certificate utility. It can be
used to display certificate information, convert certificates to
various forms, sign certificate requests like a "mini CA" or edit
certificate trust settings.

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

x509命令是一个多用途证书实用程序。 它可用于显示证书信息，将证书转换为各种表单，签署诸如“迷你CA”或编辑证书信任设置的证书请求。

由于有大量的选择，它们将分成不同的部分。

=head1 OPTIONS

=head2 Input, Output, and General Purpose Options

=over 4

=item B<-help>

Print out a usage message.

打印使用信息。

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

This specifies the input format normally the command will expect an X509
certificate but this can change if other options such as B<-req> are
present. The DER format is the DER encoding of the certificate and PEM
is the base64 encoding of the DER encoding with header and footer lines
added. The NET option is an obscure Netscape server format that is now
obsolete.

这通常指定命令将期望X509证书的输入格式，但如果存在其他选项（如-req），则可以更改该输入格式。 DER格式是证书的DER编码，PEM是添加了页眉和页脚行的DER编码的base64编码。 NET选项是一个晦涩的Netscape服务器格式，现在已经过时了。

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

This specifies the output format, the options have the same meaning as the
B<-inform> option.

这指定输出格式，这些选项与-inform选项具有相同的含义。

=item B<-in filename>

This specifies the input filename to read a certificate from or standard input
if this option is not specified.

如果未指定此选项，则指定从或从标准输入读取证书的输入文件名。

=item B<-out filename>

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

默认情况下，它指定要写入的输出文件名或标准输出。

=item B<-[digest]>

the digest to use.
This affects any signing or display option that uses a message
digest, such as the B<-fingerprint>, B<-signkey> and B<-CA> options.
Any digest supported by the GmSSL B<dgst> 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.

消化使用。 这会影响使用消息摘要的任何签名或显示选项，例如-fingerprint，-signkey和-CA选项。 可以使用GmSSL dgst命令支持的任何摘要。 如果没有指定，则SHA1与-fingerprint一起使用，或者使用签名算法的默认摘要，通常为SHA256。

=item B<-engine id>

specifying an engine (by its unique B<id> string) will cause B<x509>
to attempt to obtain a functional reference to the specified engine,
thus initialising it if needed. The engine will then be set as the default
for all available algorithms.

指定引擎（通过其唯一的id字符串）将导致x509尝试获取对指定引擎的功能引用，从而在需要时进行初始化。 然后，引擎将被设置为所有可用算法的默认值。

=back

=head2 Display Options

Note: the B<-alias> and B<-purpose> options are also display options
but are described in the B<TRUST SETTINGS> section.

注意：-alias和-purpose选项也是显示选项，但在“信任设置”部分中有介绍。

=over 4

=item B<-text>

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

以文本形式打印证书。 输出全部细节，包括公钥，签名算法，发行人和主题名称，任何扩展名的序列号和任何信任设置。

=item B<-certopt option>

customise the output format used with B<-text>. The B<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 B<TEXT OPTIONS>
section for more information.

定制与-text一起使用的输出格式。 选项参数可以是单个选项或多个选项，以逗号分隔。 可以使用-certopt开关多次设置多个选项。 有关详细信息，请参阅TEXT OPTIONS部分。

=item B<-noout>

this option prevents output of the encoded version of the request.

此选项可防止请求的编码版本的输出。

=item B<-pubkey>

outputs the certificate's SubjectPublicKeyInfo block in PEM format.

以PEM格式输出证书的SubjectPublicKeyInfo块。

=item B<-modulus>

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

此选项打印证书中包含的公钥的模数值。

=item B<-serial>

outputs the certificate serial number.

输出证书序列号。

=item B<-subject_hash>

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

输出证书主题名称的“哈希”。 这在GmSSL中用于形成索引，以允许以主题名称查找目录中的证书。

=item B<-issuer_hash>

outputs the "hash" of the certificate issuer name.

输出证书颁发者名称的“哈希”。

=item B<-ocspid>

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

输出主题名称和公钥的OCSP哈希值。

=item B<-hash>

synonym for "-subject_hash" for backward compatibility reasons.

“-subject_hash”的同义词由于向后兼容性原因。

=item B<-subject_hash_old>

outputs the "hash" of the certificate subject name using the older algorithm
as used by GmSSL versions before 1.0.0.

使用1.0.0之前的GmSSL版本使用的旧算法输出证书主题名称的“哈希”。

=item B<-issuer_hash_old>

outputs the "hash" of the certificate issuer name using the older algorithm
as used by GmSSL versions before 1.0.0.

使用1.0.0之前的GmSSL版本使用的旧算法输出证书颁发者名称的“哈希”。

=item B<-subject>

outputs the subject name.

输出主题名称。

=item B<-issuer>

outputs the issuer name.

输出颁发者名称。

=item B<-nameopt option>

option which determines how the subject or issuer names are displayed. The
B<option> argument can be a single option or multiple options separated by
commas.  Alternatively the B<-nameopt> switch may be used more than once to
set multiple options. See the B<NAME OPTIONS> section for more information.

该选项用于确定主题或发行者名称的显示方式。 选项参数可以是单个选项或多个选项，以逗号分隔。 或者，-nameopt开关可以被多次使用以设置多个选项。 有关详细信息，请参阅“NAME OPTIONS”部分。

=item B<-email>

outputs the email address(es) if any.

输出电子邮件地址（如果有）。

=item B<-ocsp_uri>

outputs the OCSP responder address(es) if any.

输出OCSP响应者地址（如果有）。

=item B<-startdate>

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

打印证书的开始日期，即notBefore日期。

=item B<-enddate>

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

打印证书的到期日期，即notAfter日期。

=item B<-dates>

prints out the start and expiry dates of a certificate.

打印证书的开始和到期日期。

=item B<-checkend arg>

checks if the certificate expires within the next B<arg> seconds and exits
non-zero if yes it will expire or zero if not.

检查证书是否在下一个arg秒内到期，如果是，则退出非零，否则为零。

=item B<-fingerprint>

prints out the digest of the DER encoded version of the whole certificate
(see digest options).

打印整个证书的DER编码版本的摘要（请参阅摘要选项）。

=item B<-C>

this outputs the certificate in the form of a C source file.

这将以C源文件的形式输出证书。

=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 an "alias".

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 of the B<verify> utility for more information on the
meaning of trust settings.

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

受信任的证书是普通证书，其中附有数个附加的信息，例如证书的许可和禁止使用以及“别名”。

通常当证书被证实时，至少有一个证书必须是“可信任的”。 默认情况下，受信任的证书必须在本地存储，并且必须是根CA：任何以CA为结尾的证书链可用于任何目的。

目前的信任设置仅与根CA一起使用。 它们允许对根CA可以使用的目的进行更精细的控制。 例如，CA可能被信任为SSL客户端，但不能使用SSL服务器。

有关信任设置的含义的更多信息，请参阅验证实用程序的说明。

未来版本的GmSSL将会识别任何证书上的信任设置：不仅仅是根CA。

=over 4

=item B<-trustout>

this causes B<x509> to output a B<trusted> certificate. 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.

这导致x509输出可信证书。 可以输入普通或可信任的证书，但默认情况下会输出普通证书，并丢弃任何信任设置。 使用-trustout选项，输出可信证书。 如果任何信任设置被修改，将自动输出受信任的证书。

=item B<-setalias arg>

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

设置证书的别名。 这将允许使用昵称来引用证书，例如“Steve's Certificate”。

=item B<-alias>

outputs the certificate alias, if any.

输出证书别名（如果有）。

=item B<-clrtrust>

clears all the permitted or trusted uses of the certificate.

清除证书的所有允许或受信任的用途。

=item B<-clrreject>

clears all the prohibited or rejected uses of the certificate.

清除证书的所有禁止或拒绝的使用。

=item B<-addtrust 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 GmSSL 1.1.0, the last of these blocks all purposes when rejected or
enables all purposes when trusted.
Other GmSSL applications may define additional uses.

添加可信证书使用。 任何对象名称都可以在这里使用，但目前只使用clientAuth（SSL客户端使用），serverAuth（SSL服务器使用），emailProtection（S / MIME电子邮件）和anyExtendedKeyUsage。 从GmSSL 1.1.0开始，最后一个将被拒绝或在受信任时使所有目的成为可能。 其他GmSSL应用程序可能会定义其他用途。

=item B<-addreject arg>

adds a prohibited use. It accepts the same values as the B<-addtrust>
option.

增加禁止使用。 它接受与-addtrust选项相同的值。

=item B<-purpose>

this option performs tests on the certificate extensions and outputs
the results. For a more complete description see the B<CERTIFICATE
EXTENSIONS> section.

此选项对证书扩展进行测试并输出结果。 有关更完整的说明，请参阅CERTIFICATE EXTENSIONS部分。

=back

=head2 Signing Options

The B<x509> utility can be used to sign certificates and requests: it
can thus behave like a "mini CA".

x509实用程序可用于签署证书和请求：它像“迷你CA”

=over 4

=item B<-signkey filename>

this option causes the input file to be self signed using the supplied
private key.

If the input file is a certificate it sets the issuer name to the
subject name (i.e.  makes it self signed) changes the public key to the
supplied value and changes the start and end dates. The start date is
set to the current time and the end date is set to a value determined
by the B<-days> option. Any certificate extensions are retained unless
the B<-clrext> option is supplied; this includes, for example, any existing
key identifier extensions.

If the input is a certificate request then a self signed certificate
is created using the supplied private key using the subject name in
the request.

此选项将使用提供的私钥对输入文件进行自签名。

如果输入文件是证书，则将发行人名称设置为主题名称（即使其自签名）将公钥更改为提供的值，并更改开始和结束日期。 开始日期设置为当前时间，结束日期设置为由-days选项确定的值。 除非提供了-clrext选项，否则将保留任何证书扩展名; 这包括例如任何现有的密钥标识符扩展。

如果输入是证书请求，则使用提供的私钥使用请求中的主题名称创建自签名证书。

=item B<-passin arg>

the key password source. For more information about the format of B<arg>
see the B<PASS PHRASE ARGUMENTS> section in L<gmssl(1)>.

密码密码来源。 有关arg格式的更多信息，请参阅gmssl（1）中的PASS PHRASE ARGUMENTS部分。

=item B<-clrext>

delete any extensions from a certificate. This option is used when a
certificate is being created from another certificate (for example with
the B<-signkey> or the B<-CA> options). Normally all extensions are
retained.

从证书中删除任何扩展名。 当从另一个证书创建证书时使用此选项（例如使用-signkey或-CA选项）。 通常所有的扩展都保留。

=item B<-keyform PEM|DER>

specifies the format (DER or PEM) of the private key file used in the
B<-signkey> option.

指定-signkey选项中使用的私钥文件的格式（DER或PEM）。

=item B<-days arg>

specifies the number of days to make a certificate valid for. The default
is 30 days.

指定使证书有效的天数。 默认为30天。

=item B<-x509toreq>

converts a certificate into a certificate request. The B<-signkey> option
is used to pass the required private key.

将证书转换为证书请求。 -signkey选项用于传递所需的私钥。

=item B<-req>

by default a certificate is expected on input. With this option a
certificate request is expected instead.

默认情况下，预期输入证书。 使用此选项，可以使用证书请求。

=item B<-set_serial n>

specifies the serial number to use. This option can be used with either
the 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> or
B<-CAcreateserial> options) is not used.

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

指定要使用的序列号。 此选项可与-signkey或-CA选项一起使用。 如果与-CA选项结合使用，则不使用序列号文件（由-CAserial或-CAcreateserial选项指定）。

序列号可以是十进制或十六进制（如果前面是0x）。

=item B<-CA filename>

specifies the CA certificate to be used for signing. When this option is
present B<x509> behaves like a "mini CA". The input file is signed by this
CA using this option: that is its issuer name is set to the subject name
of the CA and it is digitally signed using the CAs private key.

This option is normally combined with the B<-req> option. Without the
B<-req> option the input is a certificate which must be self signed.

指定要用于签名的CA证书。 当此选项存在时，x509的行为就像“迷你CA”。 该CA使用此选项对输入文件进行签名：即将其颁发者名称设置为CA的主题名称，并使用CAs私钥进行数字签名。

此选项通常与-req选项组合。 没有-req选项，输入是必须是自签名的证书。

=item B<-CAkey filename>

sets the CA private key to sign a certificate with. If this option is
not specified then it is assumed that the CA private key is present in
the CA certificate file.

设置CA私钥以签署证书。 如果未指定此选项，则假定CA私钥存在于CA证书文件中。

=item B<-CAserial 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 consist 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
".srl" appended. For example if the CA certificate file is called
"mycacert.pem" it expects to find a serial number file called "mycacert.srl".

设置要使用的CA序列号文件。

当-CA选项用于签署证书时，它使用文件中指定的序列号。 该文件包含一行，其中包含使用序列号的偶数十六进制数字。 每次使用后，序列号将增加并再次写入文件。

默认文件名由附加了“.srl”的CA证书文件基础名称组成。 例如，如果CA证书文件被称为“mycacert.pem”，则它希望找到一个名为“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.

使用此选项，CA序列号文件不存在时将被创建：它将包含序列号“02”，正在签名的证书将具有1作为其序列号。
如果指定了-CA选项，并且序列号文件不存在，则生成随机数; 这是推荐的做法。

=item B<-extfile filename>

file containing certificate extensions to use. If not specified then
no extensions are added to the certificate.

包含要使用的证书扩展名的文件。 如果未指定，则不会将任何扩展名添加到证书。

=item B<-extensions section>

the section to add certificate 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.

从中添加证书扩展的部分。 如果未指定此选项，则扩展名应包含在未命名（默认）部分中，默认部分应包含一个名为“extensions”的变量，该变量包含要使用的部分。 有关扩展部分格式的详细信息，请参阅x509v3_config（5）手册页。

=item B<-force_pubkey key>

when a certificate is created set its public key to B<key> instead of the
key in the certificate or certificate request. This option is useful for
creating certificates where the algorithm can't normally sign requests, for
example DH.

The format or B<key> can be specified using the B<-keyform> option.

当创建证书时，将其公钥设置为key而不是证书或证书请求中的密钥。 此选项对于创建证书，在算法无法正常签署请求时很有用，例如DH。

可以使用-keyform选项指定格式或key。

=back

=head2 Name Options

The B<nameopt> command line switch determines how the subject and issuer
names are displayed. If no B<nameopt> switch is present the default "oneline"
format is used which is compatible with previous versions of GmSSL.
Each option is described in detail below, all options can be preceded by
a B<-> to turn the option off. Only the first four will normally be used.

nameopt命令行开关确定主题和发行者名称的显示方式。 如果没有nameopt开关，
则使用与以前版本的GmSSL兼容的默认“oneline”格式。 每个选项在下面详细描述，
所有选项都可以在前面 - 关闭该选项。 通常只会使用前四个。

=over 4

=item B<compat>

use the old format.

使用旧的格式。

=item B<RFC2253>

displays names compatible with RFC2253 equivalent to B<esc_2253>, B<esc_ctrl>,
B<esc_msb>, B<utf8>, B<dump_nostr>, B<dump_unknown>, B<dump_der>,
B<sep_comma_plus>, B<dn_rev> and B<sname>.

显示与esc2253，esc_ctrl，esc_msb，utf8，dump_nostr，dump_unknown，dump_der，sep_comma_plus，
dn_rev和sname等效的RFC2253兼容的名称。

=item B<oneline>

a oneline format which is more readable than RFC2253. It is equivalent to
specifying the  B<esc_2253>, B<esc_ctrl>, B<esc_msb>, B<utf8>, B<dump_nostr>,
B<dump_der>, B<use_quote>, B<sep_comma_plus_space>, B<space_eq> and B<sname>
options.  This is the I<default> of no name options are given explicitly.

一种比RFC2253更可读的在线格式。 相当于指定esc_2253，esc_ctrl，esc_msb，utf8，dump_nostr，
dump_der，use_quote，sep_comma_plus_space，space_eq和sname选项。 这是默认的，没有明确给出名称选项。

=item B<multiline>

a multiline format. It is equivalent B<esc_ctrl>, B<esc_msb>, B<sep_multiline>,
B<space_eq>, B<lname> and B<align>.

多行格式。 它等效于esc_ctrl，esc_msb，sep_multiline，space_eq，lname和align。

=item B<esc_2253>

escape the "special" characters required by RFC2253 in a field. That is
B<,+"E<lt>E<gt>;>. Additionally B<#> is escaped at the beginning of a string
and a space character at the beginning or end of a string.

在一个字段中转义RFC2253所需的“特殊”字符。 也就是说，+“<>;另外＃在字符串的开始处转义，在字符串的开头或结尾放置一个空格。

=item B<esc_2254>

escape the "special" characters required by RFC2254 in a field. That is
the B<NUL> character as well as and B<()*>.

在一个字段中转义RFC2254所需的“特殊”字符。 那就是NUL字符以及（）*。

=item B<esc_ctrl>

escape control characters. That is those with ASCII values less than
0x20 (space) and the delete (0x7f) character. They are escaped using the
RFC2253 \XX notation (where XX are two hex digits representing the
character value).

转义控制字符。 那是ASCII值小于0x20（空格）和删除（0x7f）字符的那些。 它们使用RFC2253 \ XX符号进行转义（其中XX是表示字符值的两个十六进制数字）。

=item B<esc_msb>

escape characters with the MSB set, that is with ASCII values larger than
127.

转义字符与MSB集合，即ASCII值大于127。

=item B<use_quote>

escapes some characters by surrounding the whole string with B<"> characters,
without the option all escaping is done with the B<\> character.

通过围绕整个字符串以“字符”转义一些字符，而没有选项，所有的转义都是用\字符完成的。

=item B<utf8>

convert all strings to UTF8 format first. This is required by RFC2253. If
you are lucky enough to have a UTF8 compatible terminal then the use
of this option (and B<not> setting B<esc_msb>) may result in the correct
display of multibyte (international) characters. Is this option is not
present then multibyte characters larger than 0xff will be represented
using the format \UXXXX for 16 bits and \WXXXXXXXX for 32 bits.
Also if this option is off any UTF8Strings will be converted to their
character form first.

首先将所有字符串转换为UTF8格式。 这是RFC2253所要求的。 如果您足够有足够的UTF8兼容终端，
则使用此选项（而不是设置esc_msb）可能会导致多字节（国际）字符的正确显示。 此选项不存在，
则大于0xff的多字节字符将使用格式\ UXXXX（16位）和\ WXXXXXXXX（32位）来表示。 此外，
如果此选项关闭，任何UTF8Strings将首先转换为其字符形式。

=item B<ignore_type>

this option does not attempt to interpret multibyte characters in any
way. That is their content octets are merely dumped as though one octet
represents each character. This is useful for diagnostic purposes but
will result in rather odd looking output.

此选项不会以任何方式尝试解释多字节字符。 这就是他们的内容八位字节只是被转储，
就像一个八位位组代表每个字符一样。 这对于诊断目的是有用的，但会导致相当奇怪的输出。

=item B<show_type>

show the type of the ASN1 character string. The type precedes the
field contents. For example "BMPSTRING: Hello World".

显示ASN1字符串的类型。 该类型位于字段内容之前。 例如“BMPSTRING：Hello World”。

=item B<dump_der>

when this option is set any fields that need to be hexdumped will
be dumped using the DER encoding of the field. Otherwise just the
content octets will be displayed. Both options use the RFC2253
B<#XXXX...> format.

当设置此选项时，需要使用hexdumped的任何字段将使用字段的DER编码进行转储。 
否则只会显示内容八位字节。 两种选项都使用RFC2253 #XXXX ...格式

=item B<dump_nostr>

dump non character string types (for example OCTET STRING) if this
option is not set then non character string types will be displayed
as though each content octet represents a single character.

转储非字符串类型（例如OCTET STRING），如果未设置此选项，
则将显示非字符串类型，因为每个内容字节表示单个字符。

=item B<dump_all>

dump all fields. This option when used with B<dump_der> allows the
DER encoding of the structure to be unambiguously determined.

转储所有字段。 当与dump_der一起使用时，该选项允许明确地确定结构的DER编码。

=item B<dump_unknown>

dump any field whose OID is not recognised by GmSSL.

转储GmSSL不识别其OID的任何字段。

=item B<sep_comma_plus>, B<sep_comma_plus_space>, B<sep_semi_plus_space>,
B<sep_multiline>

these options determine the field separators. The first character is
between RDNs and the second between multiple AVAs (multiple AVAs are
very rare and their use is discouraged). The options ending in
"space" additionally place a space after the separator to make it
more readable. The B<sep_multiline> uses a linefeed character for
the RDN separator and a spaced B<+> for the AVA separator. It also
indents the fields by four characters. If no field separator is specified
then B<sep_comma_plus_space> is used by default.

这些选项决定了字段分隔符。 第一个字符在RDN之间，而第二个是多个AVA之间（多个AVA非常罕见，并且不鼓励使用它们）。
 以“空格”结尾的选项还会在分隔符之后放置一个空格，使其更易于阅读。 sep_multiline对RDN分隔符使用换行字符，
并为AVA分隔符使用间隔的+。 它还将字段缩小四个字符。 如果没有指定字段分隔符，则默认使用sep_comma_plus_space。

=item B<dn_rev>

reverse the fields of the DN. This is required by RFC2253. As a side
effect this also reverses the order of multiple AVAs but this is
permissible.

反转DN的字段。 这是RFC2253所要求的。 作为副作用，这也反转了多个AVA的顺序，但这是允许的。

=item B<nofname>, B<sname>, B<lname>, B<oid>

these options alter how the field name is displayed. B<nofname> does
not display the field at all. B<sname> uses the "short name" form
(CN for commonName for example). B<lname> uses the long form.
B<oid> represents the OID in numerical form and is useful for
diagnostic purpose.

这些选项会改变字段名称的显示方式。 nofname根本不显示字段。
 sname使用“短名称”表单（例如，用于commonName的CN）。 
lname使用长格式。 oid以数字形式表示OID，可用于诊断目的。

=item B<align>

align field values for a more readable output. Only usable with
B<sep_multiline>.

调整字段值以获得更可读的输出。 仅适用于sep_multiline。

=item B<space_eq>

places spaces round the B<=> character which follows the field
name.

在字段名后面的=字符上放置空格。

=back

=head2 Text Options

As well as customising the name output format, it is also possible to
customise the actual fields printed using the B<certopt> options 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 output 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 the B<ca> utility, 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.

Display the contents of a certificate:

 gmssl x509 -in cert.pem -noout -text

Display the certificate serial number:

 gmssl x509 -in cert.pem -noout -serial

Display the certificate subject name:

 gmssl x509 -in cert.pem -noout -subject

Display the certificate subject name in RFC2253 form:

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

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

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

Display the certificate MD5 fingerprint:

 gmssl x509 -in cert.pem -noout -fingerprint

Display the certificate SHA1 fingerprint:

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

Convert a certificate from PEM to DER format:

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

Convert a certificate to a certificate request:

 gmssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem

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

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

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

 gmssl 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"

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

=head1 NOTES

The PEM format uses the header and footer lines:

 -----BEGIN CERTIFICATE-----
 -----END CERTIFICATE-----

it will also handle files containing:

 -----BEGIN X509 CERTIFICATE-----
 -----END X509 CERTIFICATE-----

Trusted certificates have the lines

 -----BEGIN TRUSTED CERTIFICATE-----
 -----END TRUSTED CERTIFICATE-----

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 display the majority of certificates correctly.

The B<-fingerprint> option takes the digest of the DER encoded certificate.
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.

The Netscape fingerprint uses MD5 whereas MSIE uses SHA1.

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

Extensions in certificates are not transferred to certificate requests and
vice versa.

It is possible to produce invalid certificates or requests by specifying the
wrong private key 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<req(1)>, L<ca(1)>, L<genrsa(1)>,
L<gendsa(1)>, L<verify(1)>,
L<x509v3_config(5)>

=head1 HISTORY

The hash algorithm used in the B<-subject_hash> and B<-issuer_hash> options
before GmSSL 1.0.0 was based on the deprecated MD5 algorithm and the encoding
of the distinguished name. In GmSSL 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 B<c_rehash> or similar.

=head1 COPYRIGHT

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

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

=cut
