TrustRuntime 架构设计
| 文档版本 | V1.0 |
| 编写日期 | 2026-06-29 |
1. 系统架构概览
1.1 整体架构图
graph TB
subgraph "机密计算虚机 (Confidential VM)"
subgraph "TrustRuntime Service"
MAIN[main.rs<br/>进程入口]
subgraph "Framework Layer"
CORE[core<br/>进程管理]
CONFIG[config<br/>配置解析]
LOG[logger<br/>日志系统]
PM[plugin_manager<br/>插件管理]
TR[transport<br/>传输层抽象]
COMM[communication<br/>通信层]
MSG[message<br/>报文处理]
CERT[cert<br/>证书工具]
end
subgraph "Trustring Plugin"
HANDLER[handler<br/>业务路由]
SIGN[sign<br/>CMS签名]
VERIFY[verify<br/>CMS验签]
CERTLD[cert_loader<br/>证书加载]
ERRMAP[error_code_mapper<br/>错误码映射]
end
end
subgraph "系统依赖"
OPENSSL[OpenSSL<br/>TLS/CMS]
SYSTEMD[systemd<br/>服务管理]
VSOCK[vsock<br/>虚拟机通信]
end
subgraph "文件系统"
CERTS[/etc/cert/cms/<br/>证书目录]
CFG[/etc/trustruntime/<br/>配置目录]
LOGDIR[/var/log/trustruntime/<br/>日志目录]
end
end
subgraph "外部客户端"
CLIENT[Client Application<br/>业务应用]
end
MAIN --> CORE
MAIN --> CONFIG
MAIN --> LOG
MAIN --> PM
MAIN --> COMM
PM --> HANDLER
HANDLER --> SIGN
HANDLER --> VERIFY
HANDLER --> CERTLD
SIGN --> OPENSSL
VERIFY --> OPENSSL
CERTLD --> CERT
CERTLD --> CERTS
COMM --> VSOCK
COMM --> OPENSSL
COMM --> MSG
CORE --> SYSTEMD
LOG --> LOGDIR
CONFIG --> CFG
CLIENT -->|TLS over vsock| COMM
1.2 部署架构图
graph LR
subgraph "宿主机"
LAUNCHER[trt_launcher<br/>机密虚机启动器]
end
subgraph "机密计算虚机"
TRUST[TrustRuntime<br/>签名验签服务]
APP[业务应用<br/>客户端]
end
LAUNCHER -->|映射注入证书| TRUST
APP -->|vsock CID:3| TRUST
TRUST -->|返回签名结果| APP
2. 模块说明
2.1 Framework 层(通用进程框架)
| 模块 |
职责 |
关键 trait/结构体 |
core |
进程生命周期管理、信号处理、证书巡检 |
Daemon, SignalHandler, CertificateChecker |
config |
TOML 配置解析 |
AppConfig |
logger |
日志初始化与管理 |
init_logger() |
plugin_manager |
插件生命周期管理 |
Plugin, PluginContext, PluginManager |
transport |
传输层抽象接口 |
TransportLayer, DataHandler, TransportError |
communication |
vsock 通信 + TLS |
VsockTransport(实现 TransportLayer) |
message |
报文解析/构造 |
VsockHeader, VsockMessage |
cert |
证书加载工具 |
PEM/DER 双格式支持 |
2.2 Trustring 插件(业务实现)
| 模块 |
职责 |
关键功能 |
handler |
业务路由 |
注册 0x10/0x12/0x14 handler |
sign |
CMS 签名 |
ECC-256 签名实现 |
verify |
CMS 验签 |
验签 + 证书链校验 + CRL 校验 |
cert_loader |
证书管理 |
加载签名/验签证书 |
error_code_mapper |
错误映射 |
OpenSSL ErrorStack → result code |
2.3 模块依赖关系
graph TB
MAIN[trustruntime<br/>binary]
FW[framework<br/>library]
TS[trustring<br/>library]
MAIN --> FW
MAIN --> TS
TS --> FW
subgraph framework
CORE[core]
CONFIG[config]
LOG[logger]
PM[plugin_manager]
TR[transport]
COMM[communication]
MSG[message]
CERT[cert]
end
subgraph trustring
HDL[handler]
SGN[sign]
VRF[verify]
CLD[cert_loader]
ECM[error_code_mapper]
end
COMM --> MSG
COMM --> CERT
COMM --> TR
PM --> TR
CORE --> PM
CORE --> LOG
CORE --> CONFIG
HDL --> SGN
HDL --> VRF
HDL --> CLD
SGN --> CLD
VRF --> CLD
CLD --> CERT
VRF --> ECM
SGN --> ECM
3. 数据流图
3.1 签名流程(0x10 → 0x11)
sequenceDiagram
participant C as Client
participant VS as VsockTransport
participant HD as SignHandler
participant SG as Sign模块
participant CL as CertLoader
participant SSL as OpenSSL
C->>VS: TLS握手
VS->>C: 双向认证成功
C->>VS: 请求报文 (type=0x10)
Note over VS: 校验version/len
VS->>HD: handle(data)
HD->>HD: 解析JSON
HD->>CL: 获取签名证书+私钥
CL-->>HD: CertPair
HD->>CL: 获取证书ID (SKID)
CL-->>HD: SubjectKeyID
HD->>SG: sign(data + cert_id)
SG->>SSL: CMS_sign()
SSL-->>SG: signed_data (DER)
SG-->>HD: Base64编码
HD-->>VS: JSON响应
VS-->>C: 响应报文 (type=0x11)
3.2 验签+签名流程(0x12 → 0x13)
sequenceDiagram
participant C as Client
participant VS as VsockTransport
participant HD as VerifySignHandler
participant VF as Verify模块
participant SG as Sign模块
participant CL as CertLoader
participant SSL as OpenSSL
C->>VS: TLS握手
VS->>C: 双向认证成功
C->>VS: 请求报文 (type=0x12)
VS->>HD: handle(data)
HD->>HD: 解析JSON
rect rgb(200, 230, 200)
Note over HD: 验签步骤
HD->>VF: verify(to-verify)
VF->>SSL: CMS_verify()
SSL-->>VF: 验签结果
VF->>VF: 证书链校验
VF->>VF: CRL校验
VF-->>HD: result=0 (通过)
end
rect rgb(230, 200, 200)
Note over HD: 签名步骤
HD->>CL: 获取签名证书
HD->>SG: sign(new_data + to-sign.id)
SG->>SSL: CMS_sign()
SSL-->>SG: signed_data
SG-->>HD: Base64编码
end
HD-->>VS: JSON响应
VS-->>C: 响应报文 (type=0x13)
3.3 验签流程(0x14 → 0x15)
sequenceDiagram
participant C as Client
participant VS as VsockTransport
participant HD as VerifyHandler
participant VF as Verify模块
participant CL as CertLoader
participant SSL as OpenSSL
C->>VS: TLS握手
VS->>C: 双向认证成功
C->>VS: 请求报文 (type=0x14)
VS->>HD: handle(data)
HD->>HD: 解析JSON
HD->>VF: verify(to-verify)
VF->>SSL: CMS_verify()
SSL-->>VF: 验签结果
VF->>VF: 证书链校验
VF->>VF: CRL校验
VF->>CL: 获取本地证书ID
CL-->>VF: LocalSKID
VF->>VF: 判断证书身份
alt 公钥相同
VF-->>HD: result=2 (证书身份冲突)
else 公钥不同 且 id匹配
VF-->>HD: result=0 (本节点签名)
else 公钥不同 且 id不匹配
VF-->>HD: result=1 (其他节点签名)
end
HD-->>VS: JSON响应
VS-->>C: 响应报文 (type=0x15)
4. 时序图
4.1 服务启动时序
sequenceDiagram
participant SYS as systemd
participant MAIN as main.rs
participant CFG as config
participant LOG as logger
participant CHK as cert_checker
participant VS as VsockTransport
participant PM as PluginManager
participant TS as trustring
participant DAEMON as Daemon
SYS->>MAIN: 启动进程
MAIN->>CFG: 加载配置文件
CFG-->>MAIN: AppConfig
MAIN->>LOG: 初始化日志
LOG-->>MAIN: OK
MAIN->>CHK: 启动时证书检查
CHK->>CHK: check_all()
alt 通信证书过期
CHK-->>MAIN: warn
MAIN->>DAEMON: notify_status("通信证书已过期")
MAIN->>DAEMON: notify_ready()
MAIN->>MAIN: 等待信号(不启动vsock)
else 正常
CHK-->>MAIN: OK
MAIN->>VS: 创建VsockTransport
VS->>VS: TLS配置
VS-->>MAIN: OK
MAIN->>TS: 创建TrustringHandler
MAIN->>PM: add_plugin(handler)
MAIN->>PM: init_all(ctx)
PM->>TS: init()
TS->>VS: register_handler(0x10)
TS->>VS: register_handler(0x12)
TS->>VS: register_handler(0x14)
TS-->>PM: OK
MAIN->>VS: start()
VS-->>MAIN: listener启动
MAIN->>CHK: start_periodic_check()
MAIN->>DAEMON: notify_ready()
SYS->>SYS: 服务就绪
MAIN->>MAIN: 等待关闭信号
end
4.2 服务关闭时序
sequenceDiagram
participant SYS as systemd
participant MAIN as main.rs
participant SIG as SignalHandler
participant VS as VsockTransport
participant PM as PluginManager
participant DAEMON as Daemon
SYS->>SIG: SIGTERM
SIG->>SIG: is_shutdown=true
SIG-->>MAIN: wait返回
MAIN->>VS: stop()
VS->>VS: shutdown_signal=true
VS->>VS: 等待连接关闭(5s超时)
VS-->>MAIN: OK
MAIN->>PM: shutdown_all()
PM->>PM: 调用各插件shutdown()
PM-->>MAIN: OK
MAIN->>DAEMON: notify_stopping()
MAIN->>MAIN: exit(0)
SYS->>SYS: 服务停止
4.3 TLS 握手时序
sequenceDiagram
participant C as Client
participant VS as VsockTransport
participant SSL as OpenSSL
C->>VS: vsock连接请求
VS->>VS: 获取permit (Semaphore)
VS->>C: 连接接受
C->>VS: TLS ClientHello
VS->>SSL: SslAcceptor.accept()
VS->>C: TLS ServerHello + Certificate
C->>C: 验证服务端证书
C->>C: CRL检查
C->>VS: TLS Client Certificate
VS->>SSL: 验证客户端证书
VS->>VS: CRL检查
alt 双向认证成功
VS->>C: TLS Finished
C->>VS: TLS Finished
Note over VS,C: TLS连接建立
else 认证失败
VS->>C: TLS Alert
VS->>VS: 关闭连接
end
5. 接口协议
5.1 vsock 报文结构
graph LR
subgraph "报文结构 (16B header + data)"
SEQ[seq: u32<br/>4B LE]
VER[version: u32<br/>4B LE]
TYPE[msg_type: u32<br/>4B LE]
LEN[len: u32<br/>4B LE]
DATA[data: bytes<br/>0-10240B]
end
SEQ --> VER --> TYPE --> LEN --> DATA
5.2 消息类型编码
graph TB
subgraph "通用错误 (框架层)"
E00[0x00: 服务端异常]
E01[0x01: 报文格式异常]
E02[0x02: 请求报文过长]
end
subgraph "签名 (0x10→0x11)"
R10[0x10: 签名请求]
R11[0x11: 签名响应]
end
subgraph "验签+签名 (0x12→0x13)"
R12[0x12: 验签+签名请求]
R13[0x13: 验签+签名响应]
end
subgraph "验签 (0x14→0x15)"
R14[0x14: 验签请求]
R15[0x15: 验签响应]
end
R10 --> R11
R12 --> R13
R14 --> R15
6. 错误处理流程
6.1 通用错误处理
graph TB
MSG[接收消息]
MSG --> V1{version检查}
V1 -->|不匹配| E01[返回 0x01]
V1 -->|匹配| LEN{长度检查}
LEN -->|header不完整| E01
LEN -->|len与data不一致| E01
LEN -->|超过10KB| E02[返回 0x02]
LEN -->|正常| TYPE{type检查}
TYPE -->|未注册| E01
TYPE -->|已注册| HDL[调用Handler]
HDL -->|panic| E00[返回 0x00]
HDL -->|None| E00
HDL -->|Some| RES[正常响应]
6.2 业务错误处理
graph TB
REQ[业务请求]
REQ --> JSON{JSON解析}
JSON -->|失败| R10[result=10]
JSON -->|成功| B64{Base64解码}
B64 -->|失败| R11[result=11]
B64 -->|成功| CERT{证书加载}
CERT -->|失败| R07[result=7]
CERT -->|成功| OP{签名/验签操作}
OP -->|私钥不可用| R08[result=8]
OP -->|算法错误| R09[result=9]
OP -->|证书链无效| R03[result=3]
OP -->|CRL吊销| R04[result=4]
OP -->|签名不匹配| R05[result=5]
OP -->|格式错误| R06[result=6]
OP -->|成功| R00[result=0/1/2]
7. 配置结构
graph TB
subgraph "agent.toml"
VSOCK[vsock配置]
LOGC[log配置]
CERTC[certificate配置]
end
subgraph "vsock"
PORT[port: u32]
MAX[max_connections: u16]
end
subgraph "log"
LPATH[path: String]
LLEV[level: String]
LSIZE[max_file_size: u32]
LROLL[max_roll_count: u32]
end
subgraph "certificate"
CMS[CMS证书]
TLS[TLS证书]
end
subgraph "CMS证书"
SCERT[signer_cert]
SKEY[signer_key]
CA[ca_root_cert]
CRL[cms_crl]
end
subgraph "TLS证书"
CCERT[comm_cert]
CKEY[comm_key]
CPWD[comm_key_pwd]
CCA[comm_ca_root]
CCRL[comm_crl]
end
VSOCK --> PORT
VSOCK --> MAX
LOGC --> LPATH
LOGC --> LLEV
LOGC --> LSIZE
LOGC --> LROLL
CERTC --> CMS
CERTC --> TLS
CMS --> SCERT
CMS --> SKEY
CMS --> CA
CMS --> CRL
TLS --> CCERT
TLS --> CKEY
TLS --> CPWD
TLS --> CCA
TLS --> CCRL
8. 相关文档