我尝试启用SSL通信网服务的客户(Axis2)使用证书上的用户的CAC卡。就像一个特色。...直到万维网服务器是CAC启用。在这一点上SSL connection被拒绝的错误消息的其他证书链中并不包括在内。

我有保证的供应商提供,无论是通过增加它的安全。性文件或创建它的通过程序.

我目前的做法是只集系统特性:系统。setProperty("内网。ssl。密钥","没有");系统。setProperty("内网。ssl。keyStoreType","PKCS11");

我的理解 问答,这种做法只发送"最终实体"的证书。显然我需要执行我自己的X509KeyManager.这是新地对我来说,任何人都可以建议一个很好的参考样品或提供如何做到这样吗?

更好的援助。

有帮助吗?

解决方案

最关键的管理的实施取决于发行人的证书的预期使用。

如果证书用户的CAC会 总是 将发出一个具体的CA,只要储存,发行人的证书和任何中间证书进一步的链条中的一环7文件。在 getCertificateChain() 方法,这个集合可所附的盲目地向用户证书和返回。

如果事情没这么简单,但一个完整的清单的可能的发行人可以列举,获得他们所有的证书, 他们 发行人的证书,等等,直到根证书。

添加所有的根证书的一个关键储存作为受信任的项目。捆绑的中间证书中的一个环节-#7–格式的文件。

实施 X509KeyManager (或延长 X509ExtendedKeyManager 如果你的工作 SSLEngine).具体地说,在本 getCertificateChain() 方法中,将使用 CertPathBuilder 创建一个有效的链从用户证书的受信任的根源。的 目标 是的证书载荷从用户的CAC的 alias 参数。的 信任的根源 是的证书在信任储存,你创建的;中间证书可以 加载 从环7和文件 添加到建设者参数。 一旦链是建立, 获得证书的路径转换 一个阵列。这是结果的 getCertificateChain() 法。

如果你不能预测谁将发行用户的证书,则可以获得的中间证明在运行时从LDAP directory或其它储存库。这是一个全新级别的困难。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top