gpt4 book ai didi

java - Java Web Start 应用程序中的 HttpsUrlConnection 不信任添加到 Java 控制面板的 SSL 证书

转载 作者:行者123 更新时间:2023-11-29 08:54:06 25 4
gpt4 key购买 nike

简短版本:有没有办法让在 Java Web Start 应用程序中启动的 HttpsUrlConnections 信任安装在 Java 控制面板中的证书,或者是否有另一种用户友好的方式(不涉及命令行)来添加某些证书到此类连接使用的信任库?

我们的 Java Web Start 应用程序访问多个 Web 服务(通过标准配置中的 JAX-RS/Jersey,最终使用 HttpsUrlConnection 的 JWS 特定实现)。有时,由于证书不受信任,这些会抛出 SSL 证书验证错误:

sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

这些可能出于几个合理的原因而发生:

  • 在我们的测试环境中,站点证书由我们的内部 CA 颁发,默认情况下不受 JRE 信任
  • 我们的一些用户拥有“SSL 终止”代理,这是一种网络代理的奇特名称,可以解密 SSL 流量并使用不同的证书转发它。从应用的角度来看,这与中间人攻击没有区别。
  • 在生产环境中升级服务器后,我们通过从各个服务器启动应用程序来测试应用程序,然后再将它们添加到负载平衡器;这些服务器的证书也由我们的内部 CA 签名。

目前我们有代码可以发现这些错误,向用户显示一个措辞恰当的严厉警告,如果用户希望继续,则安装一个“接受所有”的默认信任管理器和主机名 validator 到 HttpsUrlConnection 以完全绕过 SSL 验证,正如其他地方广泛记录的那样。这是一个麻烦的解决方案,很难维护,它会出现在应用程序的每次执行中,它会掩盖其他错误(我们连接到多个站点)并且感觉就像重新发明轮子。

另一种方法是使用 keytool 将不受信任的 CA 证书添加到 JVM 的信任库中。这不是一个非常用户友好的解决方案,因为它涉及大量命令行黑客,并且在每次 JRE 升级后都会被清除。

我希望将这些证书添加到 Java 控制面板也能达到同样的目的,但它似乎没有;尽管它在安装和启动应用程序时消除了 Java Web Start 警告,但从应用程序内部创建的 HttpsUrlConnections 仍然不信任这些证书,从而导致上述错误和自行覆盖。

最佳答案

您面临的问题是 JAX-RS 不使用默认的 SSLContextHostnameVerifier。这实际上是一件好事,因为您可以通过编程方式为客户端连接设置这些,而不是让它使用全局。为此,您需要创建一个 ClientBuilder 并将主机名 validator 和 sslcontext 设置为您控制的内容。

public Client buildUnsecureRestClient() throws GeneralSecurityException {
SSLContext context = SSLContext.getInstance("TLSv1");
TrustManager[] trustManagerArray = {
...
};
context.init(myKeyManagers, trustManagerArray, new SecureRandom());
return ClientBuilder.newBuilder()
.hostnameVerifier(myhostnameverifier)
.sslContext(context)
.build();

通过将 SSLContext 设置为包含您自己的 key 管理器,您可以通过编程方式构建该 key 管理器。我有一个示例,其中我使用该技术来 bypass the SSL certificate checks for JAX-RS ,但您可以实现 X509KeyManager 来提供您的 key 。 X509TrustManager 处理起来有点棘手,我建议您使用目标 JDK 附带的那个,即使它会将您锁定到 Oracle 的 sun.security.ssl.X509TrustManagerImpl,但是因为这是 WebStart,所以您使用的 JRE 很可能来自 Oracle 而不是 IBM JRE。

关于java - Java Web Start 应用程序中的 HttpsUrlConnection 不信任添加到 Java 控制面板的 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com