Java Web Start:自 Java 8 Update 111 以来无法通过代理隧道

Posted

技术标签:

【中文标题】Java Web Start:自 Java 8 Update 111 以来无法通过代理隧道【英文标题】:Java Web Start: Unable to tunnel through proxy since Java 8 Update 111 【发布时间】:2017-06-07 23:12:40 【问题描述】:

自 Java 8 Update 111 以来,我们的一些客户无法再运行我们的 Java Web Start 客户端。他们得到:

java.io.IOException:无法通过代理隧道。代理退货 "需要 HTTP/1.1 407 代理验证

看起来和这个change有关:

现在,代理在设置隧道时需要基本身份验证 默认情况下,HTTPS 将不再成功。如果需要,这 可以通过从 jdk.http.auth.tunneling.disabledSchemes 网络属性,或通过 在 命令行。

如果客户不愿意改变他们的代理认证方式,有什么办法吗?

注意:<property name="jdk.http.auth.tunneling.disabledSchemes" value=""/> 添加到JNLP 的<resources> 没有任何效果。这是因为这种方式只支持少数属性(this page 底部附近有一个列表)。 “jdk.http.auth.tunneling.disabledSchemes”不在其中。

【问题讨论】:

您是否能够验证该属性是否正常工作?这个 SO 答案可能会有所帮助:***.com/a/4036534/867816 不,这是我第一次尝试使用属性标签。然而 java-vm-args 似乎在这里并不适用,因为只有少数参数支持它。这是一个列表:docs.oracle.com/javase/8/docs/technotes/guides/javaws/… 但是,现在我看到属性标签也有这样的列表。嗯。那么有没有办法在 Java Web Start 中启用基本的身份验证代理隧道? 【参考方案1】:

我在尝试通过代理服务器访问外部 SOAP Web 服务时也遇到了这个问题,该代理服务器使用 BASIC-Authentification 对运行在 Apache Tomcat 上的应用程序进行了访问。

在应用程序初始化期间以编程方式设置属性(System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");不起作用。它必须在 [JRE_HOME]\lib\net.properties 中设置为 VM-Argument 或(当然不是很好的方式:))。

【讨论】:

以编程方式设置这样的属性确实有效,但您必须确保在建立第一个网络连接之前完成初始化。一些库在初始化期间进行网络连接,例如你的日志框架可以通过 UDP 设置日志,或者一个库可以“帮助”检查更新,或者类似的东西。【参考方案2】:

除了mbee的答案之外,还可以在jre的net.properties文件中进行配置:

C:\Program Files (x86)\Java\jre1.8.0_131\lib\net.properties

目前最后100行需要注释掉:

之前:

 #jdk.http.auth.proxying.disabledSchemes=
 jdk.http.auth.tunneling.disabledSchemes=Basic

之后:

 #jdk.http.auth.proxying.disabledSchemes=
 #jdk.http.auth.tunneling.disabledSchemes=Basic

请注意,Java 更新后需要重复这两个答案,尽管 Java 自动更新已通过基本 Internet 代理身份验证停用。

【讨论】:

【参考方案3】:

我发现有一种方法,但不在开发者手中:用户可以添加

-Djdk.http.auth.tunneling.disabledSchemes=""

对于 Java 8,在 Java 控制面板 → Java → 查看... → 运行时参数

Java 9 中的 Java 控制面板 → 桌面设置 → 运行时参数

【讨论】:

【参考方案4】:

如果您需要在运行时执行此操作,您可以通过添加来设置 jdk.http.auth.proxying.disabledSchemes 属性的值

System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");

到你的应用程序的主要方法。

【讨论】:

您确定可以在运行时更改此类安全设置吗?我的意思是:你检查过这是否有效果吗? 是的,你可以。几天前我一直在努力解决这个问题,发现这个线程解决了我遇到的问题。我关闭了在 main 方法中设置属性,这对我来说很好。 听起来像是一个安全漏洞

以上是关于Java Web Start:自 Java 8 Update 111 以来无法通过代理隧道的主要内容,如果未能解决你的问题,请参考以下文章

Java Web Start

linux jar开机自启

Java Web Start 被最新的 Java 版本阻止

Java Web Start怎么用啊!

为啥我的电脑不能运行java web start

什么是 Java Web Start 软件以及如何启动它