核心要点制品哈希与签名一同发布;校验失败禁止部署与回滚到最近可信版本。密钥轮换采用 `current` 与 `next` 双轨;设定 `kid` 与生效时间窗口。引入透明日志或可验证证书链,降低单点密钥风险。实现示例type Key = { kid: string; jwk: JsonWebKey; notBefore: number; notAfter: number } class KeyStore { private keys: Map<string, Key> = new Map() add(k: Key) { this.keys.set(k.kid, k) } get(kid: string): Key | undefined { return this.keys.get(kid) } } function keyUsable(k: Key, now: number, leewaySec: number): boolean { return now + leewaySec * 1000 >= k.notBefore && now - leewaySec * 1000 <= k.notAfter } async function verifySignature(data: Uint8Array, signed: { kid: string; alg: string; sig: string }, ks: KeyStore, now: number): Promise<boolean> { if (signed.alg !== 'RS256') return false const k = ks.get(signed.kid) if (!k || !keyUsable(k, now, 60)) return false const key = await crypto.subtle.importKey('jwk', k.jwk, { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' }, false, ['verify']) return crypto.subtle.verify({ name: 'RSASSA-PKCS1-v1_5' }, key, Buffer.from(signed.sig, 'base64'), data) } async function sha256Hex(buf: Uint8Array): Promise<string> { const d = await crypto.subtle.digest('SHA-256', buf) return Buffer.from(d).toString('hex') } async function verifyArtifactDigest(buf: Uint8Array, expectedHexSha256: string): Promise<boolean> { const calc = await sha256Hex(buf) return calc.toLowerCase() === expectedHexSha256.toLowerCase() } 发布治理发布前后双重校验:哈希匹配与签名链验证均通过方可继续。轮换窗口内同时接受 `current` 与 `next` 公钥签名;窗口外仅接受新密钥。审计记录存储签名指纹、`kid`、证书摘要与时间窗口以支持合规。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.009192s