使用c#从智能卡读取ssl私钥

时间:2016-05-17 14:42:08

标签: c# linux windows openssl opensc

我有一个带读卡器的智能卡,我决定在后者中实施客户端证书。

存储在卡中的私钥和公钥存储在服务器中。

应用场景是这样的:

  1. 应用程序将帧发送到Linux服务器
  2. Linux服务器使用ramdom编号回答
  3. 应用程序从(智能卡或pem文件)读取私钥并加密收到的随机数并将结果发送到服务器。
  4. 服务器尝试通过公钥解密发送的加密字符串(存储在服务器中的pem文件)=>如果成功访问被授予,则访问被拒绝。
  5. 在我的应用程序中,有一种证书身份验证模式(静态文件.pem),并且还使用私钥(也是静态.pem)。我使用openssl-net函数(例如FromPrivateKey(string pem, string password)PrivateEncrypt(byte[] msg, RSA.Padding padding))来读取私钥并加密数据以发送到服务器。

    所需要的问题是,自从我的pem文件以来,我没有先验的方法将我的私钥导出到我的智能卡中。

    经过大量研究后,我明白我应该使用而不是这些函数类型函数:“ENGINE_load_private_key”,引擎“pkcs11”。

    所以我看到了几个openssl配置的例子(例如http://openssl.6102.n7.nabble.com/Private-Key-from-Windows-Cert-Store-td20720.html)和pkcs11(opensc,engine_pkcs11等等。)麻烦的是这些配置是针对Linux的。

    实际上,我需要开发一个客户端应用程序Windows WPF(用C#编写),它可以从智能卡或PEM文件中读取私钥。

0 个答案:

没有答案