我正在寻找一个地方开始学习如何使用java与政府CAC卡接口.
最终,我的目标是找出如何使用CAC卡身份验证(通过PIN号码)授权访问使用Tomcat/J2EE服务器托管的网站.
但我需要从某个地方开始.所以我想我开始编写一个小的java程序来简单地从CAC卡读取CAC卡信息,CAC卡插入键盘上的读卡器(DELL键盘上带有CAC阅读器,位于数字键盘上方).
通过搜索谷歌,我发现了由OpenSSO项目取代的cacard java项目(https://cacard.dev.java.net/).但我似乎无法找到如何使用它连接到卡,从卡读取等的示例代码.
有谁知道我在哪里可以找到一些示例代码,以便我可以开始学习如何使用java与CAC卡进行交互?
谢谢
编辑:
在研究了更多之后,我在想,我能够只clientAuth="true"
在server.xml
文件中的连接器元素中设置吗?
http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html
clientAuth:如果希望Tomcat要求所有SSL客户端提供客户端证书以使用此套接字,请将此值设置为true.
我正在创建一个应用程序,用户可以在其中看到登录页面,输入他的电子邮件地址和密码.那时我希望系统读取他的CAC证书并允许他选择.现在我所能做的只是要求SSL,并在用户登录之前要求提供证书.有什么办法可以做到这一点吗?我在本地使用VS 2015测试它并更改applicationhost.config文件.我不确定它在这一点上如何在服务器上以不同的方式运行.基本上,我想在需要时向用户索取证书,而不是之前.
我发现了一些数据,但它仍无法在服务器上运行.我将服务器上的SSL设置更改为不需要SSL并忽略.然后我将其添加到我的web.config文件中:
<location path="FileSharing/Index" allowOverride="true">
<system.webServer>
<security>
<access sslFlags="Ssl,SslNegotiateCert,SslRequireCert"/>
</security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
有了这个我得到500错误,浏览器正试图去:
FileSharing在地址中的两次.有任何想法吗?
第一页,只是一个欢迎页面,不需要SSL,但是我希望它在转到索引时读取证书.
我已经找到了在Apache中使用基于DOD CAC卡的客户端证书身份验证的所有必要步骤,但现在我正在努力从我收到的证书中为用户提供良好的GUID.证书上是否有可用的GUID,在更新CAC卡时不会更改?我正在考虑使用SSL_CLIENT_S_DN,它看起来像:
/ C = US/O =美国政府/ OU = DoD/OU = PKI/OU =承包商/ CN = LAST_NAME.FIRST_NAME.MIDDLE_NAME.0123456789
但是我听说CAC卡更新时最后的数字会发生变化.这是真的?是否有更好的信息用于GUID?我也想获取用户的电子邮件地址,但我在证书中收到的信息中看不到它.电子邮件地址是否在我看不到的某些自定义扩展程序中可用?
谢谢!
我正在Windows机器上的独立tomcat 6服务器上运行应用程序.我希望它能够从DoD CAC卡请求和接收客户端证书.
我有一台运行IE的客户机正确设置从CAC卡传递证书,我知道它是正确的,因为当我去CAC启用的网站时,IE会弹出一个窗口,要求我选择一个证书,在那个窗口我看到来自我的CAC卡的证书.
我有tomcat配置为从用户请求证书,当我导航到我在tomcat上运行的站点时,我看到同样的IE提示要求我选择我的证书,但是当我查看我的站点时,证书列表是空的.在我的server.xml文件中,我已经配置了我的连接器,如下所示:
<Connector port="8443"
protocol="HTTP/1.1"
SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
keystoreFile="<myKeysotre>"
keystorePass="<myPassword>"
clientAuth="want"
sslProtocol="TLS" />
Run Code Online (Sandbox Code Playgroud)
我认为我搞砸的地方是生成密钥库文件.现在我使用java keytool命令生成它,如下所示:
keytool -genkey -alias -keypass myPassword -keystore myKeystore -storepass myPassword
我正在进行开发,我正在寻找一种方法来将CAC卡的客户端证书提供给我的应用程序,但我遗漏了一些东西.我不太熟悉它是如何工作的所以我可以使用一些帮助/指导.
谢谢
我们有一个基于浏览器的应用程序,我们希望用户在输入时重新进行身份验证.因此,当他们访问该URL时,我们希望他们显示PIN提示,以便他们重新进行身份验证.有合理的方法吗?
添加信息:这是一张CAC卡,工作站上有ActivIdentity和Tumbleweed.此外,如有必要,我可以向工作站添加服务.浏览器都是IE7.Web服务器是IIS 6,页面是用ASP.NET编写的(大多数情况下).
我需要编写一个java程序来连接到HTTPS服务器(DoD网站).该网站需要CAC(DoD通用访问卡)身份验证.如果您通过浏览器访问此站点,则先插入CAC,然后输入PIN.
我需要在java中以编程方式完成身份验证过程(有点像浏览器).如何从CAC检索信息?我一直在谷歌上搜索Java PKCS#11参考指南.看起来像Sun PKCS#11 Provider可以做到这一点,但您需要本机PKCS#11令牌实现.
我对吗?有没有人这样做过?任何建议或评论将不胜感激.
如何使用Department of Defense CAC卡实现Apache(在Linux内)身份验证?我听说它可以完成,但没有遇到任何细节.目前我们使用Windows Active Directory进行Apache身份验证,但仅使用登录/密码.很快,要求将只使用CAC卡.任何提示将不胜感激.
我们为DoD开发了一个.NET C#Web应用程序,它使用CAC(通用访问卡)作为唯一的身份验证方法.我们在服务器上有一个受信任的SSL,应用程序在几个位置运行,并且一切正常 - 在大多数情况下.
问题#1
主要问题是,在我们的某些内部开发服务器上,当您使用读卡器中的有效CAC进行"登录"时,只显示一个证书,而不是来自CAC.它用于通过网络验证我的工作笔记本电脑("客户端身份验证"和"智能卡登录"属性在"证书"管理单元中进行检查).
我们在另一个网络上有另一台服务器,其中客户端证书身份验证运行良好 - 它显示来自CAC的证书,并且不显示上述证书.我已经尝试在这两台服务器上并排比较Windows Server 2008 R2中我能想到的一切,看看我是否能找到可能不同的东西,但它们似乎都是Windows Server 2008的默认安装R2.
以下代码用于读取客户端证书:
if (Request.ClientCertificate.IsPresent)
{
HttpClientCertificate Cert = HttpContext.Current.Request.ClientCertificate;
//use cert info to check db and create session
}
Run Code Online (Sandbox Code Playgroud)
此文件位于IIS> SSL设置>"要求SSL"和"需要客户端证书"的目录中.
我不知道这是服务器配置问题还是编码问题,但是我已经开展了几个月的工作,并且无法找到答案为什么应用程序只有在托管一些CAC证书时才能获得CAC证书服务器.
问题#2
如果我在正确读取CAC的服务器上访问应用程序,它会从用于访问该计算机上的应用程序的所有CAC中提取所有证书的副本,而不是仅从读卡器中的CAC证书中获取证书.
AKO [https://akologin.us.army.mil/]至少过滤掉电子邮件证书; 但是,该站点不托管在Windows机器上.
结论
在我看来,除了Request.ClientCertificate集合和IIS中的两个复选框之外,还必须有一个更好,更深入的机制来访问和过滤来自智能卡读卡器的客户端证书.
我要求使用军用通用访问卡/个人识别验证系统启用登录到新的Drupal供电站点.
我遇到过这个模块:http://drupal.org/sandbox/larquin/1292622但是没有代码.
是否有适用于Drupal的模块?如果没有,有没有人知道任何PHP(或任何其他语言)示例代码,我可以看看基于模块?
或者,是否有另一种方法来支持这种不需要专用模块的身份验证方法?(例如ActiveDirectory?Apache配置?等)