【问题标题】:Android connection fails if I disable SSLv2/SSLv3 on the HTTPS server如果我在 HTTPS 服务器上禁用 SSLv2/SSLv3,Android 连接将失败
【发布时间】:2015-01-11 02:24:26
【问题描述】:

在一个 Android 应用程序(Nexus 7 上的 Kitkat 4.4.4)中,我使用 Retrofit REST 库访问我配置为仅允许 TLS,但不允许 SSL(以修复 Poodle 漏洞)的 HTTPS 服务器。

我的改造设置代码很简单

RetrofitInterface retrofitInterface = new RestAdapter.Builder()
    .setEndpoint(API.API_URL).build().create(RetrofitInterface.class);

而且我没有做进一步的 SSL 特定配置。

如果我在服务器配置中禁止 SSLv2/SSLv3,REST 资源请求将失败并显示以下错误消息:

failure retrofit.RetrofitError: javax.net.ssl.SSLProtocolException: SSL handshake terminated: ssl=0x69978800: Failure in SSL library, usually a protocol error
    error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure (external/openssl/ssl/s3_pkt.c:1256 0x683cddf8:0x00000003)

当我将 HTTPS 服务器配置为允许 SSLv2/SSLv3 时,问题就消失了。

我是否需要额外的配置来强制 Android HTTP 库使用 TLS 而不是 SSL?

【问题讨论】:

  • 这可能是客户端或服务器端的配置问题,仅凭这几个细节很难判断。如果您提供服务器的名称(如果它是可公开访问的)或提供数据包捕获(如果连接成功和不成功以查看差异),则更容易提供帮助。您也可以尝试根据 [ssllabs](ssllabs.com/ssltest/analyze.html) 检查服务器。
  • @SteffenUllrich 我找到了解决问题的方法,并将根据其他测试发布详细信息
  • 你解决它的方式有什么细节吗?
  • 我也想禁用对 SSLv2、SSL v3 协议的支持,您能帮我如何禁用吗?

标签: java android ssl https retrofit


【解决方案1】:

我发现解决方案是使用 Retrofit 开发者提供的 OkHttp 客户端。

所以我猜 Retrofit 中使用的默认 HTTP 客户端存在 SSL/TLS 握手问题。

【讨论】:

  • OkHttp 2.5.0 对我来说仍然会发生这种情况
  • java.net.UnknownServiceException:找不到可接受的协议。对我来说 =/
猜你喜欢
  • 2012-10-14
  • 2015-03-08
  • 2016-06-18
  • 2017-09-10
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
相关资源
最近更新 更多