送完整的链从常访问卡(CAC)?
-
16-09-2019 - |
题
我尝试启用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或其它储存库。这是一个全新级别的困难。