本文为 SPIRE 官方文档 plugin_server_nodeattestor_tpm_devid.md 的中文译本,以英文原文为准。 🔗 穿越源码分析:Server 详解 · NodeAttestor
Server 插件:NodeAttestor "tpm_devid"
必须与 Agent 侧 tpm_devid 插件配合使用
tpm_devid 插件用于对那些拥有 TPM、并通过带外(out-of-band)机制预置了 DevID 证书的节点进行认证。
插件会向 agent 发起两次挑战:
持有性证明(proof-of-possession)挑战:用于验证节点确实持有与 DevID 证书相对应的私钥。此外,server 还会验证 DevID 证书是否根植于一组受信任的 CA。
驻留性证明(proof-of-residency)挑战:用于证明 DevID 密钥对是在 TPM 中生成并驻留于其中的。此外,server 还会通过验证背书证书(endorsement certificate)是否根植于一组受信任的厂商(manufacturer)CA,来确认该 TPM 的真实性。
插件生成的 SPIFFE ID 基于证书指纹(certificate fingerprint),该指纹定义为身份证书的 ASN.1 DER 编码的 SHA1 哈希。
SPIFFE ID 的格式为:
xml
spiffe://<trust_domain>/spire/agent/tpm_devid/<fingerprint>| Configuration | Description | Default |
|---|---|---|
devid_ca_path | 磁盘上用于 DevID 校验的受信任 CA 证书路径。该文件必须包含一个或多个 PEM 块,构成用于信任链(chain-of-trust)校验的受信任根 CA 集合。 | |
endorsement_ca_path | 磁盘上受信任厂商 CA 证书的路径。该文件必须包含一个或多个 PEM 块,构成用于信任链校验的受信任厂商 CA 集合。 |
一份示例配置:
hcl
NodeAttestor "tpm_devid" {
plugin_data {
devid_ca_path = "/opt/spire/conf/server/devid-cacert.pem"
endorsement_ca_path = "/opt/spire/conf/server/endorsement-cacert.pem"
}
}Selectors(选择器)
| Selector | Example | Description |
|---|---|---|
| Subject common name | tpm_devid:subject:cn:example.org | 主体(Subject)的通用名(common name)。 |
| Issuer common name | tpm_devid:issuer:cn:authority.org | 签发者(Issuer)的通用名。 |
| SHA1 fingerprint | tpm_devid:fingerprint:9ba51e2643bea24e91d24bdec3a1aaf8e967b6e5 | PoP 链中每个证书(不含叶子证书)的 SHA1 指纹,以十六进制字符串表示。 |