基于TPM 2.0的TLS握手在RSA-4k服务器密钥下失败(超出范围)
基于TPM 2.0的mTLS连接问题
环境说明
我有一台搭载TPM 2.0的嵌入式客户端,需要使用TPM存储的私钥通过mTLS连接远程服务器,客户端持有服务器信任的CA签发的PEM格式文件型客户端证书。为对接TPM,计划采用OpenSSL TPM Provider(tpm2-openssl)。当前测试环境为Xubuntu 23.10 VirtualBox虚拟机,使用模拟TPM 2.0。
正常场景
当服务器使用RSA-2048密钥启动时,客户端通过OpenSSL s_server和s_client可正常建立连接:
openssl s_server -accept 4443 -www -key server-2k.key -cert server-2k.crt openssl s_client -provider tpm2 -provider default -propquery '?provider=tpm2' \ -connect localhost:4443 -CAfile ca.crt -cert client.crt -key client-tpm.priv
异常场景
切换为RSA-4096服务器密钥(与实际服务器配置一致)时,客户端出现TPM参数超出范围错误:
服务器启动命令:
openssl s_server -accept 4443 -www -key server-4k.key -cert server-4k.crt
客户端连接报错:
WARNING:esys:src/tss2-esys/api/Esys_LoadExternal.c:314:Esys_LoadExternal_Finish() Received TPM Error ERROR:esys:src/tss2-esys/api/Esys_LoadExternal.c:108:Esys_LoadExternal() Esys Finish ErrorCode (0x000002c4) 40F71A26BC730000:error:4000000C:tpm2::cannot load key::-1:708 tpm:parameter(2):value is out of range or is not correct for the context 40F71A26BC730000:error:0A080006:SSL routines:tls_process_key_exchange:EVP lib:../ssl/statem/statem_clnt.c:2284:
另外,使用TPM私钥为RSA-4096客户端密钥签名CSR时,也出现相同的Load_External()函数错误:
openssl x509 -req -provider tpm2 -provider default -in test-4k.csr \ -CA ca.crt -CAkey ca.priv -out test-4k.crt
疑问
我推测问题源于TPM 2.0不支持RSA-4096,可能是TPM Provider尝试将服务器公钥加载到TPM时被拒绝。但此前使用旧版OpenSSL Engine(tpm2-tss-engine)的方案从未出现该问题,因此有两个疑问:
- 关于RSA-4096服务器密钥导致连接失败的推测是否正确?
- 为何旧版OpenSSL Engine API可以正常处理该场景?
版本信息
$ openssl version OpenSSL 3.0.10 1 Aug 2023 (Library: OpenSSL 3.0.10 1 Aug 2023) $ sudo tpm2_getcap properties-fixed TPM2_PT_FAMILY_INDICATOR: raw: 0x322E3000 value: "2.0" ... TPM2_PT_REVISION: raw: 0xA4 value: 1.64 ... TPM2_PT_MANUFACTURER: raw: 0x49424D00 value: "IBM"
内容的提问来源于stack exchange,提问作者Clemens
相关产品推荐
相关产品推荐

