2012-02-10 6 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というプロパティもあります。誰もが私が交流/署名があることを考えると解読/ Iは、暗号化を行うために使用するキーを指定することができる方法を知っていたキーは、「キーコンテナー」ではない「証明書ストア」であることが判明

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

私の証明書には表示されません。あなたは詳細を教えていただけますか? – user3613932

関連する問題