簡體   English   中英

無法使用 OKHTTP3 在 IBM JRE8 上提取信任管理器

[英]Unable to Extract trust manager on IBM JRE8 with OKHTTP3

任何人都可以幫助解決這個問題。

我也在使用OKHTTP3 版本 4.8.1來編寫HTTP2 客戶端 它適用於 Oracle JDK 8,但不適用於 IBM JRE 8。

錯誤消息:java.lang.IllegalStateException:無法在 okhttp3.internal.Platform@e85a0ce8 上提取信任管理器,sslSocketFactory 是類 com.ibm.jsse2.SSLSocketFactoryImpl。

謝謝

您正在依賴一種長期不推薦使用的方法

https://github.com/square/okhttp/blob/cd722373281202492043f4294fccfe6f691ddc01/okhttp/src/main/kotlin/okhttp3/OkHttpClient.kt#L741

它已被棄用,因為它必須對 JVM 進行大量假設,這會在每次 JVM 更新或跨供應商時中斷。 您應該改為使用 X509TrustManager 作為參數調用該方法

https://github.com/square/okhttp/blob/cd722373281202492043f4294fccfe6f691ddc01/okhttp/src/main/kotlin/okhttp3/OkHttpClient.kt#L767

TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(
TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
if (trustManagers.length != 1 || !(trustManagers[0] instanceof X509TrustManager)) {
    throw new IllegalStateException("Unexpected default trust managers:"
        + Arrays.toString(trustManagers));
}
X509TrustManager trustManager = (X509TrustManager) trustManagers[0];

SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[] { trustManager }, null);
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();

OkHttpClient client = new OkHttpClient.Builder()
    .sslSocketFactory(sslSocketFactory, trustManager)
    .build();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM