【问题标题】:Okhttp3 with consrypt for http2 support in jdk8Okhttp3 with consrypt for http2 support in jdk8
【发布时间】:2019-07-08 20:18:29
【问题描述】:

我一直在围绕 okhttp3 进行 http2 请求的测试,我的标准是使用 jdk8 本身实现 http2 连接。我知道这可以通过升级到 jdk 9 或使用 conscrypt 作为默认提供程序来轻松实现,例如,

Security.insertProviderAt(Conscrypt.newProvider(), 1);

但是像这样插入提供程序会影响应用程序级别,我只想将其限制为使用 http2 连接的 sslSocket,所有其他套接字都应该使用默认提供程序,我知道 apache-httpclient-5 beta 提供名为 custom TLSstrategy 的选项,它有助于将 conscrypt 指定为仅针对特定 SSLSocketFactory 的默认提供程序

请帮忙

TIA

【问题讨论】:

    标签: java okhttp3 http2 okhttp


    【解决方案1】:

    它并不是真正为这种情况设计的,而是假设如果你有 Conscrypt 可用并已注册,那么你很乐意并愿意使用它。

    OkHttp 平台是自动选择的,并且是一个 JVM 单例,因此您不能覆盖每个客户端或每个连接。

    您可以覆盖客户端的 SSLSocketFactory。但是,OkHttp 也要求 HTTP/1.1 是可接受的协议之一,在客户端和服务器协商 HTTP/1.1 或 H2 之前会选择 TLS Provider。因此,这可能适合您,也可能不适合您。

    【讨论】:

    • 我正在使用 Apache httpclient-4(用于 http1.1 请求)和 okhttpclient(用于 h2 请求),所以我需要覆盖为 okhttpclient 创建的 SslSocketFactories 以使用 conscrypt 作为默认提供程序和其他使用的 sslSocketFactories Apache 应该使用 Java 的默认安全提供程序。现在我在创建之前使用 Security.insertProviderAt(Conscrypt.newProvider(), 1) 并在创建 socketFactory 之后使用 Security.removeProvider(“Conscrypt”)现在工作,但我认为必须有适当的方法来做到这一点。
    猜你喜欢
    • 2019-05-11
    • 2019-04-22
    • 2014-11-27
    • 1970-01-01
    • 2012-12-05
    • 1970-01-01
    • 2022-12-28
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多