3

我正在尝试向我编写的站点发出 Web 请求,该站点要求客户端提供证书以进行身份​​验证。

具体来说,我正在尝试编写一个可以发出 Web 请求的 C#(或 Visual C++)应用程序,但在我的 HSM 上使用证书和私钥。

我意识到这里有一个类似的问题,但它没有收到我需要的答案。

我已经可以:

  • P/Invoke 我的本机 pkcs#11 库(一个 DLL)、登录、在 HSM 上查找/创建对象
  • 使用 pkcs#11 界面,我可以阅读找到 HSM 上的 X509 证书

我不能:

  • 从 HSM 导出私钥。它不可导出。

所以我需要一种从我的应用程序发出 Web 请求并说“对于握手,使用我的 HSM 上的 X509 和 Private Key 对象”的方法。

请不要建议我“检查”诸如 NCryptoki、Bouncy Castle 等之类的东西——我已经可以使用它们来制作我的 Windows 应用程序。与 HSM 通信。我需要的是如何制作 Windows 应用程序。在 HSM 上的凭据上下文下发出 Web 请求。

4

1 回答 1

1

当您通过本机调用获得证书时,pkcs#11您没有附加私钥。私钥进行解密,所以我们需要它。要解决这个问题,您有两个选择:

  1. 几乎所有设备在安装过程中都会注册一个加密服务提供者。例如,您可以RSACryptoServiceProvider在该提供程序上包装 a 并将其分配给PrivateKey您的证书的属性。

  2. 某些设备驱动程序将 HSM 中的证书与个人证书存储同步。如果您从 Windows 商店中选择证书,它将自动附加一个加密服务提供程序。所以丢失的私钥问题消失了。您需要做的就是将证书添加到ClientCertificates集合中。

你可以想象我会推荐第二种选择(如果有的话)。

于 2017-08-27T11:03:36.010 回答