密钥、证书、审计与供应链安全
密钥建立系统身份和数据机密性,证书把公钥绑定到可验证主体,审计记录高风险操作,供应链控制则保证进入生产的依赖和产物可追溯。它们都需要完整生命周期,而不只是初次配置。
1. 密钥进入专门的秘密管理系统
数据库密码、API token、私钥和签名密钥不要写入代码仓库、镜像、普通配置或构建日志。应用使用工作负载身份从 secret manager 获取所需秘密,权限限制到具体环境和资源。
秘密在内存中也要缩小暴露范围:不写日志、不放异常消息、不通过诊断端点返回,并避免作为命令行参数出现在进程列表。开发、测试和生产使用独立凭据。
2. 轮换需要新旧版本短期重叠
直接替换共享密码会让尚未刷新的实例失败。常见轮换步骤是:
- 创建新版本凭据。
- 让验证端同时接受新旧版本。
- 灰度更新使用方并观察。
- 确认没有旧凭据调用。
- 撤销旧版本并保留审计。
签名密钥可以通过 kid 选择公钥。验证方缓存 JWKS 时要有合理刷新和未知 key 处理,不能永久信任过期集合,也不能每次请求同步依赖远程密钥服务。
3. 证书链证明公钥身份
TLS 客户端验证服务端证书链是否连接到受信根、证书是否在有效期内,以及 SAN 是否匹配目标主机名。只有加密连接而跳过主机名或证书验证,仍可能被中间人接管。
mTLS 让服务端也验证客户端证书,用于工作负载身份。授权仍要根据证书映射出的服务主体执行;“有任何受信证书”不等于可以访问所有接口。
4. 自动签发和续期也要监控
证书自动化降低人工过期事故,但控制器、DNS challenge、权限或时钟异常仍会让续期失败。监控每张生产证书剩余有效期、续期错误和实际监听端口返回的证书,而不只看证书系统中的期望状态。
私钥泄漏后需要重新签发并撤销旧身份。缩短证书有效期可以缩小泄漏窗口,但前提是续期链路经过故障演练。
5. 审计日志记录安全相关事实
高价值记录包括登录、认证失败、权限变更、密钥读取、配置发布、数据导出、管理员跨租户访问和人工修复。每条包含主体、动作、资源、时间、来源、结果、策略版本和关联请求 ID。
不要记录密码、完整 token、私钥和不必要的个人数据。审计存储与业务管理员权限隔离,使用追加写、完整性校验和保留策略降低篡改风险。
审计必须可查询并有告警规则。收集了却无法在事件响应时间内检索,不会形成有效证据。
6. 依赖需要锁定、扫描和更新
构建使用 lockfile、Maven dependency management 或等价机制固定解析结果,内部镜像和包仓库限制上游来源。扫描已知漏洞、许可证和恶意包只是入口,还要有修复时限、例外审批和重新验证。
依赖名称相似、内部包被公共仓库抢占和构建脚本执行任意代码都可能成为攻击路径。私有命名空间和仓库优先级要明确,CI 不给不受信构建步骤长期生产凭据。
7. SBOM 和 provenance 连接源码与产物
SBOM 列出产物包含的组件与版本,便于新漏洞出现时定位影响范围。构建 provenance 记录源码版本、构建器、参数和产物摘要,让部署系统验证镜像来自批准流水线。
镜像签名只能证明某主体签过该摘要,不证明代码没有漏洞。签名、可重复构建、评审、测试和运行时限制需要共同使用。
8. 事件响应准备撤销和影响分析
密钥泄漏后要能快速回答它允许访问什么、哪些日志显示被使用、如何轮换、哪些数据需要通知。依赖漏洞出现后要根据 SBOM 找到服务、构建修复镜像并验证实际环境已替换。
定期演练签名密钥轮换、证书过期、包仓库不可用和镜像撤回。安全生命周期只有经过恢复验证才完整。
9. 常见问题
9.1 Base64 编码后可以把密钥提交到仓库吗
不可以。Base64 不是加密,任何获得仓库的人都能还原。即使仓库后来删除,历史和克隆仍可能保留,应立即轮换已经提交的秘密。
9.2 使用 HTTPS 后是否还需要审计和最小权限
需要。TLS 保护传输并验证连接身份,不会限制已认证主体能访问什么,也不会记录管理员为何导出数据。授权、审计和凭据权限是不同控制层。
10. 面试题
10.1 如何管理 JWT 签名密钥和 TLS 证书的轮换
出现公司:字节跳动
考察重点
- Secret manager、最小权限与泄漏响应。
kid、JWKS、新旧密钥重叠和撤销。- 证书链、SAN、自动续期与实际端点验证。
相关内容:第 1 节“密钥进入专门的秘密管理系统”至第 8 节“事件响应准备撤销和影响分析”。
参考回答
私钥和密码放在 secret manager,由工作负载身份按最小权限获取,不进入代码、镜像和日志。轮换时先创建新版本,让验证端同时接受新旧;JWT 用 kid 选择 JWKS 中公钥,签发端切新 key,确认旧 token 超过生命周期后再撤销旧 key,并监控未知 key 与版本分布。
TLS 客户端要验证证书链、有效期和 SAN,服务端自动续期仍监控实际端口证书的剩余时间。泄漏时重新签发、撤销旧身份,并用审计查询使用范围。依赖和镜像则通过锁定版本、SBOM、构建 provenance 与签名连接源码和部署产物,不能把“有签名”当成没有漏洞。