【问题标题】:Tomcat 6 Ssl and Form authentication side by sideTomcat 6 Ssl 和 Form 身份验证并排
【发布时间】:2012-06-04 18:29:51
【问题描述】:

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

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

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

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

那么是否有以下选项: 我有登录页面,其中是用户名和密码字段以及登录按钮。如果用户按下登录按钮,他将使用用户名和密码登录(定向到表单验证器)。

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

希望你能理解问题。

【问题讨论】:

    标签: forms authentication tomcat ssl


    【解决方案1】:

    在 Google 代码中查看 AuthenticRoast 项目。它确实做到了这一点以及更多。

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 可以根据路径重新协商。
        • @Bruno 如何在 Tomcat 中配置这样的重新协商?
        • 我在回答中描述的方式(CLIENT-CERT auth 方法的安全约束)。
        • @Bruno 这将为整个 webapp 的受保护资源配置 CLIENT-CERT 身份验证。 OP 正在尝试使用 FORM/CLIENT-CERT 混合。通过在 web.xml 中指定 CLIENT-CERT 身份验证,您消除了使用 FORM 身份验证作为后备的可能性。请阅读 OP 的详细参考资料,了解此处发生的情况,您会发现您的解决方案不符合要求。
        • 您可以将其限制为特定路径:您登录的位置。然后,您可以将经过身份验证的状态与会话相关联(诚然,这可能需要一些手动工作或自定义阀门)。该问题表明可以为每种形式的身份验证使用两个不同的 URL(因为有两个按钮)。
        猜你喜欢
        • 2011-10-23
        • 1970-01-01
        • 2019-04-05
        • 1970-01-01
        • 2013-08-04
        • 1970-01-01
        • 1970-01-01
        • 2010-12-05
        • 2014-04-07
        相关资源
        最近更新 更多