Java Web Start: 自Java 8更新111版本以来无法通过代理隧道进行连接

21
我们有些客户自Java 8 Update 111以来无法运行我们的Java Web Start客户端。他们会看到以下错误信息:

java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required

这似乎与此更改有关:链接:

现在,对于为HTTPS设置通道时需要基本身份验证的代理,将默认不再成功。如果需要,可以通过从jdk.http.auth.tunneling.disabledSchemes网络属性中删除Basic或在命令行上设置同名的系统属性为""(空)来重新激活此身份验证方案。

如果客户不想更改其代理身份验证方法,是否有任何解决方法? 注意:<property name="jdk.http.auth.tunneling.disabledSchemes" value=""/>添加到JNLP的<resources>中没有效果。这是因为只有少数几个属性支持此方式 (页面底部有一个列表,链接在此)。"jdk.http.auth.tunneling.disabledSchemes"不在此列表中。

你能验证一下这个属性是否正常工作吗?这个 Stack Overflow 的回答可能会有所帮助:https://dev59.com/Xk_Ta4cB1Zd3GeqPD8_q#4036534 - Gernot
不,这是我第一次尝试使用property标签。但是java-vm-args似乎不适用于此,因为只支持少数几个参数。这里是一个列表:http://docs.oracle.com/javase/8/docs/technotes/guides/javaws/developersguide/syntax.html 然而,现在我发现property标签也有这样的列表。唔。那么在Java Web Start中没有可能启用基本认证代理隧道? - Marcus
5个回答

21

我发现有一种方法,但它不在开发者的控制范围内:用户可以添加

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

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

对于Java 9,在Java控制面板中,转到桌面设置 → 运行时参数


9
除了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自动更新。

8
如果您需要在运行时执行此操作,可以通过添加 jdk.http.auth.proxying.disabledSchemes 属性的值来实现。
System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");

添加到您应用程序的主方法中。


1
你确定你能在运行时更改这样的安全设置吗?我的意思是:你检查过这是否有影响了吗? - Marcus
可以的。我几天前也遇到了这个问题,后来找到了这个帖子,解决了我的问题。我在主方法中设置了属性,对我来说很有效。 - bj03rnv0ss
3
听起来像是一个安全漏洞。 - jan

1
我也遇到了这个问题,当我尝试通过代理服务器使用基本身份验证访问外部SOAP Web服务时,在运行在Apache Tomcat上的应用程序中。
在应用程序初始化期间以编程方式设置属性(System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");)并没有起作用。它必须被设置为VM-Argument或(当然不是很好的方式:)在[JRE_HOME]\lib\net.properties中。

4
通过编程设置这样的属性是有效的,但必须确保在第一次网络连接之前完成初始化。一些库在初始化期间进行网络连接,例如您的日志记录框架可以通过UDP设置日志记录,或者库可以“有用地”检查更新,或类似的操作。 - toolforger

0
我在net.properties中启用了以下功能,而且没有进行其他更改就可以正常工作:
java.net.useSystemProxies=true(之前为false)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接