主题
sign-kms · 核心流程
1. Server 启动
来源:cmd/kms/main.go:76-126、cmd/kms/wire.go:24-32。
wireApp providers(wire.go:24-32):
server.ProviderSet——NewGRPCServer/NewHTTPServerbiz.ProviderSet——NewKmsBiz/NewObservableKmsBiz/NewKmsManageBizservice.ProviderSet——KmsService/KmsManageServicedata.ProviderSet—— DB / Ent repositorypkcs11.NewProviderRegistry—— HSM provider 初始化newApp
ProviderRegistry 初始化(pkg/pkcs11/registry.go:68-92):
- 遍历
conf.HSM.Providers,每个register()(:102) - 至少 1 个 provider 可用才能继续(
:89-92)
2. Token 签发
来源:internal/biz/kms_manage_biz.go:212-279。
DB 是 keys 的权威源(access_token.go:37-39),下一次请求时 pkg/auth/grpc_auth.go:62-74 会用 DB 值覆盖 JWT claims。
3. 签名链路
来源:internal/biz/kms_biz.go:79-373、pkg/auth/grpc_auth.go:48-80。
中间件覆盖 keys 的逻辑(pkg/auth/grpc_auth.go:62-74):若 view.Disabled=true 返回 Forbidden;若 view != nil,claims.Keys = view.Keys。
4. 密钥生成
来源:internal/biz/kms_biz.go:143-264。
Keypair.id 设计源自 internal/data/ent/schema/keypair.go:18-23,是 SKI hex(sha256 of 未压缩 EC P-256 点)。
5. Namespace 创建
来源:internal/biz/kms_manage_biz.go:54-204。
6. 健康检查
来源:internal/server/http.go:73(obs.RegisterRoutes(srv))、internal/service/kms_service.go:80(HealthCheck RPC)。
- HTTP:
GET /healthz(路径由obs包提供,具体字段 [未核]) - gRPC:
KmsService.HealthCheck调用biz.PoolStatus()(biz:123),返回PoolStatus[](session_pool.go:44-50:TokenLabel、SlotID、Reachable、AvailableSessions、TotalSessions)