【问题标题】:Connection reset when using proxy使用代理时连接重置
【发布时间】:2015-07-17 21:12:24
【问题描述】:

我正在使用 Jackson 的 ObjectMapper 类向 URL 发出请求。这在我的本地机器(Mac)上运行良好,但在我的 Unix VM 上失败了。不同之处在于我的 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?
  • 不太确定这会有什么不同:(。刚刚尝试过并收到相同的问题(来源不同)线程“main”中的异常 java.net.SocketException: Connection reset at java .net.SocketInputStream.read(SocketInputStream.java:189) ... 在 java.net.URL.openStream(URL.java:1038)
  • 现在你知道这与杰克逊无关

标签: java ssl proxy jackson


【解决方案1】:

不同之处在于我的虚拟机在防火墙后面,而我的 mac 不在。但是,两台机器都可以访问同一个代理。

main,处理异常:java.net.SocketException: Connection reset

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 2021-03-01
    • 2016-02-25
    • 2021-04-27
    • 1970-01-01
    • 1970-01-01
    • 2020-04-30
    相关资源
    最近更新 更多