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
-in filename:輸入檔名,預設為標準輸入。
-out filename:輸出檔名,預設為標準輸出。如果這個選項沒有被提出,則沒有資料輸出。和B<-strparse>選項合併使用時,這個選項非常有用。給定一個PEM檔案,採用此選項可用生成一個DER編碼的檔案。
-noout:不列印引數編碼的版本資訊。
-offset number:開始資料分析的位元組偏移量,分析資料時,不一定從頭開始分析,可用指定偏移量,預設從頭開始分析。
-length number:需要分析資料的長度值,預設為分析到檔案結束。
-i
-dump:所有資料以十六進位制格式顯示。
dlimit number:與-dump不同,-dump顯示所有的資料,而此選項只能顯示由number指定數目的十六進位制資料。
-oid filename:一個檔案包含的附加的oids標記值。
-strparse offset:此選項也用於從一個偏移量開始來分析資料,不過,與-offset不一樣。-offset分析偏移量之後的所有資料,而-strparse只用於分析一段資料,並且這種資料必須是SET或者SEQUENCE,它只分析本SET
-genstr string、-genconf file:根據string、file或者用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