首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用libp11和pkcs11 11引擎读取私钥的区别

用libp11和pkcs11 11引擎读取私钥的区别
EN

Stack Overflow用户
提问于 2016-10-17 09:53:39
回答 1查看 1K关注 0票数 2

我试图使用存储在智能卡上的凭据在C++中实现SSL客户端身份验证。

本质上,这意味着使用openssl库使用证书和私钥初始化SSL上下文,然后将此上下文用于所有未来的https连接。

我遇到的帮助我的库是libp11和它的pkcs11 11引擎模块,在这里可以找到:https://github.com/OpenSC/libp11

在这样一个场景中,我的代码实际上与我们的key服务器的工作方式是通过libp11列出和检索证书,私钥是通过id使用pkcs11引擎检索的:

代码语言:javascript
复制
PKCS11_enumerate_certs(slot->token, &certs, &ncerts);

X509 *cert = certs[0].x509;

EVP_PKEY *pkey = ENGINE_load_private_key(pkcs11_eng, "pkey_id", NULL, NULL);

if (!SSL_CTX_use_certificate(context->ctx, cert )) {
    throw SSLError::getLastError();
}
if (!SSL_CTX_use_PrivateKey(context->ctx, pkey )) {
    throw SSLError::getLastError();
}
if (!SSL_CTX_check_private_key(context->ctx)) {
    throw SSLError::getLastError();
}

但是,为了保持一致性和保持简单,我们倾向于在这两种检索中使用libp11,因为这也将消除使用整个其他组件(pkcs11 11-engine)。

我遇到的问题是,当使用以下方法检索pkey时:

代码语言:javascript
复制
PKCS11_KEY *key = PKCS11_find_key(&certs[0]);
EVP_PKEY pkey = PKCS11_get_private_key(key)

并初始化ssl,检查通过,但SSL_connect()函数引发以下错误:

error:80009005:Vendor defined:PKCS11_rsa_encrypt:General Error

基本上,私钥在通过引擎检索时工作,但在使用libp11时会引发错误,这很奇怪,因为查看github上的引擎代码,我注意到正在进行的p11调用与我所使用的相同。

如果有人在这个话题上有任何经验,并且可能知道这里发生了什么,这将极大地帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 10:20:21

这是我的错。我用我们自己的dll初始化了pkcs11引擎,实现了pkcs11,但是在初始化p11时使用了opensc。我想这里学到的教训是,在复制/粘贴代码之前,一定要仔细阅读。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40083317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档