openssl - 在 HSM 上使用带有私钥的 openssl 进行签名
问题描述
我正在使用 OpenSC/libp11 访问 HSM。我需要使用生成并存储在 HSM 上的私钥对一些数据进行签名。从 libp11 我使用以下功能:
EVP_PKEY *PKCS11_get_private_key(PKCS11_KEY *key);
获取指向表示私钥的 EVP_PKEY 结构的指针。接下来我使用 openssl 函数:
int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *d, size_t cnt);
int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen);
执行签名操作。所有这些函数都返回成功,甚至相应的 EVP_DigestVerifyInit/Update/Final 函数也返回成功。
我的问题是,就我而言,签名操作实际上是由 HSM 执行的吗?我没有显式加载 openssl pkcs11 引擎(将 NULL 传递给 EVP_DigestSignInit 中的 ENGINE* arg),我什至没有在我的 openssl conf 中添加引擎路径。如果没有使用 pkcs11 引擎,那么为什么 sign/veriy 函数会返回成功?
解决方案
推荐阅读
- linux - 在 Angstrom 的 WSL 中通过 NFS 挂载 rootfs
- amazon-web-services - Rust:使用 Rusoto(或类似的)AWS lambda 获取 POST 数据?
- gatling - Gatling 为每个用户/文件运行场景
- postgresql - postgresql 查询等效于弹性搜索中具有扩展边界的日期直方图
- java - 从集合列表中提取相似集合的解决方案
- python - Socket.io 客户端不会显示给所有用户
- sql - 从会话日志中计算并发会话数 (SQL / BigQuery)
- oauth-2.0 - 如何在 Stata 中的 Box 上读取 CSV 文件
- java - eclipse中是否应该将WebContent文件夹添加到BuildPath?
- javascript - 如何验证 React 组件中的条件表单字段?