2009-06-09 14 views
1

PKCS#11からの標準呼び出しを使用して生成されたRSA 1024鍵ペアがあります。 公開鍵用のPKCS#10 CSRを生成する必要があります。PKCS#10からPKCS#11のオブジェクト鍵ペアの要求

MSには、createRequestWStrを使用してCSRを呼び出すことができるIEnroll4 dllがあります。サンプルは、新しいキーペア(MS CAPIに2つのオブジェクトを持つコンテナ)を生成する必要があることを示し、MSはcsr生成の公開キーコンテキストを自動的に提供します。

私の場合、pkcs#11(2つのオブジェクトとしてキーコンテナなし)を使用してキーペアが生成されています。 MSのDLLは私がさらに進歩することを許可していません。 QUERY 1: この問題をどのように解決できるかを指摘できますか。 ------------------------------------------------ ----------------------------

また、RSA標準に基づいたCSR生成のための独自のコードを書くことを考えていました。

CertificationRequest ::= SEQUENCE { 
    certificationRequestInfo CertificationRequestInfo, 
    signatureAlgorithm  SignatureAlgorithmIdentifier, 
    signature    Signature 
} 

SignatureAlgorithmIdentifier ::= AlgorithmIdentifier 
Signature ::= BIT STRING 

CertificationRequestInfo ::= SEQUENCE { 
    version     Version, 
    subject     Name, 
    subjectPublicKeyInfo SubjectPublicKeyInfo, 
    attributes [0] IMPLICIT Attributes 
}  
Attributes ::= SET OF Attribute 

QUERY 2: はどのように私は上記の構文を使用しない、私は証明書要求のためのASN 1.0形式 ASN.1構文をされたのですか?私はこの構文に全く新しいですか?私自身のコードを書くためには、どのリソースを調べる必要がありますか?

答えて

1

PKCS#11インターフェイスで証明書要求を生成する必要がある場合(つまり、CSPインターフェイスを使用することはできません)、IEnrollを避けることをお勧めします。

C++の場合、(無料でオープンソースの)オプションは、OpenSSLまたはBotanを調べているようです。私はOpenSSLのAPIが大変好きではありませんが、うまくいきます。私はBotanを使ったことはありませんが、かなりいいようです。あなたがそれらを支払うことを喜んでしている場合は、多くの優れた選択肢もあります。

また、ASN.1を自分で書きたい場合は、おそらくA Layman's Guide to a Subset of ASN.1, BER, and DERとしてください。正式な仕様はX.208とX.209にありますが、それは難読です。

(リンクに記載されている)ASN.1のDERエンコーディングを生成したいとします。ここで

は、例えば、エンコーディングです:

308201493081b3020100300e310c300a06035504031303666f6f30819d300d06092a864886f70d01 
0101050003818b00308187028181009c921beeef551bcb051518f0c48bfe72cb1d5609a64a005e0c 
008580bb81b3a43cea280d5bffa4e777733845fc2f485f1c8ccc0b2914f30d1e41369fd4a6758a3c 
c887834c4d6177bd96b9f341232b00d453f28f2ae5ad5e3b0324d0b5b440a0901968fd556470dd4d 
2ea2e99dd99c580703c042853265374cd3622f6c3369e5020103300d06092a864886f70d01010505 
000381810068c0266a16117b37fb15ad143e2941ff8b8f082daf4ec02789db01636f51c739f199fb 
19c56228cc12b9e482b966f8650fa3fdb24e31e97eef15f61aabc91dc194aeba4ebce5eab0c5e3db 
36cc090a0e4b2c7d3ac27eeb0d3900d73bd88172464b890a8f9a58a0d34c0f5e226b6173cc92a316 
4bbbf1d12f29d1e2ad3f36c977 

や優れたdumpasn1 utilityと翻訳:

0 30 329: SEQUENCE { 
    4 30 179: SEQUENCE { 
    7 02 1:  INTEGER 0 
    10 30 14:  SEQUENCE { 
    12 31 12:  SET { 
    14 30 10:   SEQUENCE { 
    16 06 3:   OBJECT IDENTIFIER commonName (2 5 4 3) 
    21 13 3:   PrintableString 'foo' 
      :   } 
      :   } 
      :  } 
    26 30 157:  SEQUENCE { 
    29 30 13:  SEQUENCE { 
    31 06 9:   OBJECT IDENTIFIER rsaEncryption (1 2 840 113549 1 1 1) 
    42 05 0:   NULL 
      :   } 
    44 03 139:  BIT STRING 0 unused bits, encapsulates { 
    48 30 135:   SEQUENCE { 
    51 02 129:    INTEGER 
      :    00 9C 92 1B EE EF 55 1B CB 05 15 18 F0 C4 8B FE 
      :    72 CB 1D 56 09 A6 4A 00 5E 0C 00 85 80 BB 81 B3 
      :    A4 3C EA 28 0D 5B FF A4 E7 77 73 38 45 FC 2F 48 
      :    5F 1C 8C CC 0B 29 14 F3 0D 1E 41 36 9F D4 A6 75 
      :    8A 3C C8 87 83 4C 4D 61 77 BD 96 B9 F3 41 23 2B 
      :    00 D4 53 F2 8F 2A E5 AD 5E 3B 03 24 D0 B5 B4 40 
      :    A0 90 19 68 FD 55 64 70 DD 4D 2E A2 E9 9D D9 9C 
      :    58 07 03 C0 42 85 32 65 37 4C D3 62 2F 6C 33 69 
      :      [ Another 1 bytes skipped ] 
183 02 1:    INTEGER 3 
      :    } 
      :   } 
      :  } 
      :  } 
186 30 13: SEQUENCE { 
188 06 9:  OBJECT IDENTIFIER 
      :  sha1withRSAEncryption (1 2 840 113549 1 1 5) 
199 05 0:  NULL 
      :  } 
201 03 129: BIT STRING 0 unused bits 
      :  68 C0 26 6A 16 11 7B 37 FB 15 AD 14 3E 29 41 FF 
      :  8B 8F 08 2D AF 4E C0 27 89 DB 01 63 6F 51 C7 39 
      :  F1 99 FB 19 C5 62 28 CC 12 B9 E4 82 B9 66 F8 65 
      :  0F A3 FD B2 4E 31 E9 7E EF 15 F6 1A AB C9 1D C1 
      :  94 AE BA 4E BC E5 EA B0 C5 E3 DB 36 CC 09 0A 0E 
      :  4B 2C 7D 3A C2 7E EB 0D 39 00 D7 3B D8 81 72 46 
      :  4B 89 0A 8F 9A 58 A0 D3 4C 0F 5E 22 6B 61 73 CC 
      :  92 A3 16 4B BB F1 D1 2F 29 D1 E2 AD 3F 36 C9 77 
      : } 
+0

こんにちはラスマス 私は勝利2K3サーバーで私の開発言語としてC++を使用しています。 ありがとうRaj – Raj

+0

私の回答を編集して、いくつかのC++ APIの提案を追加しました。 –

+0

こんにちはRasmus、あなたは証明書管理のためのサードパーティのツールキットについて言及しています。私はそれを見るつもりです。あなたは私にこれに関するいくつかの参考資料を教えてください。私は証明書のベンダーといくつか見た?それはあなたに言及していますか?どんな名前であれ助けてくれます。 – Raj

関連する問題