?
七.????
指令
asn1parse
?
用法:
openssl asn1parse [-inform PEM|DER] [-in filename] [-out filename]
? ?
? ???[-noout] [-offset number] [-length number] [-i] [- structure filename]
? ?
? ???[-strparse offset]
? ?
用途:一個診斷工具,可以對
ASN1
結構的東東進行分析。
? ? ASN1
是什么?一個用來描述對象的標準。要解釋的話,文章可以比解釋
openssl
結構的文章更長。有興趣的話自己去網絡上找來看吧。
? ?
-inform DER|PEM|TXT
? ?
輸入的格式,
DER
是二進制格式,
PEM
是
base64
編碼格式
,TXT
不用解釋了吧
? ?
-in filename
? ?
輸入文件的名稱,缺省為標準輸入。
? ?
? ? -out filename
? ?
輸入文件的名稱,輸入一般都是
DER
數據。如果沒這個項,就沒有東西輸入咯。該項一般都要和
-strparse
一起使用。
? ?
? ? -noout
? ?
不要輸出任何東西
(
不明白有什么用
)
? ?
-offset number
? ?
從文件的那里開始分析,看到
offset
就應該知道是什么意思了吧。
? ?
? ? -length number
? ?
一共分析輸入文件的長度的多少,缺省是一直分析到文件結束。
? ?
? ? -i
? ?
根據輸出的數據自動縮進。
? ?
? ? - structure filename
? ?
當你輸入的文件包含有附加的對象標志符的時候,使用這個。
? ?
這種文件的格式在后面會介紹。
? ?
? ? -strparse offset
? ?
從由
offset
指定的偏移量開始分析
ASN1
對象。當你碰到一個嵌套的對象時,可以反復使用這個項來一直進到里面的結構捏出你需要的東東。
? ?
一般分析完之后輸入的東東如下:
? ? openssl asn1parse -out temp.ans -i -inform pem < server.crt
? ?
? ???0:d=0 hl=4 l= 881 cons: SEQUENCE
? ?
? ???4:d=1 hl=4 l= 730 cons: SEQUENCE
? ?
? ???... ....
? ?
? ???172:d=3 hl=2 l= 13 prim: UTCTIME :000830074155Z
? ?
? ???187:d=3 hl=2 l= 13 prim: UTCTIME :010830074155Z
? ?
? ???202:d=2 hl=3 l= 136 cons: SEQUENCE
? ?
? ???205:d=3 hl=2 l= 11 cons: SET
? ?
? ???... ...
? ?
? ???359:d=3 hl=3 l= 141 prim: BIT STRING
? ?
? ???... ...
? ?
本例是一個自簽名的證書。每一行的開始是對象在文件里的偏移量。
d=xx
是結構嵌套的深度。知道
ASN1
結構的人應該知道,每一個
SET
或者
SEQUENCE
都會讓嵌套深度增加
1.
? ? hl=xx
表示當前類型的
header
的長度。
1=xx
表示內容的八進制的長度。
? ? -i
可以讓輸出的東西容易懂一點。
? ?
如果沒有
ASN.1
的知識,可以省略看這一章。
? ?
本例中
359
行就是證書里的公共密鑰。可以用
-strparse
來看看
? ? openssl asn1parse -out temp.ans -i -inform pem -strparse 359 < server.crt
? ?
? ???0:d=0 hl=3 l= 137 cons: SEQUENCE
? ?
? ???3:d=1 hl=3 l= 129 prim: INTEGER :C0D802B4C084B20569C619C0FDF
? ?
? ???466EEB7980920A408D51DA22C20427AC32488665D931C41E3274912DE2F25C8CA9C97B75
? ?
? ???415C01794B622DBEADD92DA068C140C3AD387BF5FDC9A8D2FCEE7F7F3E36B0194994FD67
? ?
? ???07897C8969F16F6ECB3F03BF985E910817160FE5DCBF874B1C0DBD06A568E130DA7C9FE3
? ?
? ???9FE7A7F421369
? ?
? ???135:d=1 hl=2 l= 3 prim: INTEGER :010001
? ?
不要試圖去看
temp.ans
的內容,是二進制來的,看不懂的。