全球每天有超过2000万次SSH连接。其中至少1800万次的用户,面对那个「是否信任此主机」的提示时,手指悬在键盘上三秒,然后敲下yes。

这不是粗心。是TOFU(首次使用信任)机制的设计缺陷——它把验证服务器身份的责任,扔给了根本不知道该问谁的用户。

2015年,Facebook工程师在USENIX大会上展示了一套内部方案:用X.509证书替代传统SSH密钥对。这套方案没开源,但概念流传出来。2020年,Smallstep公司把类似思路产品化。2023年,GitHub宣布支持SSH证书登录。到今年,AWS、GCP、Azure三大云厂商全部跟进。

一场静默的协议更替正在进行。

传统SSH的「指纹焦虑」

传统SSH的「指纹焦虑」

你第一次连上一台新服务器,SSH客户端抛出一串SHA256指纹。理论上,你应该通过另一条渠道——邮件、Slack、电话——找管理员核对这串字符。

实际上,没人这么做。Facebook 2015年的内部统计显示,工程师平均每周要处理12次新主机连接,按流程核对指纹的次数是零。

TOFU机制退而求其次:第一次连接时盲目信任,之后比对指纹是否变化。这能防御中间人攻击,但前提是第一次连接没被劫持。而云原生时代,一台服务器可能活不过72小时,「第一次」发生的频率远高于传统机房时代。

密钥管理是另一个泥潭。每个工程师平均维护3-7对SSH密钥,分散在~/.ssh/目录里。离职交接时,管理员要逐台服务器清理authorized_keys文件。Facebook曾披露,其2014年有15%的生产服务器残留着已离职员工的公钥。

「我们当时的解决方案是写了个爬虫,每天扫一遍所有机器的authorized_keys,跟HR数据库比对。」一位前Facebook基础设施工程师回忆,「但这只是补丁,不是解法。」

证书机制:把「信任」从人手里拿走

证书机制:把「信任」从人手里拿走

SSH证书的核心改动只有一条:不再直接信任公钥,而是信任一个签发证书的机构(Certificate Authority,证书颁发机构)。

流程变成这样:管理员生成一对CA密钥,私钥严密保管,公钥分发到所有服务器。用户登录时,不再出示裸公钥,而是一份由CA签发的、有时效性的证书。服务器用CA公钥验证证书签名,确认无误即放行。

这带来了三个连锁反应。

第一,指纹提示彻底消失。服务器只认CA签名,不认具体哪台主机。用户第一次连接时,SSH客户端不再询问「是否信任」,因为信任关系在证书层面已经确立。

第二,密钥生命周期可控。证书可以设置有效期——1小时、1天、1周。过期自动失效,无需人工清理。Netflix的实践是:开发环境证书有效期4小时,生产环境2小时。「足够完成一次部署或排查,但偷了也没用。」其安全团队2022年的技术博客写道。

第三,身份与权限解耦。传统方案里,公钥文件里塞着用户名和权限信息。证书则把身份声明(我是谁)和权限声明(我能做什么)分开存储,支持更细粒度的访问控制。Google的BeyondCorp实现中,同一张证书可以携带「允许访问staging环境,禁止生产环境」的约束。

Smallstep的CLI工具step-ca把这套流程压缩到一条命令:step ssh certificate jane@example.com --sign。背后自动完成密钥生成、证书签发、本地配置。

大厂跟进,但落地比想象慢

大厂跟进,但落地比想象慢

2023年3月,GitHub宣布支持SSH证书用于仓库访问。此前,企业用户管理数百名开发者的仓库权限,要么共享机器账户(审计噩梦),要么维护庞大的authorized_keys列表。证书方案允许企业自建CA,一键签发、一键吊销。

AWS在2024年初把SSH证书集成进Systems Manager Session Manager,用户无需管理任何密钥,通过IAM角色直接获取临时证书。GCP的OS Login服务类似,证书有效期默认10分钟。Azure的Dev Box服务则把证书生命周期与虚拟机绑定,机器销毁即自动吊销。

但迁移阻力客观存在。

证书方案需要基础设施改造:部署CA、轮换策略、监控告警。传统密钥方案「能用就行」,证书方案要求企业有成熟的安全工程团队。一位国内某头部云厂商的解决方案架构师透露,其2023年接触的200家企业客户中,真正落地SSH证书的不到10家,「多数还在用堡垒机+传统密钥的组合,证书是『未来规划』」。

开源生态也在分化。OpenSSH 8.2(2020年发布)原生支持证书,但默认关闭。多数Linux发行版至今未在系统级启用。Ansible、Terraform等工具对证书的支持停留在「能用」,不如传统密钥方案成熟。

一个被忽略的细节

一个被忽略的细节

证书方案并非没有代价。CA私钥成为单点故障——泄露则全局沦陷。Facebook 2015年的方案采用硬件安全模块(HSM)保管,成本不菲。Smallstep的开源方案推荐用AWS KMS或Google Cloud KMS托管,但中小企业往往跳过这一步。

另一个细节:证书撤销列表(CRL)或在线证书状态协议(OCSP)的实现。传统TLS证书依赖这些机制,但SSH证书通常省略——有效期设得足够短,撤销需求被「过期即失效」替代。这在高频场景下成立,低频场景(如月活一次的备份服务器)可能暴露窗口期风险。

2024年6月,OpenSSH维护者Damien Miller在邮件列表中回应一项功能请求时写道:「证书是正确方向,但我们对默认行为的改动极其保守。TOFU提示烦人,但它是一种可见的安全机制。完全静默的证书验证,可能让某些攻击更难被发现。」

这个回应被淹没在技术讨论中,没进入主流视野。

你的团队还在手动维护authorized_keys吗?