三个接口相同、挂孔相同的设备,参与的是三种互不相干的交换。一个显示由服务器校验的令牌码,一个用从不离开设备的密钥签名,另一个通过自有协议批准浏览器登录。因此,问 VPN 该用证书还是硬件令牌,实际上是把一种格式和一类设备相比。答案取决于你买的究竟是其中哪一种。

先说证明,再说设备

一次性令牌码会生成一个值,由认证服务按自己的机制校验。VPN 可以通过 RADIUS 或联合身份提供方接入该服务,而令牌本身从不需要保存任何属于隧道的东西。它证明的是本人持有生成该码的设备。它对输入该码的机器一无所知。

智能卡形态的令牌保存私钥,并按请求完成签名运算,证书身份就是这样在不导出密钥的前提下得到证明。它旁边的证书是公开材料,把证书交出去和把密钥交出去完全不是一回事。

FIDO 密钥又是另一套协议。浏览器登录可以在身份提供方那里使用它,但那个网站上的成功并不意味着同一把密钥会出现在 VPN 客户端的智能卡接口里。

有些设备会并排实现其中好几种应用,厂商文档之所以分列这些模式,正是因为这个原因。这并不证明市面上的每把密钥都支持每一种模式。

硬件保护的是密钥,不是策略

带证书的设备上的 PIN 通常只授权本地使用密钥,它并不是 VPN 账户系统校验的那个口令。像 NIST 关于认证器的指南 这样的指南把这类本地输入称为激活秘密,与认证器本身区分开来。保障来自整套设计,而不是屏幕上的提示次数。

注册、续期和撤销无论如何都归身份所有者管。仍然要有人决定谁可以注册、把凭据绑定到正确的人,并在设备丢失时让更换成为可能。买一把新密钥并不会吊销旧的。

选硬件之前,先把登录仪式描述出来:用户是输入验证码、解锁签名密钥,还是在浏览器里点确认?每种答案都对应不同的客户端、不同的网关设置和不同的服务台话术。

实践中流程在哪里分岔

令牌码最容易铺开,也最容易输给逼真的仿冒页面,因为输入的码可以被实时转发。带证书的密钥能抵抗这类攻击,但运营成本更高,因为签发和吊销成了服务的一部分。FIDO 密钥依附于网页登录,完全取决于身份提供方是否为这个应用提供支持。

混合部署很常见,也并非天然有错:隧道用证书、管理控制台用令牌码,是一种前后一致的划分,前提是两者都注册在同一身份之下。真正崩塌的是没人记录过的划分——服务台说不清用户到底缺哪一个因素。

把决策落到具体

把仪式写成真实用户会执行的一串步骤,然后核对客户端、网关和身份提供方是否都支持这一串步骤。不一致通常出现在最后一步:客户端根本联系不上设备。

然后再确认设备丢失或证书到期时会发生什么。如果这个答案没有写下来,上线时就留了一个会在某个周一早上被发现的缺口。

pkcs11-tool --list-slots
pkcs11-tool --list-objects --type cert

相关文章