2009-06-09 8 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

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

+0

몇 가지 C++ API 제안을 포함하도록 내 응답을 편집했습니다. –

+0

Hello Rasmus, 인증서 관리를위한 타사 툴킷에 대해 언급하고 있습니다. 나는 그것을 볼 의지가있다. 이 부분에 대해 나에게 약간의 언급을 해 주시겠습니까? 나는 증명서 판매 인과 몇몇을 보았다? 당신이 말하는 거니? 어떤 이름이 나를 도울 것입니다. – Raj