You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tpm2-pkcs11与OpenSSL签名文件遇密钥找不到问题求助

解决方案

1. 修正OpenSSL配置文件

报错核心原因是OpenSSL 3的模块化架构要求显式加载base和default provider,才能支持PKCS11密钥URI的解析与加载。修改你的tpm2-pkcs11.openssl.conf:

openssl_conf = openssl_init

[openssl_init]
providers = provider_section
alg_section = algorithm_section

[provider_section]
# 必须加载基础provider以支持密钥存储加载
base = base_section
default = default_section
pkcs11 = pkcs11_section

[base_section]
activate = 1

[default_section]
activate = 1

[pkcs11_section]
module = /usr/lib/libtpm2_pkcs11.so
# 可选:配置默认PIN,避免命令行传递
# pin = testuserpin

[algorithm_section]
default_properties = ?provider=pkcs11

[ req ]
distinguished_name = req_dn
string_mask = utf8only
utf8 = yes

[ req_dn ]
commonName = Sample Config

2. 修正签名命令

  • 移除命令中错误的-provider tpm2参数,依赖配置文件加载的完整provider集合
  • 修正slot编号:你的pkcs11-tool输出显示Slot 1处于未初始化状态,但你用--slot=1能列出密钥,这是典型的slot编号混淆问题。实际密钥应存储在已初始化的Slot 0(test token)中
  • 正确传递PIN:可在URI中直接指定,或依赖配置文件的预设值

修正后的命令示例:

OPENSSL_CONF=$HOME/tpm2-pkcs11.openssl.conf openssl pkeyutl -sign -inkey 'pkcs11:slot-id=0;token=test token;type=private;object=rsakey;pin-value=testuserpin' -in data.txt -out data.sig

若配置文件已指定PIN,可简化为:

OPENSSL_CONF=$HOME/tpm2-pkcs11.openssl.conf openssl pkeyutl -sign -inkey 'pkcs11:slot-id=0;token=test token;type=private;object=rsakey' -in data.txt -out data.sig

3. 验证密钥识别状态

执行以下命令,确认OpenSSL能正确识别TPM中的密钥:

OPENSSL_CONF=$HOME/tpm2-pkcs11.openssl.conf openssl list -objects -provider pkcs11 -storetype pkcs11

若输出中能看到rsakey的私钥条目,说明配置与URI均正确。

关键问题总结

  • OpenSSL 3必须加载base和default provider才能处理PKCS11这类外部密钥存储,否则会触发"找不到store loader"错误
  • Slot编号混淆是核心诱因:未初始化的Slot 1不可能存储密钥,实际密钥在已初始化的Slot 0中

内容的提问来源于stack exchange,提问作者Zapoux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 08:54:53