android - 如何使用 okhttp 禁用 SSLv3 回退

标签 android ssl square sni okhttp

我的 android 应用程序依靠 SNI 来访问正确的服务器,因此它需要 TLS,并且不能与 SSLv3 一起使用。我正在使用 okhttp 和改造,服务器日志表明 TLS 握手突然切换到 SSLv3,并且可能会在记录时间内保持这种状态,由于缺乏服务器名称指示支持,导致重复的主机名验证失败。

我知道在某些情况下(哪些情况?)okhttp 停止使用 TLS 并切换到 SSL 作为后备。然而,这在 SNI 的情况下是 Not Acceptable ,有没有办法禁用回退?

Apache 日志示例:

[Wed May 07 18:00:12.799511 2014] [ssl:debug] [pid 20369:tid 140532403599104] ssl_engine_kernel.c(1891): [client <removed>:51431] AH02041: Protocol: TLSv1, Cipher: RC4-SHA (128/128 bits)
[Wed May 07 18:00:28.563170 2014] [ssl:debug] [pid 20455:tid 140532646553344] ssl_engine_kernel.c(1891): [client <removed>:51432] AH02041: Protocol: TLSv1, Cipher: RC4-SHA (128/128 bits)
[Wed May 07 18:00:45.884075 2014] [ssl:debug] [pid 20371:tid 140532445562624] ssl_engine_kernel.c(1891): [client <removed>:51433] AH02041: Protocol: TLSv1, Cipher: RC4-SHA (128/128 bits)
[Wed May 07 18:01:01.322657 2014] [ssl:debug] [pid 20455:tid 140532395206400] ssl_engine_kernel.c(1891): [client <removed>:51434] AH02041: Protocol: TLSv1, Cipher: RC4-SHA (128/128 bits)
[Wed May 07 18:01:18.361705 2014] [ssl:debug] [pid 20370:tid 140532462348032] ssl_engine_kernel.c(1891): [client <removed>:51435] AH02041: Protocol: TLSv1, Cipher: RC4-SHA (128/128 bits)
[Wed May 07 18:01:25.378294 2014] [ssl:debug] [pid 20371:tid 140532487526144] ssl_engine_kernel.c(1891): [client <removed>:51436] AH02041: Protocol: SSLv3, Cipher: RC4-SHA (128/128 bits)
[Wed May 07 18:01:40.807100 2014] [ssl:debug] [pid 20369:tid 140532445562624] ssl_engine_kernel.c(1891): [client <removed>:51437] AH02041: Protocol: SSLv3, Cipher: RC4-SHA (128/128 bits)
[Wed May 07 18:01:41.154782 2014] [ssl:debug] [pid 20371:tid 140532479133440] ssl_engine_kernel.c(1891): [client <removed>:51438] AH02041: Protocol: SSLv3, Cipher: RC4-SHA (128/128 bits)
[Wed May 07 18:01:56.695645 2014] [ssl:debug] [pid 20369:tid 140532504311552] ssl_engine_kernel.c(1891): [client <removed>:51439] AH02041: Protocol: SSLv3, Cipher: RC4-SHA (128/128 bits)
[Wed May 07 18:01:57.252515 2014] [ssl:debug] [pid 20455:tid 140532521096960] ssl_engine_kernel.c(1891): [client <removed>:51440] AH02041: Protocol: SSLv3, Cipher: RC4-SHA (128/128 bits)

最佳答案

感谢上述功能请求,将其添加为配置选项,请参阅 here了解更多信息。

如果你想拥有一个不会退回到不安全密码套件的严格/安全客户端,请使用此 ConnectionSpec:

client.setConnectionSpecs(Collections.singletonList(ConnectionSpec.MODERN_TLS));

或者,您可以定义自己的 ConnectionSpec:

    ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)  
        .tlsVersions(TlsVersion.TLS_1_2)
        .cipherSuites(
              CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
              CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
              CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)
        .build();  

    client.setConnectionSpecs(Collections.singletonList(spec));

关于android - 如何使用 okhttp 禁用 SSLv3 回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23549017/

相关文章:

Swift:如何在 MapKitView 上绘制正方形

android - 如何增加选项卡指示器的高度

android - 如何开发响应式网页

android - 闪屏中的闪屏出现在哪里?

android - 如何将字符串迭代器值添加到 ArrayAdapter?

ssl - https连接中的get参数是否加密?

php - HTTPS 和 500 内部服务器错误

android - 带有 RxJava2 的 espresso 自定义 TestRunner - 使用 Rx2Idler 获取空指针异常

firebase - Square 和 Firebase 之间有集成吗?

python - 在 Python 中使用带有自签名证书的请求时证书验证失败