【问题标题】:Programmatically add key from X509Certificate2 via PKCS#11 to a key store通过 PKCS#11 以编程方式将 X509Certificate2 中的密钥添加到密钥库
【发布时间】:2018-12-12 07:28:22
【问题描述】:

我们有一个具有 PKCS#11 接口的安全密钥库。我们使用PKCS#11 Interop Library for .NET 访问其上的密钥。我们还需要从证书中导入密钥。如何通过我们的 PKCS#11 接口将 X509Certificate2 的 PrivateKey 导入到我们的密钥库中?

var key = x509Certificate2.PrivateKey;

var attributes = new List<ObjectAttribute>();

// What to do here? How to fill in the key into those attributes?

pkcs11Session.CreateObject(attributes);

【问题讨论】:

  • 具体问题是什么?你需要什么属性?或者您如何从AsymmetricAlgorithm 对象中获取实际密钥?
  • 两者,我猜。我可以通过将 AsymmetricAlgorithm 对象转换为 RSACryptoServiceProvider 来获取“CSP blob”,但是,我不知道如何将 CSP blob 转换为对象属性列表,这些属性在 PKCS#11 方面构成键.

标签: .net pkcs#11


【解决方案1】:

如果您的问题是关于如何从X509Certificate2.PrivateKey 中实际提取私钥详细信息,这里是一个带有 PFX 文件的示例:

var certificate = new X509Certificate2(@"self-signed.pfx", "password", X509KeyStorageFlags.Exportable);
var rsaPrivateKey = certificate.GetRSAPrivateKey();
var parameters = rsaPrivateKey.ExportParameters(true);

但是,确切的代码取决于几件事,即

  • 证书是如何创建的以及它是否实际包含私钥引用(在这种情况下,是的,从 PFX 导入),
  • 密钥是否可导出(在本例中为是),以及
  • 私钥的类型(在本例中为 RSA)。

我无法帮助您将其转换为您的库所需的属性,不过,也许其他人可以在这里插话。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-19
  • 1970-01-01
  • 2014-03-13
  • 2011-10-08
相关资源
最近更新 更多