1

CSRをプログラムで作成しようとしています。ASN.1、RFC 2986、X.509 について読みました。
を使用して作成されたいくつかの DER エンコードされた CSR ファイルも手動で解析しましOpenSSLた。
いくつかのことを除いて、すべてが明確に見えます。

  1. 公開鍵部分には8D 00 30 81 89 02 81 81、BIT STRING コンテンツの前 (および の後03 81) の次のバイトが含まれます。これは何ですか?DER でエンコードされたすべての CSR ファイルにそれらが含まれていることに気付きました。RFCでそれらについて何も見つけられませんでした。

  2. 署名部分には、署名内容の前で の後に次の不明なバイトが含まれています03 81。私が理解しているように、この部分には BIT STRING の最後のオクテットに関する情報が含まれています (最後のバイトの実際のバイト数)。しかし、これらのバイトをデコードする方法がわかりません。たとえば、署名は次のようになります。
    03 81 81 00 64 12 ... 24 B1 28
    はビット文字列03h形式、81hビット文字列の長さ64 12 ... 24 B1 28、署名です (ただし、長さは 80h です)。の部分がわかりません81 00

前もって感謝します。

4

2 に答える 2

3
  1. SubjectPublicKeyInfoのビット文字列は、公開鍵アルゴリズムによって異なります。内容は再びDERエンコードされます。可能性については、 RFC3370を参照してください。

  2. あなたの署名が次のように見える場合

    03 81 81 00 64 12 ... 24 B1 28

これは次のように解釈されます。DERはTLV(タグ-長さ-値)エンコーディングです。したがって、最初のバイト(用語ではオクテット)は、正しく気付いたように、ビット文字列のタグ-03を表します。

2番目のバイトは長さを決定します:

長い形式では、長さのオクテットは、最初のオクテットと1つ以上の後続のオクテットで構成されます。最初のオクテットは次のようにエンコードされます。

a)ビット8は1でなければなりません。

b)ビット7から1は、ビット7を最上位ビットとする符号なし2進整数として、長さオクテットの後続のオクテットの数をエンコードするものとします。

81ビット8が1に設定されているため、残りのビットは全長を決定するバイト数を示します。あなたの場合、それは単に1バイトです。したがって、次のバイトは長さです。81は署名の長さ129バイトに相当します。したがって、次の129バイトは、00から始まる値を表します。

于 2011-08-04T09:17:42.693 に答える
1

「プログラムによって」と言うとき、正確には何を意味しますか? コードで?もしそうなら、あなたは何語を使っていますか?Java を使用している場合、BouncyCastle JCEプロバイダーには、PKCS#10 要求を生成するためのクラスが含まれています。必要なコンポーネント (DN、公開鍵など) を指定するだけです。Microsoft 環境により適した .Net 実装もあると思います。

于 2011-08-09T18:54:10.063 に答える