当前位置: 首页 > 面试题库 >

javax.net.ssl.SSLException:4.4.2设备上的对等方关闭了连接(在6.0.1上可用)

禹智渊
2023-03-14
问题内容

我在应用程序上执行同步时遇到此错误,这是一个问题。主要问题是相同的代码可在Android 6.0.1设备上运行,但在4.4.2设备上,我收到此错误:

javax.net.ssl.SSLException: Connection closed by peer 
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:406)
at okhttp3.internal.io.RealConnection.connectTls(RealConnection.java:188)
at okhttp3.internal.io.RealConnection.connectSocket(RealConnection.java:145)
at okhttp3.internal.io.RealConnection.connect(RealConnection.java:108)
at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:188)
at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:127)
at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:289)
at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)
at okhttp3.RealCall.getResponse(RealCall.java:240)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198)
at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:203)
at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:187)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160)
at okhttp3.RealCall.access$100(RealCall.java:30)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:33)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

我无法从服务器请求数据。

如果您需要更多数据,请随时询问。谢谢。


问题答案:

基于此链接,此处的关键是强制执行TLS 1.2协议。

我在这里需要纠正的唯一事情是直接强制使用TLS 1.2协议,如下所示:

private class NoSSLv3SSLSocket extends DelegateSSLSocket {

    private NoSSLv3SSLSocket(SSLSocket delegate) {
        super(delegate);
    }

    @Override
    public void setEnabledProtocols(String[] protocols) {
        super.setEnabledProtocols(new String[]{"TLSv1.2"}); // force to use only TLSv1.2 here
    }
}


 类似资料:
  • 我需要保持nginx和上游Nodejs之间的连接。 刚刚编译并安装了nginx 1.2.0

  • 到目前为止,每当我遇到问题时,我都会使用这个网站,我也找到了解决方案,但这次我甚至不知道发生了什么。 我正在开发一款基于1对1多人模式的游戏。到目前为止,我已经创建了一个服务器和我的客户端程序。 我的服务器为每个与服务器连接的客户端创建一个带有套接字的新线程,当在游戏中按下“新游戏”按钮时,线程会搜索另一个正在寻找新游戏的线程,一旦它找到他,创建一个单独的线程,向两个线程发送消息,向它们发出游戏已

  • 问题内容: 在许多android设备上,当设备插入计算机的USB端口或什至在某些USB充电设备上时,手机都会进入USB存储模式。当设备处于此模式时,Android应用无法访问sdcard。有什么方法(1)检测设备何时处于此模式,以及(2)以编程方式(至少暂时)关闭USB存储设备,以便我的Android应用程序可以访问sdcard? 问题答案: 您可以检测到它(有了链接),但是AFAIK至少不能使用

  • 在调用连接时,我们得到一个错误: 堆栈跟踪以:

  • 我试图在Android 7.0上运行的Genymotion模拟器上使用Appium inspector。然而,当我进入Android设置时,平台版本下只列出了API级别22(即Android 5.1)。 只是为了好玩,我试图选择API22并启动检查器,但我得到了以下错误: [AndroidDriver]错误:找不到操作系统5.1的活动设备或模拟器。以下是可用的:192.168.56.101:555

  • 我最近更新到Android Studio 2.3,现在当我尝试运行应用程序时,模拟器不会上线。它在300秒后超时。 此外,该应用程序一直遇到致命异常错误(OOM),我不确定如何修复它,或者这是否是模拟器问题的一部分。 非常感谢您的帮助。再说一次,我对这个项目的了解非常有限,所以如果你的答案能保持简单,那就太好了。