SSH certificates and git signing
摘要
Matthew Garrett (Google安全工程师) 详解如何使用SSH证书签署git提交,提供比传统PGP更安全的代码签名方案。
为什么需要SSH证书
- Author标签可以伪造
- 账户被黑后PR可能被恶意利用
- GitHub账户被黑可以改变可信密钥集合
- 你需要某种方式来确定哪些密钥可信
SSH证书优势
- 由可信方签名的SSH公钥
- 包含元数据:Principals (身份列表)
- 可提供组 membership 信息
- 原生支持转发 (agent forwarding)
本地配置
1. 设置git使用SSH签名
git config set gpg.format ssh
2. 设置签名密钥
两种方式:
- 设置 user.signingkey 为证书路径
- 或设置 gpg.ssh.defaultKeyCommand 为命令查找证书
作者提供了 find-ssh-certificate 工具。
3. 签名提交
git commit -S
验证签名
* cert-authority ssh-rsa AAAA...
匹配所有principals,验证证书是否由指定CA签名。
GitHub/GitLab目前不支持此验证方式,作者写了 validate-git-signatures 工具。
硬件安全
- 证书不能防止私钥被窃
- 使用TPM (PC) 或 Secure Enclave (Mac)
- Mac: Secretious
- Linux: ssh-tpm-agent
作者写了 attestation-tpm-agent 工具。
核心洞察:"SSH密钥的裸加密在隔离情况下没有太大帮助,需要某种方式来确定哪些密钥可信。"