Tomcat 6 Ssl和Form认证并排

时间:2012-05-30 13:50:03

标签: forms authentication tomcat ssl

是否可以在Tomcat 6.xxx中并排使用两种身份验证方法?

故事:现在我的应用程序在端口80和443上运行。在443连接器中有clientAuth =“want”参数。 如果客户满80岁,则无需证书。但是当客户端超过443并且客户端在阅读器中有智能卡时,即使客户端不想登录,也会自动询问证书。

对于使用user-cert登录,我有FormFallBack身份验证器,这意味着如果客户端没有发送证书(他没有读卡器中的智能卡)或身份验证器中的证书失败,身份验证员会指向表单,他可以在密码和用户名。 我的英语不是很好,所以这里有类似系统的更好概述:http://wiki.apache.org/tomcat/SSLWithFORMFallback

但是如果浏览器多次要求提供证书,如果用户不想使用智能卡登录(但是他已经在读卡器中),那么询问用户证书的过程对用户来说很烦人,而他想要用用户名登录和密码。

以下是可选项: 我有登录页面,其中包括用户名和密码字段以及登录按钮。如果用户按下登录按钮,他将使用用户名和密码登录(指示形成验证者)。

但在同一页面上有“使用智能卡登录”按钮。如果他按下此按钮,服务器会要求用户证书并将其提供给验证者。

希望你能理解这个问题。

3 个答案:

答案 0 :(得分:1)

我相信您必须编写自己的Tomcat身份验证器,以了解这些要求。

实际上可能无法实现,因为AFAICT要求能够基于每个用户重新配置SSL连接器的行为,并且在SSL协商发生之前无法为用户配置连接器

答案 1 :(得分:1)

如果您使用servlet会话保持经过身份验证的状态,则可以通过提供两个不同的按钮(或链接)来提供通过表单或客户端证书登录。

我假设您可以为表单创建/login/form之类的路径,并通过客户端证书使用/login/cert进行身份验证。

使用SSL / TLS重新协商访问/login/cert时,您可以按需触发客户端证书身份验证。为此,请在连接器配置中使用clientAuth="false",但使用<auth-method>CLIENT-CERT</auth-method>在webapp中对该路径设置安全约束:这将在需要时触发重新协商。

为此,您需要JRE that supports RFC 5746版本(Oracle Java 6 r22或更高版本),您的客户也应该支持它。现在版本的浏览器/操作系统应该支持这一点。

答案 2 :(得分:0)

请参阅Google Code中的AuthenticRoast项目。它确实如此以及更多。