首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用通用访问卡连接到HTTPS服务器

如何使用通用访问卡连接到HTTPS服务器
EN

Stack Overflow用户
提问于 2009-04-15 17:40:41
回答 1查看 6.7K关注 0票数 9

我需要写一个java程序来连接到HTTPS服务器(DoD网站)。网站需要DoD(通用访问卡)身份验证。如果您通过浏览器访问此站点,请先插入您的CAC,然后输入PIN。

我需要在java中以编程方式完成身份验证过程(有点像浏览器)。如何从CAC检索信息?我一直在谷歌上搜索,并阅读了Java PKCS#11参考指南。似乎Sun PKCS#11提供程序可以做到这一点,但是您需要原生PKCS#11令牌实现。

我说的对吗?以前有人这么做过吗?我们将非常感谢您的任何建议或意见。

EN

回答 1

Stack Overflow用户

发布于 2009-04-15 18:46:36

首先,您需要安装PKCS #11支持。这是一些本机代码,可能是您的读卡器附带的,它提供了一个提供PKCS11接口的.dll (或.so)。系统上的其他软件,如Mozilla产品和Sun的PKCS #11提供程序,都使用该库。(Microsoft产品通常使用不同的接口“CAPI”。)

然后,按照PKCS #11 Reference Guide,中的说明设置SunPKCS11提供程序。我必须在我的设置中提供的唯一属性是安装的本机“库”的位置,以及该提供程序的"name“后缀。" name“属性被附加到"SunPKCS11-”之后,因此如果您指定"CAC“作为名称,则可以稍后使用Security.getProvider("SunPKCS11-CAC")查找Provider

然后,您可以使用标准的JSSE系统属性javax.net.ssl.keyStore (值为"NONE")和javax.net.ssl.keyStoreType (值为"PKCS11")来允许JSSE访问CAC上的密钥材料。您不需要设置password属性,因为本机代码应该在需要时提示用户输入他们的PIN。

需要注意的是,只有用户的“最终实体”证书可从CAC获得。要构建信任链,大多数服务器都希望客户端发送任何中间证书。解决这个问题是可能的,但是很复杂,因为它涉及实现您自己的javax.net.ssl.X509KeyManager。如果您使用的服务器需要完整的链,请发布后续问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/752890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档