使用libcurl和智能卡进行SSLv3相互身份验证

时间:2016-09-12 19:55:15

标签: libcurl smartcard private-key handshake sslv3

我需要一些帮助来建立一个通信渠道,使用带有相互身份验证的SSLv3,libcurl和智能卡来使用Web服务,它将存储客户端证书,密钥对,并负责签名,加密等。< / p>

出于测试目的,不使用智能卡,以下简要代码顺利运行:

....
(SOAP message configurations)
....

curl_easy_setopt (curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
curl_easy_setopt (curl, CURLOPT_SSLVERSION, 3);
curl_easy_setopt (curl, CURLOPT_SSL_VERIFYPEER, 1);

curl_easy_setopt (curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_easy_setopt (curl, CURLOPT_SSLCERT, "clientCertificateFile");
curl_easy_setopt (curl, CURLOPT_KEYPASSWD, "testPrivateKeyPass");
curl_easy_setopt (curl, CURLOPT_SSLKEY, "testPrivateKeyFile");
curl_easy_setopt (curl, CURLOPT_CAINFO, "CAcertificateFile");
curl_easy_setopt (curl, CURLOPT_URL, "URLtoWebService");

curl_easy_perform (curl);

运行此代码后,我可以使用SSLv3建立通信并从Web服务获得预期的响应。但是,我需要使用智能卡建立此安全通道。我可以免费访问以下信息:

  • “clientCertificateFile” - 以PEM格式存储在智能卡上。它可以通过访问功能读取。
  • “CAcertificateFile” - 以PEM格式存储在磁盘上。它可以通过访问功能读取。
  • “URLtoWebService” - 存储在应用程序中。

“testPrivateKeyFile”和“testPrivateKeyPass”是仅用于测试的临时文件,应由智能卡替换。

我的疑问是:如何使用智能卡替换libcurl设置过程中的私钥和密码?

智能卡不允许按预期访问私钥,只允许访问公钥。我可以使用私钥发送到要签名或加密的智能卡数据,并获得生成的缓冲区。

有没有办法重定向部分SSLv3连接握手才能使用我的智能卡? lib ssl或libcurl中的一些设置?

感谢收听!

0 个答案:

没有答案