libcurl:如何使用TPM私钥进行相互SSL身份验证

时间:2020-02-22 09:28:44

标签: ssl openssl tpm ocsp curl

我使用C libcurl库。 我需要将OCSP装订与相互认证结合在一起。为此,我将在以下示例中进行建模。但是,我需要将客户证书的私钥存储在TPM芯片中。您知道如何使用tpm2-tss-engine吗?谢谢你的帮助。

https://curl.haxx.se/libcurl/c/smtp-ssl.html https://curl.haxx.se/libcurl/c/CURLOPT_SSLCERT.html

1 个答案:

答案 0 :(得分:1)

我可以通过openssl s_client使用存储在TPM中的密钥(也许可以使用curl),但是可以发出HTTPS请求并接收响应。

openssl允许您从TPM中读取密钥。您可以使用命令s_client通过TCP连接,然后发送HTTP请求。

示例命令如下:

文件:http_request.txt(末尾有两个换行符)

GET /url/path HTTP/1.0
Host: hostname.com


cat http_request.txt | \
openssl s_client \
  -nocommands \
  -ign_eof \
  -msgfile /dev/null \
  -quiet \
  -keyform engine \
  -engine pkcs11 \
  -cert mycertificate.pem \
  -CAfile root.ca.pem \
  -key 'pkcs11:model=SWTPM;manufacturer=Intel;token=mytoken;object=myobject;type=private;pin-value=mypin' \
  -connect hostname.com:443

这使我可以使用TPM向AWS IoT:iot:AssumeRoleWithCertificate发出请求,假设密钥是磁盘上的文件:https://docs.aws.amazon.com/iot/latest/developerguide/authorizing-direct-aws.html