OKHTTP sslsocketfactory 过期,解决方案

报错:clientBuilder.sslSocketFactory(SSLSocketFactory) not supported on JDK 9+

原因是单参数的 构造函数 被弃用。

            try {

                TrustManagerFactory trustManagerFactory = null;

                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 okHttpClient = new OkHttpClient.Builder()

                        .sslSocketFactory(sslSocketFactory, trustManager).build()

                }catch(Exception e){}

在遇到双向证书的情况下,需要指定keymanager 以及TrustManager 如微信支付,发生企业支付,企业转账的时候。对上述代码进行更改如下

try {

            TrustManagerFactory trustManagerFactory = null;

            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];

            KeyStore keystore = KeyStore.getInstance("PKCS12");

            char[] keyPassword = tradeNumber.toCharArray();

            //证书密码

            keystore.load(resource.getInputStream(), keyPassword);

            SSLContext wx_ssl_context = SSLContext.getInstance("TLS");

            KeyManagerFactory kmfactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());

            kmfactory.init(keystore, keyPassword);

            wx_ssl_context.init(kmfactory.getKeyManagers(), new TrustManager[]{trustManager}, new SecureRandom());

            SSLSocketFactory sslSocketFactory = wx_ssl_context.getSocketFactory();

            OkHttpClient okHttpClient = new OkHttpClient.Builder()

                    .sslSocketFactory(sslSocketFactory, trustManager).connectionPool(new ConnectionPool(300, 3, TimeUnit.MINUTES)).build();

        } catch (Exception e) {

            e.printStackTrace();

        }

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容