我有兴趣使用双向身份验证 TLS 来提高我的基于 javascript 的 webservices的安全性。我查看了 Keygen 元素并考虑了它的所有问题,不确定这是否可以用于此目的。
如果我认为双向身份验证 TLS 是更安全的 TLS 形式之一(简而言之)是正确的,那么为此目的使用 Keygen 发送的加密材料是合理的还是一个好主意?
更新:
我的威胁模型是防止 Diginotar 式攻击。解决方案如下所示:
注册
- 用户登录网站或创建帐户。
- 如果机器以前从未见过(新帐户)而不是添加持久 cookie,则会提示用户创建客户端证书。
- 客户端证书由服务器签名并导入 Web 浏览器用于客户端身份验证
- 服务器注册客户端证书的详细信息(指纹/哈希/公钥),稍后将使用它进行会话验证。
验证
- 用户登录网站(n+1 次访问)
- 提示用户输入客户端证书
- 服务器验证客户端证书。
- 建立了相互 TLS。
- 服务器使用已知的客户端证书验证经过身份验证的调用。如果调用证书为空白或来自其他用户,则可能正在执行 MITM 并且访问被拒绝。