gpt4 book ai didi

android - Android 7 中的 SSLException 而不是 6

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:47 24 4
gpt4 key购买 nike

我正在开发一个向服务器发出各种请求的应用程序。当我的手机运行 android 6 时,应用程序可以向服务器发出请求,但在更新到 Android 7 后,它无法与服务器执行握手。

在我的 Nexus 5x 上,当调用 HttpURLConnection 上的 getInputStream() 方法时,LogCat 生成以下堆栈跟踪:

javax.net.ssl.SSLHandshakeException: Handshake failed
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:429)
at com.android.okhttp.Connection.connectTls(Connection.java:235)
at com.android.okhttp.Connection.connectSocket(Connection.java:199)
at com.android.okhttp.Connection.connect(Connection.java:172)
at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367)
at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130)
at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:329)
at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:405)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:243)
at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java)
at api.mynewleafapi.webapi.MNLStatics$override.getBackgroundForTree(MNLStatics.java:229)
at api.mynewleafapi.webapi.MNLStatics$override.access$dispatch(MNLStatics.java)
at api.mynewleafapi.webapi.MNLStatics.getBackgroundForTree(MNLStatics.java:0)
at com.android.mynewleaf.recov.ui.fragment.usermain.UserMainProfileViewFragment$2.run(UserMainProfileViewFragment.java:146)
Suppressed: javax.net.ssl.SSLHandshakeException: Handshake failed
... 17 more
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x786ae841c0: Failure in SSL library, usually a protocol error
error:10000410:SSL routines:OPENSSL_internal:SSLV3_ALERT_HANDSHAKE_FAILURE (external/boringssl/src/ssl/s3_pkt.c:610 0x786ae12de0:0x00000001)
error:1000009a:SSL routines:OPENSSL_internal:HANDSHAKE_FAILURE_ON_CLIENT_HELLO (external/boringssl/src/ssl/s3_clnt.c:764 0x786880dfce:0x00000000)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357)
... 16 more
Caused by: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x786ae841c0: Failure in SSL library, usually a protocol error
error:100000af:SSL routines:OPENSSL_internal:NO_CIPHERS_AVAILABLE (external/boringssl/src/ssl/s3_clnt.c:624 0x786880dfce:0x00000000)
at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:357)
... 16 more

这是确认握手失败。我知道我正在连接的特定服务器正在使用 TLS_ECDHE_ECDSA_WITH_AES_128_GCM,它在我通过请求 String[] array = factory.getDefaultCipherSuites() 获得的受支持密码套件列表中;。我已经能够在运行 Android 7 的其他设备上重现此问题,但该问题不会出现在 Android 6 及以下版本上。如何解决?

最佳答案

可以引用以下链接了解:https://developer.android.com/about/versions/nougat/android-7.0-changes.html#other

Android 7.0 对应用用于 HTTPS 和其他 TLS/SSL 流量的默认 TLS/SSL 配置进行了以下更改:

RC4 密码套件现已禁用。CHACHA20-POLY1305 密码套件现已启用。当服务器不协商现代密码套件时,默认情况下禁用 RC4 可能会导致 HTTPS 或 TLS/SSL 连接中断。首选的修复方法是改进服务器的配置,以启用更强大、更现代的密码套件和协议(protocol)。理想情况下,应启用 TLSv1.2 和 AES-GCM,并且应启用并首选前向保密密码套件 (ECDHE)。

另一种方法是修改应用程序以使用自定义 SSLSocketFactory 与服务器通信。工厂应设计为创建 SSLSocket 实例,除了默认密码套件外,这些实例还启用了服务器所需的一些密码套件。

关于android - Android 7 中的 SSLException 而不是 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40987859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com