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) 格式,基于 string、file 或两者生成编码数据。如果仅存在 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 中获取副本。