Java WebApp 中的 CAC 身份验证

Posted

技术标签:

【中文标题】Java WebApp 中的 CAC 身份验证【英文标题】:CAC authentication in a Java WebApp 【发布时间】:2013-04-19 22:20:16 【问题描述】:

我看到 *** 上还有其他一些 Java 和 CAC 帖子。我是所有这些东西的初学者,我仍在尝试制定一个框架,让我知道该做什么以及该去哪里。

我正在为一个大型组织工作,该组织使用带有 Windows 7 机器的 CAC 来验证想要进入其 PC 的用户。他们将 CAC 插入键盘并输入 PIN。

我的老板想更改我们的 Java Webap,这样如果用户的计算机中有 CAC,它就不会让用户进行身份验证。如果没有,他们将通过传统的 LDAP 登录。

我们正在使用 WebLogic 11g 和 Java 6。

从谷歌搜索看来有两种方法:

    实现一个小程序来读取用户的 CAC 并向 webapp 发送 SSL 证书。

    在web服务器中实现“相互SSL认证”,会导致浏览器将CAC上的SSL证书发送给webapp

我对自己的选择有正确的评估吗?

哪种解决方案更容易?

从长远来看,哪个更省事、更健壮?

我对 SSL 几乎一无所知,这似乎在两种解决方案中都很常见。我发现了一些关于抽象概念的 SSL 教程。谁能推荐一个我想做的好教程?

非常感谢您提供任何信息或提示

史蒂夫

【问题讨论】:

【参考方案1】:

    实现一个小程序来读取用户的 CAC 并向 webapp 发送 SSL 证书。

    在web服务器中实现“相互SSL认证”,会导致浏览器将CAC上的SSL证书发送给webapp

你会想做#2。您真的不想弄乱智能卡硬件/软件。让操作系统完成所有这些工作。

我已经在 IIS 上完成了这项工作,但一般来说,要实现这一点,您需要将 Web 服务器配置为需要客户端证书并信任 DoD CA。您可能需要配置您的 Web 服务器以向客户端通告它信任的 CA。如果 Win7 客户端具有由您信任的 CA 签名的客户端证书,则客户端将尝试使用它。如果是智能卡证书,Windows 会自动提示用户输入密码;你不必担心。如果用户键入正确的密码,证书将被发送到您的 Web 服务器,然后该服务器应该能够使用 CA 验证证书。如果它是一个有效的证书,那么您的软件可以解析证书中的字段并使用这些值来帮助验证用户(即,尽管有一个有效的证书,用户是否实际上被允许基于他们的姓名/电子邮件地址/等等)。如何从那里处理它取决于您。

如果您忘记用户正在使用智能卡或 CAC,那么您将更容易弄清楚这一点并查找信息,并从您将使用客户端证书进行身份验证的想法开始。首先创建一个自签名 CA 测试证书。然后为您的网络服务器创建一个服务器证书和一个由您的测试 CA 签名的客户端证书。在客户端和服务器上添加测试 CA 证书作为受信任的根证书。然后尝试编写一个使用客户端证书向您的网络服务器进行身份验证的小型测试应用程序。完成该工作后,您可以添加 DoD CA 并尝试从 CaC 证书中提取信息。

祝你好运!

【讨论】:

以上是关于Java WebApp 中的 CAC 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

为 CAC 卡身份验证配置 Apache HTTPD 的步骤

通过 DOD PKI CAC 进行 Apache 身份验证

将 java webapp 转换为使用 SAML2 身份验证

如何在 Node/Express 中使用 CAC 对用户进行身份验证

我可以从 Java EE webapp 使用 Windows 身份验证连接到 SQL Server 吗?

Node.JS webapp:身份验证、创建帐户、忘记密码和更改密码