7

X.509 証明書を ASN.1 形式でデコードしています。構造をたどってデコードに成功していますが、理解できないことが1つあります。

オクテット文字列を取得するシナリオがいくつかあり、私が遊んでいるこの Web サイト ( http://lapo.it/asn1js/ ) は、これらのオクテット文字列が実際には ASN.1 ツリーの多くを含んでいることを示しています。この Web サイトでは、そのようなオクテット文字列に (カプセル化) で注釈を付けています。

私の質問は次のとおりです。解析中に、オクテット文字列が実際に何かをカプセル化していることをどのように知ることができますか? タグと有効な長さを取得するかどうかを調べて、それを解析しようとしますか? そうでない場合、それは純粋なバイトデータですか? はいの場合、それは有効なサブツリーですか?

それとも、これはバイトとして出力されることを意図しており、特定のキーのエンコードされたデータであることを知っている場合にのみ、消費者はそれを解析しようとする必要がありますか?

サイトに既にロードされている例を取り上げて、「デコード」をクリックします。たとえば、ビット文字列をカプセル化するオクテット文字列であるオフセット 332 を参照しています。

4

2 に答える 2

8

これは、ASN.1 で「拡張」がどのように見えるかです ( RFC 2459 §B.2 — RFC が「時代遅れ」であることは知っていますが、その便利な付録は後のバージョンには存在しません)。

Extensions ::= SEQUENCE OF Extension

Extension ::= SEQUENCE {
extnId     OBJECT IDENTIFIER,
critical   BOOLEAN DEFAULT FALSE,
extnValue  OCTET STRING }

すべての拡張ペイロードは、OCTET STRING 内にカプセル化されます。拡張機能の OID は、そのオクテット文字列内で何を期待するかを示します。keyUsageの場合、それはBIT STRING ( §4.2.1.3 ) です。

そして今、 subjectAltNameに関する自分の質問についての回答があります。それは§4.2.1.7にあります。

コンテンツに OCTET STRING を使用する利点の 1 つは、仕様に従って、不明な (重要ではない) 拡張機能をそのように識別し、簡単にスキップできることです (ただし、DER もそれを簡単にすると思います)。

于 2013-03-09T12:57:06.800 に答える
1

ASN.1 ツールにそのカプセル化を処理するように指示する方法は、キーワード「CONTAINING」を使用することです。例(これは実際の/正しい証明書の仕様ではありませんが、アイデアが得られるはずです):

TstCert DEFINITIONS IMPLICIT TAGS ::=
BEGIN
   Sun ::= SEQUENCE {
       subjAltType OBJECT IDENTIFIER,
       name GenNames
   }

   GenNames ::= SEQUENCE SIZE (1..5) OF GenName

   GenName ::= CHOICE {
       otherName   [0] OtherName,
       rfc822Name  [1] UTF8String
   }

   OtherName ::= OCTET STRING (CONTAINING SEQUENCE {
       type-id OBJECT IDENTIFIER,
       value [0] EXPLICIT UTF8String
   } )
END
于 2015-03-20T20:20:34.017 に答える