openssl x509参数介绍(官方完整版)

**

x509

**
NAME
openssl-x509, x509 - 证书显示和签名实用程序

概要
openssl x509 [-help] [-inform DER|PEM] [-outform DER|PEM] [-keyform DER|PEM|ENGINE] [-CAform DER|PEM] [-CAkeyform DER|PEM] [-in filename] [-out filename] [-serial] [-hash] [-subject_hash] [-issuer_hash] [-ocspid] [-subject] [-issuer] [-nameopt option] [-email] [-ocsp_uri] [-startdate] [-enddate] [-purpose] [-dates] [-checkend num] [-modulus] [-pubkey] [-fingerprint] [-alias] [-noout] [-trustout] [-clrtrust] [-clrreject] [-addtrust arg] [-addreject arg] [-setalias arg] [-days arg] [-set_serial n] [-signkey arg] [-passin arg] [-x509toreq] [-req] [-CA filename] [-CAkey filename] [-CAcreateserial] [-CAserial filename] [-force_pubkey key] [-text] [-ext extensions] [-certopt option] [-C] [-digest] [-clrext] [-extfile filename] [-extensions section] [-sigopt nm:v] [-rand file…] [-writerand file] [-engine id] [-preserve_dates]
描述
该X509命令是一个多目的证书效用。它可用于显示证书信息、将证书转换为各种形式、像“迷你 CA”一样签署证书请求或编辑证书信任设置。

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

选项
输入、输出和通用选项

-help
打印使用信息。

-inform DER|PEM
这指定了命令通常需要 X509 证书的输入格式,但如果存在其他选项(例如-req),则这可能会更改。DER 格式是证书的 DER 编码,PEM 是 DER 编码的 base64 编码,添加了页眉和页脚行。默认格式为 PEM。

-outform DER|PEM
这指定了输出格式,这些选项与-inform选项具有相同的含义和默认值。

-in filename
如果未指定此选项,则指定要从中读取证书或标准输入的输入文件名。

-out filename
这指定默认情况下要写入的输出文件名或标准输出。

-digest
要使用的摘要。这会影响其使用的消息摘要,如任何签名或显示选项-fingerprint,-signkey和-CA选项。可以使用OpenSSL dgst命令支持的任何摘要。如果未指定,则 SHA1 与-fingerprint 一起使用,或者使用签名算法的默认摘要,通常是 SHA256。

-rand file…
一个或多个包含用于为随机数生成器设定种子的随机数据的文件。可以指定由操作系统相关字符分隔的多个文件。分隔符是; 为MS-Windows的,对OpenVMS和:为所有其他人。

[-writerand file]
退出时将随机数据写入指定文件。这可以与后续的-rand标志一起使用。

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

-preserve_dates
签署证书时,保留“notBefore”和“notAfter”日期,而不是将它们调整为当前时间和持续时间。不能与-days选项一起使用。

Display Options
注意:-alias和-purpose选项也是显示选项,但在“信任设置”部分进行了描述。

-text
以文本形式打印出证书。输出完整的详细信息,包括公钥、签名算法、发行者和主题名称、序列号、任何存在的扩展名和任何信任设置。

-ext extensions
以文本形式打印证书扩展名。扩展名用逗号分隔的字符串指定,例如“subjectAltName,subjectKeyIdentifier”。有关扩展名,请参阅x509v3_config(5)手册页。

-certopt option
自定义与-text 一起使用的输出格式。该选项参数可以是一个单一的选项或由逗号分隔的多个选项。该-certopt开关也可以使用多于一次设置的多个选项。有关更多信息,请参阅文本选项部分。

-noout
此选项可防止输出证书的编码版本。

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

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

-serial
输出证书序列号。

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

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

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

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

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

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

-subject
输出主题名称。

-issuer
输出发行人名称。

-nameopt option
确定如何显示主题或发行人名称的选项。该选项参数可以是一个单一的选项或由逗号分隔的多个选项。或者,可以多次使用-nameopt开关来设置多个选项。有关更多信息,请参阅名称选项部分。

–email
输出电子邮件地址(如果有)。

-ocsp_uri
输出 OCSP 响应者地址(如果有)。

-startdate
打印出证书的开始日期,即 notBefore 日期。

-enddate
打印出证书的到期日期,即 notAfter 日期。

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

-checkend arg
检查证书是否在接下来的arg秒内过期,如果是,则退出非零,否则将过期或为零。

-fingerprint
计算并输出整个证书的 DER 编码版本的摘要(请参阅摘要选项)。这通常称为“指纹”。由于消息摘要的性质,证书的指纹对于该证书是唯一的,具有相同指纹的两个证书可以被认为是相同的。

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

Trust Settings
甲受信任的证书是其具有附接至其信息的若干附加片段,如证书和一个“别名”的允许和禁止使用一个普通的证书。

通常,在验证证书时,至少必须“信任”一个证书。默认情况下,受信任的证书必须存储在本地并且必须是根 CA:以该 CA 结尾的任何证书链都可用于任何目的。

信任设置当前仅用于根 CA。它们允许更好地控制根 CA 的用途。例如,对于 SSL 客户端,CA 可能是可信的,但对于 SSL 服务器的使用则不可信。

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

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

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

-setalias arg
设置证书的别名。这将允许使用昵称来引用证书,例如“史蒂夫的证书”。

-alias
输出证书别名(如果有)。

-clrtrust
清除证书的所有允许或可信用途。

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

-addtrust arg
添加受信任的证书使用。此处可以使用任何对象名称,但目前仅使用clientAuth(SSL 客户端使用)、serverAuth(SSL 服务器使用)、emailProtection(S/MIME 电子邮件)和anyExtendedKeyUsage。从 OpenSSL 1.1.0 开始,这些中的最后一个在被拒绝时会阻止所有目的,或者在受信任时启用所有目的。其他 OpenSSL 应用程序可能会定义其他用途。

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

-purpose
此选项对证书扩展执行测试并输出结果。有关更完整的说明,请参阅证书扩展部分。

签名选项
该X509实用程序可用于对证书进行签名和要求:因此可以表现得像一个“迷你CA”。

-signkey arg
此选项使输入文件使用提供的私钥或引擎进行自签名。私钥的格式由-keyform选项指定。

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

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

-sigopt nm:v
在签名或验证操作期间将选项传递给签名算法。这些选项的名称和值是特定于算法的。

-passin arg
密钥密码来源。有关arg格式的更多信息,请参阅openssl(1) 中的“Pass Phrase Options”。

-clrext
从证书中删除任何扩展。正在从另一个证书(例如与所创建的证书时,该选项用于-signkey或-CA选项)。通常保留所有扩展名。

-keyform PEM|DER|ENGINE
指定-signkey选项中使用的私钥文件的格式(DER 或 PEM)。

-days arg
指定使证书有效的天数。默认值为 30 天。不能与-preserve_dates选项一起使用。

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

-req
默认情况下,输入时需要证书。使用此选项,需要证书请求。

-set_serial n
指定要使用的序列号。此选项可以与任一使用-signkey或-CA选项。如果与结合使用-CA选项的序列号文件(由作为指定-CAserial或-CAcreateserial选项)不被使用。

序列号可以是十进制或十六进制(如果前面有0x)。

-CA filename
指定用于签名的 CA 证书。当这个选项存在时,x509 的行为就像一个“迷你 CA”。输入文件由该 CA 使用此选项签名:即其颁发者名称设置为 CA 的主题名称,并使用 CA 的私钥进行数字签名。

此选项通常与-req选项结合使用。如果没有-req选项,则输入是必须自签名的证书。

-CAkey filename
设置用于签署证书的 CA 私钥。如果未指定此选项,则假定 CA 私钥存在于 CA 证书文件中。

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

当-CA选项用于签署证书时,它使用文件中指定的序列号。该文件由一行包含偶数个十六进制数字和要使用的序列号组成。每次使用后,序列号都会递增并再次写入文件。

默认文件名由 CA 证书文件基本名称组成,并附加了“.srl”。例如,如果 CA 证书文件名为“mycacert.pem”,它希望找到名为“mycacert.srl”的序列号文件。

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

-extfile filename
包含要使用的证书扩展名的文件。如果未指定,则不会向证书添加任何扩展。

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

-force_pubkey key
创建证书时,将其公钥设置为key而不是证书或证书请求中的密钥。此选项可用于创建算法通常无法签署请求的证书,例如 DH。

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

Name Options
所述nameopt命令行开关确定对象和发行人的名称的显示方式。如果不存在nameopt开关,则使用与以前版本的 OpenSSL 兼容的默认“oneline”格式。下面详细介绍了每个选项,所有选项前面都可以加-以关闭该选项。通常只使用前四个。

Compat
使用旧格式。

RFC2253
显示与 RFC2253 兼容的名称,相当于esc_2253、esc_ctrl、esc_msb、utf8、dump_nostr、dump_unknown、dump_der、sep_comma_plus、dn_rev和sname。

Oneline
一种比 RFC2253 更具可读性的单行格式。它相当于指定esc_2253、esc_ctrl、esc_msb、utf8、dump_nostr、dump_der、use_quote、sep_comma_plus_space、space_eq和sname选项。这是没有明确给出名称选项的默认值。

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

esc_2253
转义字段中 RFC2253 要求的“特殊”字符。即,+"<>;。另外#在字符串的开头和字符串的开头或结尾的空格字符被转义。

esc_2254
转义字段中 RFC2254 要求的“特殊”字符。那是NUL字符以及和()*。

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

esc_msb
设置 MSB 的转义字符,即 ASCII 值大于 127。

use_quote
通过用"字符包围整个字符串来转义一些字符,没有选项,所有转义都是用\字符完成的。

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

ignore_type
此选项不会尝试以任何方式解释多字节字符。也就是说,它们的内容八位字节只是被转储,就好像一个八位字节代表每个字符一样。这对于诊断目的很有用,但会导致看起来很奇怪的输出。

show_type
显示 ASN1 字符串的类型。类型在字段内容之前。例如“BMPSTRING:Hello World”。

dump_der
设置此选项后,任何需要十六进制转储的字段都将使用字段的 DER 编码进行转储。否则将只显示内容八位字节。这两个选项都使用 RFC2253 #XXXX…格式。

dump_nostr
如果未设置此选项,则转储非字符串类型(例如 OCTET STRING),则将显示非字符串类型,就好像每个内容八位字节表示单个字符一样。

dump_all
转储所有字段。与dump_der 一起使用时,此选项允许明确确定结构的 DER 编码。

dump_unknown
转储 OpenSSL 无法识别其 OID 的任何字段。

sep_comma_plus, sep_comma_plus_space, sep_semi_plus_space, sep_multiline
这些选项确定字段分隔符。第一个字符在 RDN 之间,第二个字符在多个 AVA 之间(多个 AVA 非常罕见,不鼓励使用)。以“空格”结尾的选项会在分隔符后额外放置一个空格以使其更具可读性。该sep_multiline使用为RDN分离器和间隔开的换行字符+为AVA隔板。它还将字段缩进四个字符。如果未指定字段分隔符,则默认使用sep_comma_plus_space。

dn_rev
反转 DN 的字段。这是 RFC2253 所要求的。作为副作用,这也会颠倒多个 AVA 的顺序,但这是允许的。

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

Align
对齐字段值以获得更易读的输出。仅可用于sep_multiline。

space_eq
在字段名称后面的=字符周围放置空格。

Text Options
除了自定义名称输出格式外,还可以在存在text选项时使用certopt选项自定义打印的实际字段。默认行为是打印所有字段。

Compatible
使用旧格式。这相当于根本不指定输出选项。

no_header
不要打印标题信息:那是说“证书”和“数据”的行。

no_version
不要打印出版本号。

no_serial
不要打印出序列号。

no_signame
不要打印出使用的签名算法。

no_validity
不要打印有效性,即notBefore和notAfter字段。

no_subject
不要打印出主题名称。

no_issuer
不要打印出发行人名称。

no_pubkey
不要打印出公钥。

no_sigdump
不要给出证书签名的十六进制转储。

no_aux
不要打印出证书信任信息。

no_extensions
不要打印任何 X509V3 扩展。

ext_default
保留默认扩展行为:尝试打印出不受支持的证书扩展。

ext_error
打印不支持的证书扩展的错误消息。

ext_parse
ASN1 解析不受支持的扩展。

ext_dump
十六进制转储不受支持的扩展。

ca_default
ca实用程序使用的值,相当于no_issuer、no_pubkey、no_header和no_version。

例子
注意:在这些示例中,“\”表示示例应该全部在一行上。

显示证书的内容:

openssl x509 -in cert.pem -noout -text
显示证书的“主题备用名称”扩展名:

openssl x509 -in cert.pem -noout -ext subjectAltName
显示证书的更多扩展名:

openssl x509 -in cert.pem -noout -ext subjectAltName,nsCertType
显示证书序列号:

openssl x509 -in cert.pem -noout -serial
显示证书主题名称:

openssl x509 -in cert.pem -noout -subject
以 RFC2253 形式显示证书主题名称:

openssl x509 -in cert.pem -noout -subject -nameopt RFC2253
在支持 UTF8 的终端上以单行形式显示证书主题名称:

openssl x509 -in cert.pem -noout -subject -nameopt oneline,-esc_msb
显示证书 SHA1 指纹:

openssl x509 -sha1 -in cert.pem -noout -fingerprint
将证书从 PEM 转换为 DER 格式:

openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER
将证书转换为证书请求:

openssl x509 -x509toreq -in cert.pem -out req.pem -signkey key.pem
使用 CA 的扩展将证书请求转换为自签名证书:

openssl x509 -req -in careq.pem -extfile openssl.cnf -extensions v3_ca
-signkey key.pem -out cacert.pem
使用上面的 CA 证书签署证书请求并添加用户证书扩展:

openssl x509 -req -in req.pem -extfile openssl.cnf -extensions v3_usr
-CA cacert.pem -CAkey key.pem -CAcreateserial
设置一个证书以供 SSL 客户端使用,并将其别名设置为“Steve’s Class 1 CA”

openssl x509 -in cert.pem -addtrust clientAuth
-setalias “Steve’s Class 1 CA” -out trust.pem
笔记
PEM 格式使用页眉和页脚行:

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
它还将处理包含以下内容的文件:

-----BEGIN X509 CERTIFICATE-----
-----END X509 CERTIFICATE-----
受信任的证书有几行

-----BEGIN TRUSTED CERTIFICATE-----
-----END TRUSTED CERTIFICATE-----
与 name 选项一起使用的到 UTF8 格式的转换假定 T61Strings 使用 ISO8859-1 字符集。这是错误的,但 Netscape 和 MSIE 会像许多证书一样这样做。因此,尽管这是不正确的,但更有可能正确显示大多数证书。

该-email选项搜索主题名称和主题可选名称扩展。只会打印出唯一的电子邮件地址:它不会多次打印同一个地址。

证书延期

  • purpose选项检查证书扩展并确定证书的用途。实际完成的检查相当复杂,包括处理损坏的证书和软件的各种技巧和变通方法。

验证链中不受信任的证书时使用相同的代码,因此如果验证代码拒绝链,则此部分很有用。

basicConstraints 扩展 CA 标志用于确定证书是否可以用作 CA。如果 CA 标志为真,则它是 CA,如果 CA 标志为假,则它不是 CA。所有CA 都应将 CA 标志设置为 true。

如果 basicConstraints 扩展不存在,则证书被视为“可能的 CA”,根据证书的预期用途检查其他扩展。在这种情况下会发出警告,因为该证书实际上不应被视为 CA:但是允许作为 CA 来解决一些损坏的软件。

如果证书是 V1 证书(因此没有扩展)并且它是自签名的,则它也被假定为 CA,但再次发出警告:这是为了解决 V1 自签名证书的 Verisign 根的问题.

如果存在 keyUsage 扩展,则对证书的使用进行额外限制。如果存在 keyUsage 扩展,CA 证书必须设置 keyCertSign 位。

扩展密钥使用扩展对证书使用设置了额外的限制。如果此扩展存在(无论是否重要),密钥只能用于指定的目的。

下面给出了每个测试的完整描述。上面关于 basicConstraints 和 keyUsage 以及 V1 证书的注释适用于所有CA 证书。

SSL客户端
扩展密钥用法扩展必须不存在或包含“Web 客户端身份验证”OID。keyUsage 必须不存在或必须设置 digitalSignature 位。Netscape 证书类型必须不存在或必须设置 SSL 客户端位。

SSL 客户端 CA
扩展密钥用法扩展必须不存在或包含“Web 客户端身份验证”OID。Netscape 证书类型必须不存在或者它必须设置 SSL CA 位:如果 basicConstraints 扩展不存在,这将用作解决方法。

SSL服务器
扩展密钥使用扩展必须不存在或包括“网络服务器身份验证”和/或 SGC OID 之一。keyUsage 必须不存在,或者它必须有 digitalSignature、keyEncipherment 设置或两个位都设置。Netscape 证书类型必须不存在或设置了 SSL 服务器位。

SSL 服务器 CA
扩展密钥使用扩展必须不存在或包括“网络服务器身份验证”和/或 SGC OID 之一。必须不存在 Netscape 证书类型或必须设置 SSL CA 位:如果不存在 basicConstraints 扩展,则这可用作变通方法。

网景 SSL 服务器
如果存在 keyUsage 扩展,Netscape SSL 客户端要连接到 SSL 服务器,它必须设置 keyEncipherment 位。这并不总是有效,因为某些密码套件使用密钥进行数字签名。否则它与普通 SSL 服务器相同。

常见的 S/MIME 客户端测试
扩展密钥用法扩展必须不存在或包含“电子邮件保护”OID。Netscape 证书类型必须不存在或应设置 S/MIME 位。如果未在 Netscape 证书类型中设置 S/MIME 位,则允许使用 SSL 客户端位作为替代,但会显示警告:这是因为某些 Verisign 证书未设置 S/MIME 位。

S/MIME 签名
除了常见的 S/MIME 客户端测试之外,如果存在 keyUsage 扩展,则必须设置 digitalSignature 位或 nonRepudiation 位。

S/MIME 加密
除了常见的 S/MIME 测试之外,如果存在 keyUsage 扩展,则必须设置 keyEncipherment 位。

S/MIME CA
扩展密钥用法扩展必须不存在或包含“电子邮件保护”OID。Netscape 证书类型必须不存在或必须设置 S/MIME CA 位:如果 basicConstraints 扩展不存在,这将用作解决方法。

CRL 签署
keyUsage 扩展必须不存在或必须设置 CRL 签名位。

CRL 签名 CA
正常的 CA 测试适用。除了在这种情况下,basicConstraints 扩展必须存在。

错误
证书中的扩展不会转移到证书请求,反之亦然。

在某些情况下,通过指定错误的私钥或使用不一致的选项可能会产生无效的证书或请求:应该检查这些。

应该有选项可以明确设置开始和结束日期等内容,而不是与当前时间的偏移量。

也可以看看
req(1)、ca(1)、genrsa(1)、gendsa(1)、verify(1)、x509v3_config(5)

历史
OpenSSL 1.0.0 之前的-subject_hash和-issuer_hash选项中使用的哈希算法基于已弃用的 MD5 算法和可分辨名称的编码。在 OpenSSL 1.0.0 及更高版本中,它基于使用 SHA1 的 DN 的规范版本。这意味着任何使用旧格式的目录都必须使用c_rehash或类似方法重建它们的链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值