【问题标题】:How to disable SSLv3 fallback with okhttp如何使用 okhttp 禁用 SSLv3 回退
【发布时间】:2014-06-26 06:33:15
【问题描述】:

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

我了解在某些情况下(哪些情况?)okhttp 停止使用 TLS 并切换到 SSL 作为后备。但是,在 SNI 的情况下这是不可接受的,有没有办法禁用回退?

示例 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)

【问题讨论】:

    标签: android ssl square sni okhttp


    【解决方案1】:

    感谢上述功能请求,这是作为配置选项添加的,请参阅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));
    

    【讨论】:

    • 试过了。但它仍然退回到 sslv3
    【解决方案2】:

    Open a feature request,我们会处理的。

    【讨论】:

    • 这个实现了吗?
    • 嗨,Jesse,这个实现了吗?
    • 是的。几年前。
    • @JesseWilson 而不是回答“是的。多年前”也许您想花点时间让您的“答案”成为实际答案?
    • Dean Wild 的答案有新的 API。这是正确的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2015-10-06
    • 2015-10-15
    • 2014-12-13
    • 1970-01-01
    相关资源
    最近更新 更多