错误记录19.12.25 java.net.SocketException: Connection reset

连接重置Connection reset

java.net.SocketException: Connection reset
	at java.net.SocketInputStream.read(SocketInputStream.java:210)
	at java.net.SocketInputStream.read(SocketInputStream.java:141)
	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:975)
	at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1367)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1395)
	at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1379)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:396)
	at org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(SSLConnectionSocketFactory.java:355)
	at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:142)
	at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:373)
	at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)
	at com.senthink.www.oc.http.HttpRequester.execute(HttpRequester.java:170)
原因

服务器断开了连接

  • 服务器异常
  • 服务器和客户端长短连接不匹配
  • Https连接,服务器和客户端的TLS版本不一致

我碰到的原因是TLS版本不一致

解决方法

找到你配置HttpClient的地方

public CloseableHttpClient closeableHttpClient() throws Exception {
    // Trust own CA and all self-signed certs
    String userDir = System.getProperty("user.dir");
    SSLContext sslcontext = SSLContexts.custom()
        .loadTrustMaterial(
        new File(userDir + ocSetting.getCertPathCA()),
        ocSetting.getCertPasswordCA().toCharArray(),
        new TrustSelfSignedStrategy())
        .loadKeyMaterial(
        new File(userDir + ocSetting.getCertPathOutGoing()),
        ocSetting.getCertPasswordOutGoing().toCharArray(),
        ocSetting.getCertPasswordOutGoing().toCharArray())
        .build();
    // Allow TLSv1 protocol only
    //这里的问题,这里配置只允许TLSv1版本
    SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
        sslcontext,
        new String[] { "TLSv1"},
        //new String[] {"TLSv1","TLSv1.1","TLSv1.2",疯狂往里加}
        null,
        SSLConnectionSocketFactory.getDefaultHostnameVerifier());

    return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}

TLS版本有哪些?,这个在sun.security.ssl.ProtocolVersion中可以看到

static final ProtocolVersion NONE = new ProtocolVersion(-1, "NONE");
static final ProtocolVersion SSL20Hello = new ProtocolVersion(2, "SSLv2Hello");
static final ProtocolVersion SSL30 = new ProtocolVersion(768, "SSLv3");
static final ProtocolVersion TLS10 = new ProtocolVersion(769, "TLSv1");
static final ProtocolVersion TLS11 = new ProtocolVersion(770, "TLSv1.1");
static final ProtocolVersion TLS12 = new ProtocolVersion(771, "TLSv1.2");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值