DoKit icon indicating copy to clipboard operation
DoKit copied to clipboard

DoraemonKit 在android10 上的 OKhttp bug

Open tracyly opened this issue 4 years ago • 12 comments

java.lang.IllegalStateException: Unable to extract the trust manager on Android10Platform, sslSocketFactory is class com.android.org.conscrypt.OpenSSLSocketFactoryImpl at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.kt:751) at com.didichuxing.doraemonkit.aop.urlconnection.ObsoleteUrlFactory$OkHttpsURLConnection.setSSLSocketFactory(ObsoleteUrlFactory.java:1300) at com.tencent.imsdk.looper.HttpClient$3.run(HttpClient.java:135) at java.util.concurrent.ThreadPoolExecutor.processTask(ThreadPoolExecutor.java:1187) at java.util.concurre

tracyly avatar Jun 17 '20 04:06 tracyly

java.lang.IllegalStateException: Unable to extract the trust manager on Android10Platform, sslSocketFactory is class com.android.org.conscrypt.OpenSSLSocketFactoryImpl at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.kt:751) at com.didichuxing.doraemonkit.aop.urlconnection.ObsoleteUrlFactory$OkHttpsURLConnection.setSSLSocketFactory(ObsoleteUrlFactory.java:1300) at com.tencent.imsdk.looper.HttpClient$3.run(HttpClient.java:135) at java.util.concurrent.ThreadPoolExecutor.processTask(ThreadPoolExecutor.java:1187) at java.util.concurre

我一直都是用Android 10进行测试的 没问题 你的okhttp版本是多少?

jtsky avatar Jun 17 '20 08:06 jtsky

java.lang.IllegalStateException: Unable to extract the trust manager on Android10Platform, sslSocketFactory is class com.android.org.conscrypt.OpenSSLSocketFactoryImpl at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.kt:751) at com.didichuxing.doraemonkit.aop.urlconnection.ObsoleteUrlFactory$OkHttpsURLConnection.setSSLSocketFactory(ObsoleteUrlFactory.java:1300) at com.tencent.imsdk.looper.HttpClient$3.run(HttpClient.java:135) at java.util.concurrent.ThreadPoolExecutor.processTask(ThreadPoolExecutor.java:1187) at java.util.concurre

我一直都是用Android 10进行测试的 没问题 你的okhttp版本是多少?

okhttp 3.12.1

tracyly avatar Jul 12 '20 06:07 tracyly

java.lang.IllegalStateException: Unable to extract the trust manager on Android10Platform, sslSocketFactory is class com.android.org.conscrypt.OpenSSLSocketFactoryImpl at okhttp3.OkHttpClient$Builder.sslSocketFactory(OkHttpClient.kt:751) at com.didichuxing.doraemonkit.aop.urlconnection.ObsoleteUrlFactory$OkHttpsURLConnection.setSSLSocketFactory(ObsoleteUrlFactory.java:1305) at com.arialyy.aria.http.ConnectionHelp.handleConnection(ConnectionHelp.java:120) at com.arialyy.aria.http.download.HttpDFileInfoTask.run(HttpDFileInfoTask.java:81) at com.arialyy.aria.core.loader.NormalLoader.handleTask(NormalLoader.java:101) at com.arialyy.aria.core.loader.AbsNormalLoader.startFlow(AbsNormalLoader.java:133) at com.arialyy.aria.core.loader.AbsNormalLoader.run(AbsNormalLoader.java:115) at java.lang.Thread.run(Thread.java:923)

 /**
     * Sets the socket factory used to secure HTTPS connections. If unset, the system default will
     * be used.
     *
     * @deprecated [SSLSocketFactory] does not expose its [X509TrustManager], which is a field that
     *     OkHttp needs to build a clean certificate chain. This method instead must use reflection
     *     to extract the trust manager. Applications should prefer to call
     *     `sslSocketFactory(SSLSocketFactory, X509TrustManager)`, which avoids such reflection.
     */
    @Deprecated(
        message = "Use the sslSocketFactory overload that accepts a X509TrustManager.",
        level = DeprecationLevel.ERROR
    )
    fun sslSocketFactory(sslSocketFactory: SSLSocketFactory) = apply {
      if (sslSocketFactory != this.sslSocketFactoryOrNull) {
        this.routeDatabase = null
      }

      this.sslSocketFactoryOrNull = sslSocketFactory
      this.x509TrustManagerOrNull = Platform.get().trustManager(sslSocketFactory) ?: throw IllegalStateException(
          "Unable to extract the trust manager on ${Platform.get()}, " +
              "sslSocketFactory is ${sslSocketFactory.javaClass}")
      this.certificateChainCleaner = Platform.get().buildCertificateChainCleaner(x509TrustManagerOrNull!!)
    }

同样的问题 okhttp3 4.8.1 dokitx 3.3.5

SkywalkerDarren avatar Dec 16 '20 07:12 SkywalkerDarren

同样此问题+1 okhttp:3.11.0 dokitx 3.3.5

gudujiucheng avatar Jan 14 '21 06:01 gudujiucheng

同样的问题 okhttp 4.7.2 dokitx 3.3.5

Petterpx avatar Mar 16 '21 02:03 Petterpx

同样的问题 okhttp 4.8.1 dokitx 3.3.5

AllenWen avatar Apr 22 '21 15:04 AllenWen

同样遇到+ 1

knyou avatar Jul 05 '21 12:07 knyou

+1

wwwtete avatar Aug 31 '21 02:08 wwwtete

同样的问题+1 好像是因为下载https 文件,由于没有设置ca证书,而使用了绕过证书的方式,导致了这个问题

lixbandroid avatar Sep 27 '21 06:09 lixbandroid

最后怎么解决的呀?我也遇到这个问题了?

Yalun-Yong avatar Nov 10 '21 08:11 Yalun-Yong

com.didichuxing.doraemonkit.aop.urlconnection.ObsoleteUrlFactory$OkHttpsURLConnection.setSSLSocketFactory调用了过时的方法,需要进行替换,参考https://github.com/square/okhttp/issues/5878

mengxn avatar Dec 21 '21 09:12 mengxn

同样的问题 okhttp 4.9.3 dokitx 3.5.0.1

trenail avatar Dec 19 '22 00:12 trenail