OpenSSL

密码学和 SSL/TLS 工具包

openssl-asn1parse

名称

openssl-asn1parse - ASN.1 解析命令

概要

openssl asn1parse [-help] [-inform DER|PEM|B64] [-in filename] [-out filename] [-noout] [-offset number] [-length number] [-i] [-oid filename] [-dump] [-dlimit num] [-strparse offset] [-genstr string] [-genconf file] [-strictpem] [-item name]

描述

此命令是一个诊断实用程序,可以解析 ASN.1 结构。它也可以用于从 ASN.1 格式的数据中提取数据。

选项

-help

打印使用信息。

-inform DER|PEM|B64

输入格式;默认值为 PEM。有关详细信息,请参阅 openssl-format-options(1)

-in filename

输入文件,默认为标准输入。

-out filename

用于放置 DER 编码数据的输出文件。如果未指定此选项,则不会输出任何数据。这在与 -strparse 选项结合使用时最为有用。

-noout

不要输出解析后的输入文件。

-offset number

开始解析的偏移量,默认为文件开头。

-length number

要解析的字节数,默认为文件末尾。

-i

根据结构的“深度”缩进输出。

-oid filename

包含附加对象标识符 (OID) 的文件。此文件的格式在下面的“注意”部分中描述。

-dump

以十六进制格式转储未知数据。

-dlimit num

-dump 相似,但仅输出前 num 个字节。

-strparse offset

解析从 offset 开始的 ASN.1 对象的內容字节。此选项可以多次使用,以“深入”嵌套结构。

-genstr string, -genconf file

使用 ASN1_generate_nconf(3) 格式,基于 stringfile 或两者生成编码数据。如果仅存在 file,则从默认部分使用名称 asn1 获取字符串。编码数据将通过 ASN1 解析器并以来自文件的形式打印出来,因此可以检查其内容并使用 -out 选项将其写入文件。

-strictpem

如果使用此选项,则会忽略 -inform。如果没有此选项,则 PEM 格式输入文件中的任何数据将被视为 Base64 编码并进行处理,无论其是否具有正常的 PEM BEGIN 和 END 标记。此选项将忽略 PEM 文件中 BEGIN 标记开始之前或 END 标记之后的所有数据。

-item name

尝试将数据解码并打印为 ASN1_ITEM name。如果类型已知,则可以使用此方法打印出任何支持的 ASN.1 结构的字段。

输出

输出通常包含以下类型的行

0:d=0  hl=4 l= 681 cons: SEQUENCE

.....

229:d=3  hl=3 l= 141 prim: BIT STRING
373:d=2  hl=3 l= 162 cons: cont [ 3 ]
376:d=3  hl=3 l= 159 cons: SEQUENCE
379:d=4  hl=2 l=  29 cons: SEQUENCE
381:d=5  hl=2 l=   3 prim: OBJECT            :X509v3 Subject Key Identifier
386:d=5  hl=2 l=  22 prim: OCTET STRING
410:d=4  hl=2 l= 112 cons: SEQUENCE
412:d=5  hl=2 l=   3 prim: OBJECT            :X509v3 Authority Key Identifier
417:d=5  hl=2 l= 105 prim: OCTET STRING
524:d=4  hl=2 l=  12 cons: SEQUENCE

.....

此示例是自签名证书的一部分。每行以十进制的偏移量开头。d=XX 指定当前深度。深度在任何 SET 或 SEQUENCE 的范围内增加。hl=XX 给出当前类型的标头长度(标记和长度字节)。l=XX 给出内容字节的长度。

可以使用 -i 选项使输出更易于阅读。

需要了解 ASN.1 结构才能解释输出。

在此示例中,偏移量 229 处的 BIT STRING 是证书公钥。此内容字节将包含公钥信息。可以使用选项 -strparse 229 检查它,从而得到

  0:d=0  hl=3 l= 137 cons: SEQUENCE
  3:d=1  hl=3 l= 129 prim: INTEGER           :E5D21E1F5C8D208EA7A2166C7FAF9F6BDF2059669C60876DDB70840F1A5AAFA59699FE471F379F1DD6A487E7D5409AB6A88D4A9746E24B91D8CF55DB3521015460C8EDE44EE8A4189F7A7BE77D6CD3A9AF2696F486855CF58BF0EDF2B4068058C7A947F52548DDF7E15E96B385F86422BEA9064A3EE9E1158A56E4A6F47E5897
135:d=1  hl=2 l=   3 prim: INTEGER           :010001

注意

如果 OID 不属于 OpenSSL 的内部表,它将以数字形式表示(例如 1.2.3.4)。传递给 -oid 选项的文件允许包含其他 OID。每行包含三列,第一列是 OID 的数字格式,后面应跟空格。第二列是“简称”,它是一个单词,后面跟着空格。最后一列是行的其余部分,是“长名称”。例如

1.2.3.4 shortName A long name

对于任何与简称和长名称关联的 OID,此命令将显示长名称。

示例

解析文件

openssl asn1parse -in file.pem

解析 DER 文件

openssl asn1parse -inform DER -in file.der

生成一个简单的 UTF8String

openssl asn1parse -genstr 'UTF8:Hello World'

生成并写出 UTF8String,不要打印解析后的输出

openssl asn1parse -genstr 'UTF8:Hello World' -noout -out utf8.der

使用配置文件生成

openssl asn1parse -genconf asn1.cnf -noout -out asn1.der

示例配置文件

asn1=SEQUENCE:seq_sect

[seq_sect]

field1=BOOL:TRUE
field2=EXP:0, UTF8:some random string

错误

应该有选项可以更改输出行的格式。某些 ASN.1 类型的输出没有得到很好的处理(如果有的话)。

参见

openssl(1), ASN1_generate_nconf(3)

版权所有 2000-2023 OpenSSL 项目作者。版权所有。

根据 Apache 许可证 2.0 版(“许可证”)授权。除非符合许可证,否则您不得使用此文件。您可以在源代码分发中的 LICENSE 文件或 https://www.openssl.org/source/license.html 中获取副本。