Skip to content

本文为 SPIRE 官方文档 plugin_agent_nodeattestor_tpm_devid 的中文译本,以英文原文为准。 🔗 穿越源码分析:Agent 详解 · NodeAttestor

Agent 插件:NodeAttestor "tpm_devid"

必须与服务端 tpm_devid 插件配合使用

tpm_devid 插件为拥有 TPM、且已通过带外(out-of-band)机制预置了 LDevID 证书的节点提供认证数据。

该插件响应 Server 请求的两种挑战:

  1. 持有证明(proof-of-possession)挑战:Agent 接收并签名一个随机数(nonce),以证明它持有与呈现给 Server 的 LDevID 证书相对应的私钥。

  2. 驻留证明(proof-of-residency)挑战:Agent 接收并求解一个专门构造的加密挑战,以向 Server 证明该 LDevID 密钥对是在某个受信任厂商(trusted vendor)的 TPM 中生成并驻留其中的。

驻留证明的校验过程涉及创建一个临时的认证密钥(attestation key)。目前,无论 DevID 使用的是 ECC 还是 RSA 密钥类型,该认证密钥始终是 RSA 密钥。

服务端 tpm_devid 插件所生成的 SPIFFE ID 基于 LDevID 证书指纹(fingerprint),该指纹定义为身份证书 ASN.1 DER 编码的 SHA1 哈希值。

该 SPIFFE ID 形如:

xml
spiffe://<trust_domain>/spire/agent/tpm_devid/<fingerprint>
配置项说明默认值
tpm_device_path指向 TPM 2.0 设备的路径。在 Windows 上运行时不使用该项。若未设置,插件将尝试自动检测 TPM 路径
devid_cert_pathDevID 证书在磁盘上的路径,PEM 格式。
devid_priv_path由 TPM 生成的私钥 blob 的路径。
devid_pub_path由 TPM 生成的公钥 blob 的路径。
endorsement_hierarchy_passwordTPM 背书层级(endorsement hierarchy)密码。""
owner_hierarchy_passwordTPM 所有者层级(owner hierarchy)密码。""
devid_passwordDevID 密钥密码(必须与预置过程中所用的密码相同)""

一个示例配置:

hcl
    NodeAttestor "tpm_devid" {
        plugin_data {
            devid_cert_path = "/opt/spire/conf/agent/devid.crt.pem"
            devid_priv_path = "/opt/spire/conf/agent/devid.priv.blob"
            devid_pub_path = "/opt/spire/conf/agent/devid.pub.blob"
        }
    }

兼容性注意事项

  • 该插件设计用于 TPM 2.0,不支持 TPM 1.2。
  • 仅支持本地设备身份(local device identities,LDevIDs)。不支持使用 IDevID 进行认证。