本文为 SPIRE 官方文档 plugin_agent_nodeattestor_tpm_devid 的中文译本,以英文原文为准。 🔗 穿越源码分析:Agent 详解 · NodeAttestor
Agent 插件:NodeAttestor "tpm_devid"
必须与服务端 tpm_devid 插件配合使用
tpm_devid 插件为拥有 TPM、且已通过带外(out-of-band)机制预置了 LDevID 证书的节点提供认证数据。
该插件响应 Server 请求的两种挑战:
持有证明(proof-of-possession)挑战:Agent 接收并签名一个随机数(nonce),以证明它持有与呈现给 Server 的 LDevID 证书相对应的私钥。
驻留证明(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_path | DevID 证书在磁盘上的路径,PEM 格式。 | |
devid_priv_path | 由 TPM 生成的私钥 blob 的路径。 | |
devid_pub_path | 由 TPM 生成的公钥 blob 的路径。 | |
endorsement_hierarchy_password | TPM 背书层级(endorsement hierarchy)密码。 | "" |
owner_hierarchy_password | TPM 所有者层级(owner hierarchy)密码。 | "" |
devid_password | DevID 密钥密码(必须与预置过程中所用的密码相同) | "" |
一个示例配置:
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 进行认证。