c# - 如何在没有 PIN 提示的情况下通过智能卡读卡器访问 PKI 证书的私钥?

标签 c# .net cryptography smartcard pki

我需要访问存储在卡中的 PKI 证书的私钥。我可以通过智能卡读卡器访问它。每当我尝试使用私钥时,第一次我总是必须在 PIN 提示符中输入 PIN 码。

是否可以在没有 PIN 提示的情况下以编程方式输入 PIN 并使用私钥?我需要创建 WCF 服务,该服务将使用 PKI 证书对输入数据进行签名,并将它们签名后返回给用户。

以这种方式,我目前尝试使用 C# 使用 PKI 证书对数据进行签名:

var cmsSigner = new CmsSigner(x509certificate2); // certificate fetched from store
var contentInfo = new ContentInfo(dataToSign);
var signedCms = new SignedCms(contentInfo, true);
signedCms.ComputeSignature(cmsSigner, false);

PIN 提示总是在第一个 ComputeSignature 方法调用时打开。如何通过 PIN 直接访问私钥,避免通过提示手动输入 PIN?

最佳答案

归结为两种情况:

  1. 硬件 CSP(加密服务提供商)遵守 Microsoft 定义的 API 并正确实现 CspParameters;
  2. 当需要私钥操作时,硬件 CSP 本身会为 PIN 生成一个弹出窗口。

在第一种情况下,您应该阅读 How to: Access Hardware Encryption Devices然后尝试通过 a KeyPassword给 CSP。

在后一种情况下,可能需要联系创建 CSP 的公司并询问哪些选项可用。幸运的是,此选项通常不再实现。

关于c# - 如何在没有 PIN 提示的情况下通过智能卡读卡器访问 PKI 证书的私钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34360966/

相关文章:

c# - 如何反序列化具有相同名称但类型不同的 API 响应

c# - string.IsNullOrEmpty(string) 与 string.IsNullOrWhiteSpace(string)

.net - 为要连接的 Windows Phone 7 应用程序构建服务的最佳可扩展架构是什么?

java - 每次使用 DES 加密 java 代码都会出现相同的错误

c# - 如何存储/检索 RSA 公钥/私钥

cryptography - 获得 ECDSA 签名的固定长度字节表示的正确方法是什么?

c# - 字符串如何在 C# 中终止?

c# - 用于向 Web 服务发出 http post 请求的多线程

c# - WCF 多进程处理/设计

c# - 为什么 Windows 窗体应用程序中的窗体类被声明为部分的?