OpenSSL

密碼學和 SSL/TLS 工具包

openssl-asn1parse

名稱

openssl-asn1parse - ASN.1 分析指令

語法

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

說明

此指令是一個診斷工具程式,可以分析 ASN.1 結構。它也可以用來從 ASN.1 格式化的資料中萃取資料。

選項

-help

列印使用訊息。

-inform DER|PEM|B64

輸入格式;預設為 PEM。有關詳細資料,請參閱 openssl-format-options(1)

-in filename

輸入檔案,預設為標準輸入。

-out filename

輸出檔案,用來放置 DER 編碼資料。如果沒有此選項,則不會輸出任何資料。這在與 -strparse 選項搭配使用時最為有用。

-noout

不要輸出輸入檔案的已分析版本。

-offset number

開始分析的起始偏移量,預設為檔案開頭。

-length number

要分析的位元組數,預設為到檔案結尾。

-i

根據結構的「深度」縮排輸出。

-oid filename

包含其他物件識別碼 (OID) 的檔案。此檔案的格式說明如下方的附註部分。

-dump

以十六進位格式傾印未知資料。

-dlimit num

-dump 類似,但只輸出前 num 個位元組。

-strparse offset

offset 開始分析 ASN.1 物件的內容八位元組。此選項可多次使用,以「深入」嵌套結構。

-genstr string, -genconf file

使用 ASN1_generate_nconf(3) 格式,根據 stringfile 或兩者產生編碼資料。如果只存在 file,則會使用名稱 asn1 從預設區段取得字串。編碼資料會透過 ASN1 分析器傳遞,並列印出來,就像它來自檔案一樣,因此可以檢查內容,並使用 -out 選項寫入檔案。

-strictpem

如果使用此選項,則會忽略 -inform。沒有此選項,PEM 格式輸入檔案中的任何資料都將被視為以 base64 編碼,並進行處理,無論它是否有正常的 PEM BEGIN 和 END 標記。此選項將忽略 PEM 檔案中 BEGIN 標記開始前的任何資料,或 END 標記後的任何資料。

-item 名稱

嘗試將資料解碼並列印為 ASN1_ITEM 名稱。如果已知類型,這可以用於列印出任何受支援 ASN.1 結構的欄位。

輸出

輸出通常會包含類似這樣的行

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 的範圍內增加。hl=XX 提供目前類型的標頭長度(標籤和長度八位元組)。l=XX 提供內容八位元組的長度。

-i 選項可用於使輸出更具可讀性。

需要具備一些 ASN.1 結構的知識才能解譯輸出。

在此範例中,偏移量 229 的 BIT STRING 是證書公開金鑰。此內容八位元組將包含公開金鑰資訊。這可以使用選項 -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 選項的檔案允許包含其他 OID。每行包含三欄,第一欄是數字格式的 OID,後面應接空白。第二欄是「簡短名稱」,是一個單字,後面接空白。最後一欄是該行的其餘部分,也就是「長名稱」。範例

1.2.3.4 shortName A long name

對於任何具有相關簡短名稱和長名稱的 OID,此命令將顯示長名稱。

範例

剖析檔案

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

錯誤

應有選項來變更輸出行的格式。某些 ASN.1 類型的輸出處理不當(如果有的話)。

另請參閱

openssl(1), ASN1_generate_nconf(3)

版權所有 2000-2023 The OpenSSL Project Authors。保留所有權利。

授權於 Apache 授權 2.0(「授權」)。您不得使用此檔案,除非符合授權。您可以在原始程式碼散佈中的 LICENSE 檔案中取得副本,或在 https://www.openssl.org/source/license.html 取得。