【发布时间】: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