Skip to content

sign-kms · 核心流程

1. Server 启动

来源:cmd/kms/main.go:76-126cmd/kms/wire.go:24-32

wireApp providers(wire.go:24-32):

  • server.ProviderSet —— NewGRPCServer / NewHTTPServer
  • biz.ProviderSet —— NewKmsBiz / NewObservableKmsBiz / NewKmsManageBiz
  • service.ProviderSet —— KmsService / KmsManageService
  • data.ProviderSet —— DB / Ent repository
  • pkcs11.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-373pkg/auth/grpc_auth.go:48-80

中间件覆盖 keys 的逻辑(pkg/auth/grpc_auth.go:62-74):若 view.Disabled=true 返回 Forbidden;若 view != nilclaims.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:73obs.RegisterRoutes(srv))、internal/service/kms_service.go:80HealthCheck RPC)。

  • HTTP:GET /healthz(路径由 obs 包提供,具体字段 [未核])
  • gRPC:KmsService.HealthCheck 调用 biz.PoolStatus()biz:123),返回 PoolStatus[]session_pool.go:44-50TokenLabelSlotIDReachableAvailableSessionsTotalSessions