1. 程式人生 > >OpenSSL命令---asn1parse

OpenSSL命令---asn1parse

用途:asn1parse命令是一種用來診斷ASN.1結構的工具,也能用於從ASN1.1資料中提取資料。

用法:

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


選項說明:

-inform PEM|DER:輸入內容的格式,一般為PEM

base64編碼格式)和DER(是二進位制格式)兩種,預設為PEM

-in filename:輸入檔名,預設為標準輸入。

-out filename:輸出檔名,預設為標準輸出。如果這個選項沒有被提出,則沒有資料輸出。和B<-strparse>選項合併使用時,這個選項非常有用。給定一個PEM檔案,採用此選項可用生成一個DER編碼的檔案。

-noout:不列印引數編碼的版本資訊。

-offset number:開始資料分析的位元組偏移量,分析資料時,不一定從頭開始分析,可用指定偏移量,預設從頭開始分析。

-length number:需要分析資料的長度值,預設為分析到檔案結束。

-i

:標記實體,輸出縮排標記,將一個ASN1實體下的其他物件縮排顯示。此選項非預設選項,加上此選項後,顯示更易看懂。

-dump:所有資料以十六進位制格式顯示。

dlimit number:與-dump不同,-dump顯示所有的資料,而此選項只能顯示由number指定數目的十六進位制資料。

-oid filename:一個檔案包含的附加的oids標記值。

-strparse offset:此選項也用於從一個偏移量開始來分析資料,不過,與-offset不一樣。-offset分析偏移量之後的所有資料,而-strparse只用於分析一段資料,並且這種資料必須是SET或者SEQUENCE,它只分析本SET

或者SEQUENCE範圍的資料。

-genstr string-genconf  file:根據stringfile或者用L<ASN1_generate_nconf(3)|ASN1_generate_nconf(3)>格式來產生編碼資料的字串。如果僅僅file被提供,字串將會從預設的name欄位中獲取。編碼後的資料通過ASN1分析來傳輸。

輸出

代表性的輸出內容為:

此命令讀取並顯示root.crt證書(證書格式為pem)裡面的內容值:

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          

.....

這個例項是一個自簽名的證書中的一部分。每行的開始代表偏移量,為小數。B<d=XX>表示的是此項的深度,深度是根據SET SEQUENCE的範圍來遞增的。B<hl=XX>給出的是目前ASN.1型別的頭長度(標記和長度八位組)。B<l=XX>給出了內容長度。B<prim>表示的是OBJECT表示的是ASN1型別;:sha1WithRSAEncryption表示oid

B<-i>選項可以被用於設定輸出的可讀性操作。

一些ASN.1結構的知識需要在輸出中翻譯。

在這個例項中,BIT STRING在第229列中代表證書公鑰值。可以用選項B<-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 time”。B<asn1parse>顯示長名字。例項如下:

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

 此命令除了顯示上面內容外,並生成一個der編碼的檔案。

openssl asn1parse –in c:\server.pem –out c:\server.cer

 此命令顯示上面的內容,但是有縮排。

openssl.exe asn1parse –in c:\server.pem –i

此命令從偏移量26開始分析,到結束。注意,26從前面命令的結果得到。

openssl.exe asn1parse –in c:\server.pem –i –offset 26

此命令從偏移量13進行分析,分析長度為11

openssl.exe asn1parse –in c:\server.pem –i –offset 13 –length 11