用法: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的內容,是二進制來的,看不懂的。