我决定为电子识别方案设计一个原型,因此我研究了如何使用Java / Spring服务器端进行TLS客户端身份验证(即使您不是Java开发人员,也可以继续阅读-大部分文章是Java -不可知)。
为什么要进行TLS客户端身份验证? 因为这是认证拥有证书的用户(例如,在智能卡上)的最标准方法。 当然,智能卡证书不是唯一的应用程序-组织可以向存储在其计算机上的用户颁发内部证书。 关键是要具有比简单的用户名/密码对更安全的身份验证机制。 这是一个可用性问题,尤其是对于智能卡,但这超出了本文的范围。
因此,使用TLS clientAuth,除了由客户端(通过服务器证书)验证服务器身份之外,客户端身份也由服务器验证。 这意味着客户端具有由服务器颁发的权威机构颁发的证书。 粗略地说,客户端必须对挑战进行数字签名,以证明其拥有与其提供的证书相对应的私钥。 (此过程也可以在“相互认证”下找到)
有两种解决方法。 第一个也是最直观的方法是检查如何配置Tomcat(或servlet容器)。 Spring Security x509身份验证页面在底部提供了Tomcat配置。 “密钥库”是存储服务器证书(+私钥)的存储,“ trustStore”是保存用于签署客户端证书的授权机构的根证书的存储。
但是,仅当您向用户公开了单个servlet容器实例时,该配置才适用。 不过,在生产中最有可能的情况是,您将在负载平衡器后面有许多实例/节点在运行您的应用程序,并且