JBoss 无需重新启动即可重新加载证书信任库
Posted
技术标签:
【中文标题】JBoss 无需重新启动即可重新加载证书信任库【英文标题】:JBoss reload certificate truststore without restart 【发布时间】:2011-05-18 21:23:08 【问题描述】:有没有办法在 JBoss 4.2 中“重新加载”证书信任库而无需重新启动?
我正在尝试让 EJB 使用 ssl 调用远程服务器上的 Web 服务,并且看到与 SSLHandshakeException 类似的问题,如下文所示。我们正在尝试执行以下操作,涉及三台机器,A 是 JBoss 服务器,充当服务器 B 和 C 的 Web 服务客户端。
1) 在 A 上,用户输入 B 的主机名。A 上的机器获取 B 的自签名证书并将其安装在信任库中(通过外部 shell 脚本)。
2) 与 B 建立 SSL 套接字连接,在该点看来证书存储在第一次尝试时已加载。连接成功,一切正常。
3) 再次在 A 上,用户执行与 2 相同的操作,shell 脚本获取 C 的证书并将其安装到 trusstore。但是,在与 C 的连接上,似乎(通过启用 javax.net.debug=ssl)信任库没有“重新加载”,它没有找到 C 的证书,我们得到 SSLHandshakeException。
重新启动 JBoss 后,“更新的”信任库被加载,与 B 和 C 的连接都正常工作。
希望在不重新启动 JBoss 的情况下执行此操作,并收集上述方案不正确。如果有人可以向我指出动态更新信任库的正确方法的文档,我们将不胜感激。
Problem calling web service from within JBOSS EJB Service
【问题讨论】:
【参考方案1】:这能解决你的问题吗?
http://docs.jboss.org/jbossas/javadoc/4.0.4/security/org/jboss/security/plugins/JaasSecurityDomainMBean.html#reloadKeyAndTrustStore()
【讨论】:
是的,该解决方案可以工作 - 尤其是方法 reloadKeyAndTrustStore()【参考方案2】:从安全角度来看,让一个 EJB 将自签名证书(在用户交互时)添加到 Jboss 范围内使用的信任库中并不是一个好主意。
更简洁的解决方案是让您的 Web 服务客户端使用自定义 X509TrustManager 实现或自定义 SSLSocketFactory。在这两种情况下,您都可以自行决定信任哪个证书。这将允许您管理自己的信任库,该信任库仅对该 EJB 和相应的 WS 调用有效。
另请参阅: http://www.howardism.org/Technical/Java/SelfSignedCerts.html
【讨论】:
以上是关于JBoss 无需重新启动即可重新加载证书信任库的主要内容,如果未能解决你的问题,请参考以下文章
Jboss EAP 7 - REST API客户端的动态SSL身份验证
如何更新jboss EAP -6.2中的JSP / JS而无需重新启动或重新部署构建