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 以来无法通过代理隧道的主要内容,如果未能解决你的问题,请参考以下文章