【问题标题】:Adding a private key to X509Certificate2 - C#将私钥添加到 X509Certificate2 - C#
【发布时间】:2021-06-03 10:51:01
【问题描述】:

我是 2WaySSL 的新手。

我想做什么:

1. Retrieve a Client certificate which is stored in a certificate store,
I'm managing to do that by such code:



 certificates = store.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false);

将证书附加到请求时,服务器的身份验证失败, 因为我的证书对象不包含私钥。

我正在尝试找到一种将私钥与证书相关联的方法(在 c# 中), 一旦我将从存储密钥的位置检索密钥。

类似:

   certificate.PrivateKey = key;

但我发现启动密钥对象或将其分配给证书而不发生异常的简单方法,即使密钥为空,我也会遇到拒绝访问异常。

任何帮助,尤其是后面的代码示例,我们将不胜感激。

【问题讨论】:

    标签: c# x509certificate x509 private-key x509certificate2


    【解决方案1】:

    在 .NET 4.7.2 之后,如果您手头只有公钥和 RSA 私钥的证书,您可以执行以下代码

    certificate= certificate.CopyWithPrivateKey(key);
    

    您必须导入 System.Security.Cryptography.X509Certificates;

    【讨论】:

      【解决方案2】:

      你有两个简单的选择

      • 将带有私钥的证书(通常是 pfx 文件)导入证书存储区。然后store.Certificates.Find 将使用私钥检索证书。
      • 将 pfx 文件加载到 X509Certificate2 istance 及其构造函数之一 new X509Certificate2(pfx_filename, password_to_pfx)

      【讨论】:

      • 感谢您的回复。关于 PFX 文件,如果它包含密码,是否意味着任何可以访问该文件的人也可以获得密码?密码不应该存储在其他地方,而不是证书文件中吗?
      • pfx 文件中的私钥使用此密码保护。密码本身不是文件的一部分。但是,如果使用 pfx 文件,则有可能将文件复制到其他地方(如果有人可以访问文件系统)并尝试通过蛮力猜测密码。我更喜欢使用证书存储。当安全是主要优先级时,我使用 HSM 存储私钥(或智能卡),但证书仍在证书存储中。
      • 我一定错过了什么。我打开了证书管理单元(使用 mmc),访问了相关的证书存储,并查看了证书。找到它的序列号后,在详细信息选项卡下,我使用了以下代码:certificates = store.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false);现在我可以访问证书及其私钥,使用:certificates[0].PrivateKey.ToXmlString(false) Thoughts?
      • 发生了什么变化?你现在使用不同的商店吗?还是序列号不同?或者您是否在不同的凭据(用户)下运行测试?
      • 我将尝试进一步解释: 1. 我获得了提供给我的客户证书。我应该能够自己生成一个(我可以访问服务器和客户端机器以及 CA)。 2. 提供的客户端证书是用私钥签名的(希望我理解的术语正确),我通过证书存储中的密钥图标发现了这一点,然后双击证书,我看到:“你有一个对应的私钥到这个证书” 3. 我想生成一个没有私钥的客户端证书,在我的代码中,从某个地方加载密钥,并将其与证书相关联。
      猜你喜欢
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 2018-11-07
      • 2023-03-19
      • 2017-09-20
      • 1970-01-01
      • 2012-04-06
      相关资源
      最近更新 更多