【发布时间】:2018-08-22 13:48:37
【问题描述】:
我遇到了与 OpenSSL 的 CAPI 引擎发生冲突的问题:在正常情况下,我可以使用存储在我的智能卡上的私钥来使用 OpenSSL 建立 SSL 连接。简化代码:
EVP_PKEY pkey = ENGINE_load_private_key(my_engine, subject_name, 0, 0);
void * pdata = my_certificate_context.pbCertEncoded;
X509 * cert = d2i_X509(0, &pdata, my_certificate_context.cbCertEncoded);
SSL_CTX_use_certificate(my_ssl_context, cert);
SSL_CTX_use_private_key(my_ssl_context, pkey);
但是,有一个问题:如果碰巧我有多个具有给定主题名称的证书,CAPI 引擎将选择其中一个证书,它是否选择正确的证书取决于运气。对我来说幸运的是,它选择了错误的那个,这样就提醒了我这个问题。查看源代码,CAPI 引擎似乎支持更复杂的密钥搜索方案,因此我可以指定主题名称应该在特定的证书存储中找到。因为我有正确的 PCCERT_CONTEXT,所以我可以轻松获得证书存储的名称,但我不知道如何告诉 CAPI 引擎使用该证书存储。这里的文档非常粗略,我找不到一个例子。我希望它可以使用 FENGINE_ctrl_cmd_string 来完成,但我不知道该怎么做。谁能帮帮我,好吗?
【问题讨论】:
标签: ssl openssl certificate collision