2013-04-25 73 views
1

我看到在stackoverflow上还有其他几个Java和CAC帖子。我是所有这些东西的初学者,我仍然在努力构建一个在我的脑海中想要做什么和在哪里去的框架。Java WebApp中的CAC身份验证

我正在为一个大型组织工作,该组织正在使用Windows 7盒子的CAC来验证想要进入其PC的用户。他们将CAC粘在键盘上并输入PIN码。

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

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

从它周围的谷歌搜索好像有两种方法:

  1. 实现一个小程序来读取用户的CAC发送一个SSL证书到Web应用程序。

  2. 实现Web服务器“相互SSL认证”,这将导致浏览器在CAC发送SSL证书的web应用程序

难道我有我的选择正确的评价?

哪种解决方案比较容易?

从长远来看,哪种方法更简单,更稳健?

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

感谢很多提前的任何信息或提示

史蒂夫

回答

4
  1. 实现一个小程序来读取用户的CAC发送一个SSL证书的web应用。

  2. 实现Web服务器“相互SSL认证”,这将导致浏览器在CAC发送SSL证书的web应用程序

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

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

如果您忘记了用户使用的是智能卡或CAC,并且开始您将使用客户端证书进行身份验证,您将更容易计算出这些信息并查找信息 。首先创建一个自签名的CA测试证书。然后为您的Web服务器创建一个服务器证书,并为您的测试CA签署一个客户端证书。在客户端和服务器上添加测试CA证书作为受信任的根证书。然后尝试编写一个使用客户端证书向您的Web服务器进行身份验证的小型测试应用程序。一旦你有了这个工作,你可以添加DoD CA并尝试从CaC证书中取出信息。

好运!