使用代理时连接重置

3
我正在使用Jackson的ObjectMapper类向URL发出请求。在我的本地机器(Mac)上运行良好,但从我的Unix虚拟机上失败了。区别在于我的VM在防火墙后面,而我的Mac则没有。但是,两台机器都可以访问相同的代理。
看起来可能涉及一些SSL问题。有人能发现问题吗?
在两个部署中使用以下系统属性:
System.setProperty("http.proxyHost", _config.getProxyHost());
System.setProperty("http.proxyPort", _config.getProxyPort());
System.setProperty("https.proxyHost", _config.getProxyHost());
System.setProperty("https.proxyPort", _config.getProxyPort());

以下是来自 Unix 系统的完整堆栈跟踪:

Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:189)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.security.ssl.InputRecord.readFully(InputRecord.java:465)
at sun.security.ssl.InputRecord.read(InputRecord.java:503)
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:954)
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1343)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1371)
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1355)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1511)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
at java.net.URL.openStream(URL.java:1038)
at com.fasterxml.jackson.core.JsonFactory._optimizedStreamFromURL(JsonFactory.java:1420)
at com.fasterxml.jackson.core.JsonFactory.createParser(JsonFactory.java:730)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2137)

当我使用-Djavax.net.debug=ssl时,我看到以下内容:

main, WRITE: TLSv1.2 Handshake, length = 286
main, handling exception: java.net.SocketException: Connection reset
main, SEND TLSv1.2 ALERT:  fatal, description = unexpected_message
main, WRITE: TLSv1.2 Alert, length = 2
main, Exception sending alert: java.net.SocketException: Broken pipe
main, called closeSocket()

为什么不自己打开流并将流传递给Jackson,而不是传递URL? - undefined
不太确定这会有什么区别 :(. 刚刚尝试了一下,遇到了相同的问题(来源不同) Exception in thread "main" java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:189) ... at java.net.URL.openStream(URL.java:1038) - undefined
现在你知道这与杰克逊无关。 - undefined
1个回答

2
我的虚拟机在防火墙后面,而我的Mac没有。 但是,这两台机器都可以访问同一个代理。

主要处理异常:java.net.SocketException:连接重置

对等方在握手过程中关闭了连接。鉴于工作版本和非工作版本之间的区别是防火墙,在此防火墙内部可能会阻止访问,即连接重置由防火墙发出。


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