在客户端证书验证成功后生成一个 HTTP cookie(带有关联的服务器端会话),当客户端提供该 cookie 时,将导致客户端证书验证被跳过
这仍然安全吗?(以及我们如何优化安全性和实用性?)
理论上它并不那么安全,因为服务器无法再向自己证明不存在中间人。
当客户端提供客户端证书时,服务器可以加密信任它。客户端和服务器应该基于客户端的密钥加密和数据(嗯,会话密钥)。如果没有客户端证书,服务器只能希望客户端已经很好地验证了服务器的证书(如客户端所感知的那样),并通过这样做消除了 MitM 先生的可能性。
开箱即用的 Windows 客户端信任 200 多个根 CA 证书。在没有客户端证书的情况下,服务器最终会通过扩展信任。
以下是关于在数据包捕获中寻找什么以验证客户端证书是否提供针对 MitM 的防御的很好的文章:http:
//www.carbonwind.net/ISA/ACaseofMITM/ACaseofMITMpart3.htm
这种类型的 MitM 的解释。
http://www.networkworld.com/community/node/31124
某些防火墙设备盒实际上使用此技术对 SSL 进行深度检查。
MitM 曾经看起来像是一个巨大的 Mission Impossible 风格的制作,需要花费很多时间才能完成。真的,尽管它只需要一个受感染的 DNS 解析器或路由器就可以了。世界上有很多小 Linksys 和 Netgear 盒子,其中可能有两三个没有最新的安全更新。
在实践中,这对于主要金融机构的网站来说似乎已经足够好了,尽管最近的证据表明它们的风险评估策略并不理想。
这个方案有免费的实现吗?(我知道 CA 的 SiteMinder 产品)
只是一个客户端cookie,对吧?这似乎是每个 Web 应用程序框架的一个非常标准的部分。
鉴于上述情况,我们应该继续在应用程序内进行身份验证,还是转移到服务器内?
硬件加密加速器(SSL 代理前端或加速卡)可以显着加快这些速度。
将证书验证移至 HTTP 服务器可能会有所帮助。无论如何,你可能会在加密数学中做一些重复。
看看您是否会受益于客户端证书上更便宜的算法或更小的密钥大小。
验证客户端证书后,您可以尝试在短时间内缓存它(甚至整个内容)的哈希摘要。这可能使您不必在每次点击时都在信任链上重复签名验证。
您的客户多久进行一次交易?如果构成您交易的大部分的那些经常打击您,您可以说服他们在单个 SSL 协商/身份验证中组合多个交易。查看设置 HTTP Keep-Alive 标头。他们可能已经在某种程度上这样做了。也许您的应用程序正在对每个 HTTP 请求/响应进行客户端证书验证,或者在每个会话开始时只进行一次?
无论如何,这些都是一些想法,祝你好运!