asn1parse

来源:互联网 发布:cms监控软件登录超时 编辑:程序博客网 时间:2024/06/03 08:55

用途

  asn1parse - 一种用来解析ASN.1的工具。

用法

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

描述

  asn1parse是一个有效的诊断工具,可以解析ASN.1结构。也可用来从ASN.1格式的数据中提取数据。

选项

-inform DER|PEM

  指定输入内容的格式。DER是二进制格式的,PEM是base64编码格式,默认是PEM。

-in filename

  指定输入文件的文件名,默认为标准输入。

-out filename

  指定输出文件名,用于放置DER编码数据信息。如果这个选项未指定,则没有数据会被输出。这个选项和-strparse选项结合使用是非常有用的。

-noout

  不输出输入文件的解析版本。

-offset number

  指定开始解析的位置,默认的解析从文件的开头开始。

-length number

  指定要解析的字节数,默认一直解析到文件的结尾。

-i

  标记实体,输出缩进标识。

-oid filename

  一个包含了OBJECT IDENTIFIERs(OIDs)附加信息的文件。下面的“注意”部分描述了文件的格式。

-dump

  以十六进制转出未知数据

-dlimit num

  和-dump选项类似,但只会输出第一个大小为num个字节的内容。

-strparse offset

  从ASN.1对象的offset处开始解析长度为八位组的内容。这个选项可以在一个嵌套结构中多次使用。

-genstr string,-genconf file

  生成基于字符串,文件或使用ASN1_generate_nconf格式的编码数据。如果只提供了文件,那么字符串可以从默认的asn1字段获取。被编码的数据就像来自一个文件一样,被传递给ASN1解析器,这些内容也因此可以通过输出选项对其检查或写到一个文件中。

输出

  输出通常包含类似如下的这些行:

    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的范围来递增的。h=XX给定了当前类型头部的长度(标记和长度八位组)。l=XX给出了内容八位组的长度。

  使用-i选项可以使输出更具可读性。

  一些ASN.1结构的知识需要在输出中解释。

  在这个示例中,BIT STRING在偏移为229的位置是证书的公钥。这个八位组的内容包含公钥的信息。这个信息可以使用-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选项,允许附加的OIDs被包含。每一行由3列组成,第一列是数值格式的OID,必须用空格隔开。第二列是一个“short name”,也应该用空格隔开。最后一列是一个“long name”。asn1parse显示那个长名字。例如:

  1.2.3.4 shortName A long name

示例

解析一个文件

  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


1 0