1

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

出于测试目的,在不使用智能卡的情况下,以下简短代码可以顺利运行:

....
(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 中的某些设置?

谢谢收听!

4

0 回答 0