【发布时间】:2020-02-15 19:12:56
【问题描述】:
错误: SSL 握手中止:ssl=0x676a5680:SSL 库失败,通常是协议错误
根据Android doc,API 16+ 支持 TLS 1.1 和 1.2,但在 API 20+ 之前默认不启用。我找到了一些解决方案(here、here、here 和 here)来启用对 OkHttp 的 TLS 1.1 和 1.2 支持。如何启用对 Exoplayer 的 TLS 1.1/1.2 支持?我找到的关于 Exoplayer TLS 1.1/1.2 支持的唯一帖子来自这个 github issue,它建议在这里提问。
"07-27 13:21:09.817 8925-9065/com.ftsgps.monarch E/ExoPlayerImplInternal:源错误。 com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: 无法连接到https://liveStream/LIVE-0089000D05/manifest.mpd 在 com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:194) 在 com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:147) 在 com.google.android.exoplayer2.upstream.DataSourceInputStream.checkOpened(DataSourceInputStream.java:102) 在 com.google.android.exoplayer2.upstream.DataSourceInputStream.open(DataSourceInputStream.java:65) 在 com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:129) 在 com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:308) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 在 java.lang.Thread.run(Thread.java:841) 引起: javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException:SSL 握手中止: ssl=0x722c3af8:SSL 库失败,通常是协议错误 错误:14077410:SSL 例程:SSL23_GET_SERVER_HELLO:sslv3 警报 握手失败(外部/openssl/ssl/s23_clnt.c:744 0x689d8f10:0x00000000)"
这仅在 API 21 版本(棒棒糖)以下发生。服务器是 使用 TLS1.2 协议,在 Lollipop 以下的 Android 上不支持 版本。
【问题讨论】:
-
首先拥有 MVCE 会很好,这样我们就可以尝试一下。从我检查的内容来看,这个问题与 OkHttp 相似,因为你需要修补 Exoplayer 类似的方式,OkHttp 在你链接的 github 帖子中 - github.com/square/okhttp/issues/2372#issuecomment-244807676