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

如何让curl像OpenSSL一样通过句柄访问TPM2密钥建立HTTPS连接?

问题解答

Q1:curl是否支持像OpenSSL那样使用句柄?

curl不直接支持通过handle:格式直接调用TPM2内置密钥。curl的--key参数仅支持本地密钥文件路径或PKCS#11 URI格式,没有原生适配OpenSSL的句柄调用方式。

Q2:如何实现curl结合TPM2内置密钥建立HTTPS连接?

借助OpenSSL 3.0的Provider机制,通过tpm2-openssl工具桥接TPM2密钥与curl,具体步骤如下:

步骤1:配置OpenSSL加载tpm2 Provider

编辑你的OpenSSL配置文件(例如/root/openssl.cnf),添加tpm2 Provider的配置项:

[provider_sect]
default = default_sect
tpm2 = tpm2_sect

[default_sect]
activate = 1

[tpm2_sect]
activate = 1
# 替换为你的libtpm2.so实际路径,可通过`find / -name libtpm2.so`查找
module = /usr/lib/x86_64-linux-gnu/ossl-modules/libtpm2.so

步骤2:使用curl调用TPM2密钥建立连接

通过环境变量指定OpenSSL配置,同时传入证书、TPM2密钥句柄URI及密码:

OPENSSL_CONF="/root/openssl.cnf" \
curl \
--cert "/root/ClientCertificate.pem" \
--key "handle:${HANDLE}?pass" \
--pass "${PASSWORD}" \
--cacert "${DEVICE_CERTIFICATE}" \
--tlsv1.3 \
https://你的后端服务器地址

其中${HANDLE}是你通过tpm2_evictcontrol获取的TPM2持久化密钥句柄,${PASSWORD}是密钥保护密码。

备选方案:通过PKCS#11 URI调用

若上述方式存在兼容性问题,可通过tpm2-pkcs11将TPM2密钥导入PKCS#11 token,再用PKCS#11 URI供curl调用:

  1. 创建并配置PKCS#11 token:
# 初始化TPM2 PKCS#11存储
tpm2_ptool init --primary-auth "${PASSWORD}" --path /tmp/tpm2_pkcs11
# 添加token
tpm2_ptool addtoken --pid=1 --sopin "你的SOPIN密码" --userpin "你的USERPIN密码" --label "tpm-token" --path /tmp/tpm2_pkcs11
# 将密钥添加到token
tpm2_ptool addkey --algorithm rsa2048 --label "tpm-token" --userpin "你的USERPIN密码" --path /tmp/tpm2_pkcs11
  1. 用curl调用PKCS#11 URI:
curl \
--cert "/root/ClientCertificate.pem" \
--key "pkcs11:model=SLB9670;manufacturer=Infineon;serial=00;token=tpm-token;object=rsa2048" \
--pass "你的USERPIN密码" \
--cacert "${DEVICE_CERTIFICATE}" \
--engine pkcs11 \
https://你的后端服务器地址

注意事项

  • 确保tpm2-openssl和tpm2-pkcs11包已正确安装
  • 验证OpenSSL配置中的libtpm2.so路径是否与实际安装路径一致
  • 你的curl版本(7.81.0)基于OpenSSL 3.0.2,已满足Provider机制的使用要求

内容的提问来源于stack exchange,提问作者TR-eenet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:53:28