c# - 如何判断证书是否有私钥

标签 c# rsa certificate private-key

我有一个装满证书的 keystore 。另一个人告诉我证书有一个私钥,但是当我检查我的代码时,我从来没有看到任何私钥。所有这些 key 都用于 vs6 和 cryptapi,我使用的是 c#。

我创建了自己的证书并使用此处的方法确保它具有私钥 http://www.source-code.biz/snippets/vbasic/3.htm

当我将它导入同一个 keystore 然后运行我的代码时,证书显示它确实有一个私钥, keystore 中的所有其他证书都没有(根据我的代码)。

是否有一些标志或我需要设置的东西以便能够在这个 keystore 的证书中使用私钥?

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();

}

最佳答案

我遇到了同样的问题,但在调查后解决了: 如果证书有私钥,它也有属性 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
}

关于c# - 如何判断证书是否有私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9235596/

相关文章:

c# - 等待任务列表,一次一个

c# - 改变当前方法的执行线程

c++ - RSA 加密然后解密失败,返回 "oaep decoding error"

macos - Mac 上出现 "This certificate is not yet valid"错误

c - SSL_get_peer_certificate(ssl) 返回 NULL?

c# - 我的表单上有一个按钮,单击后会运行更新 sql 来更新数据库上的忠诚度积分,但它不会更新

c++ - 如何在基数 256 中以其唯一的 xLen 数字表示形式写入整数 x?

math - RSA - p 和 q 的位长

java - 如何从 "Credential storage"加载证书?

c# - 如何更改 Windows 程序中的主机文件?