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而无需重新启动或重新部署构建

Angular App 无需重新编译即可动态加载插件

重新启动 Nginx 或在证书更改时重新加载证书缓存

(Rails)重新加载“lib”文件而无需重新启动服务器......? [复制]

定期重启 KafkaListenerEndpointRegistry 以重新加载 SSL 上下文