2013-07-19 10 views
3

CERTENROLL.dll의 CX509CertificateRequest 인증서 기능을 사용하여 C#에서 생성 한 자체 서명 루트 인증서가 있습니다.C# certenroll.dll을 사용하여 CA가없는 자체 서명되지 않은 클라이언트 CX509Certificate 요청을 생성합니다.

동일한 API를 사용하여 루트에서 서명 한 클라이언트 인증서를 생성하는 함수를 작성하고 싶습니다. 그러나 자체 서명 인증서를 생성하지 못하는 유일한 CertEnroll 옵션은 인증 된 CA가 필요합니다.

SignerCertificate를 설정하기위한 플래그가있는 것처럼 보이지만 항상 초기화하지 못합니다.

 //Initialize cert 
     var cert = new CX509CertificateRequestCertificate(); 
     //take care of signer 
     cert.Issuer = issuen; 
     CSignerCertificate sc = new CSignerCertificate(); 
     var raw = SEScert.GetRawCertData(); 
     var rawStr=Convert.ToBase64String(raw); 
     sc.Initialize(false, X509PrivateKeyVerify.VerifyNone,  
         EncodingType.XCN_CRYPT_STRING_BASE64, rawStr); //fails here 
     cert.SignerCertificate = sc; 
내 루트가 서명 한 클라이언트 CX509CertificateRequest을 생성 할 수있는 방법

사람이 알고 있나요?

도움이나 조언을 주시면 감사하겠습니다.

답변

5

이 문제를 해결할 수있었습니다. 이 미래에 다른 사람을 도움이

ISignerCertificate signerCertificate = new CSignerCertificate(); 
signerCertificate.Initialize(true, X509PrivateKeyVerify.VerifyNone,EncodingType.XCN_CRYPT_STRING_HEX, SEScert.GetRawCertDataString()); 
cert.SignerCertificate = (CSignerCertificate)signerCertificate; 

희망 :

SEScert의 인코딩은 16 진수 문자열 또한 기계의 상황을 다음과 같이 올바른 코드가 보이는 허위 사실하지 않도록 설정해야하지 base64로입니다.

+1

와우, 정말 기쁜 누군가 나 전에 그것을 알아 냈어. 이 게시물을 찾는 데 나이가 들었습니다. 고맙습니다! – misha

+0

나는 너에게 키스 할 수있어. 이것을 사용하려면'EncodingType.XCN_CRYPT_STRING_HEXRAW'를 사용해야합니다. – Dinei