2012-02-10 5 views
2

인증서가 가득 찬 키 저장소가 있습니다. 다른 사람이 인증서에 개인 키가 있다고 말했지만 코드를 확인해도 아무 것도 볼 수 없습니다. 이 모든 키는 vs6 및 cryptapi에서 사용되었으며, 저는 C#을 사용하고 있습니다. 인증서에 개인 키가 있는지 확인하는 방법

나는 내 자신의 인증서를 생성하고 난 같은 키 스토어에 그 수입 때 여기 http://www.source-code.biz/snippets/vbasic/3.htm

을 방법을 사용하여 개인 키를 가지고 보장하고 인증서가 실제로 개인이 않은 것으로 나타났다 내 코드를 실행 키 저장소에있는 다른 모든 인증서는 내 코드에 따라 사용하지 마십시오.

이 키 저장소의 인증서에서 개인 키를 사용할 수 있도록 설정해야 할 플래그가 있습니까?

public void testForPrivateKey(string keystorename) 
{ 
    X509Store teststore = new X509Store(keystorename); 

    teststore.Open(OpenFlags.ReadOnly); 
    foreach (X509Certificate2 cert in teststore.Certificates) 
    { 
     if(cert.HasPrivateKey) 
     { 
      System.Diagnostics.Debug.WriteLine("Private key found certificate name: {0}", cert.Subject); 
     } 

    } 
    store.Close(); 

} 
+0

키가 사람이 내가 암호화를 수행하는 데 사용하는 키를 지정할 수있는 방법을 알고 있나요은 "키 컨테이너"이 아닌 "인증서 저장소"에있는 것을 발견/부여를 해독 교환/서명이 있음 키 및 기타 키 컨테이너. – user1202605

답변

1

동일한 질문이 있지만 조사한 후에 해결했습니다. 인증서에 개인 키가 있으면 CERT_KEY_SPEC_PROP_ID 속성도 있습니다.

DWORD keySpec; 
DWORD len = 4; 
BOOL ret = CertGetCertificateContextProperty(pCertContext, CERT_KEY_SPEC_PROP_ID, &keySpec, &len); 
if (!ret){ 
    //has no private key 
} 
+0

인증서가 보이지 않습니다. 정교하게 제발 주시겠습니까? – user3613932

관련 문제