使用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和defaultprovider才能处理PKCS11这类外部密钥存储,否则会触发"找不到store loader"错误 - Slot编号混淆是核心诱因:未初始化的Slot 1不可能存储密钥,实际密钥在已初始化的Slot 0中
内容的提问来源于stack exchange,提问作者Zapoux
相关产品推荐
相关产品推荐

