Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了改进HTTPS连接无法在Android中运行大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我收到了一个信任锚错误.我为https连接尝试了 http://www.snip2code.com/Snippet/25364/Get-OkHttpClient-which-ignores-all-SSL-e,但这会返回错误.

D/Retrofit﹕ javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
        at com.android.org.conscrypt.openSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:328)

解决方法

尝试使用以下示例代码

private TrustManager[] getWrappedTrustManagers(TrustManager[] trustManagers) {
        final x509trustmanager originalTrustManager = (x509trustmanager) trustManagers[0];
        return new TrustManager[]{
                new x509trustmanager() {
                    public X509Certificate[] getAcceptedIssuers() {
                        return originalTrustManager.getAcceptedIssuers();
                    }
                    public void checkClientTrusted(X509Certificate[] certs,String authTypE) {
                        try {
                            originalTrustManager.checkClientTrusted(certs,authTypE);
                        } catch (CertificateException ignored) {
                        }
                    }
                    public void checkServerTrusted(X509Certificate[] certs,String authTypE) {
                        try {
                            originalTrustManager.checkServerTrusted(certs,authTypE);
                        } catch (CertificateException ignored) {
                        }
                    }
                }
        };
    }

    private SSLSocketFactory getSSLSocketFactory()
            throws CertificateException,KeyStoreException,IOException,NoSuchAlgorithmException,Keymanagementexception {
        CertificateFactory cf = CertificateFactory.geTinstance("X.509");
        InputStream caInput = getresources().openRawresource(R.raw.your_cert); // your certificate file
        Certificate ca = cf.generateCertificate(caInput);
        caInput.close();
        KeyStore keyStore = KeyStore.geTinstance("BKS");
        keyStore.load(null,null);
        keyStore.setCertificateEntry("ca",ca);
        String tmfalgorithm = TrustManagerFactory.getDefaultAlgorithm();
        TrustManagerFactory tmf = TrustManagerFactory.geTinstance(tmfalgorithm);
        tmf.init(keyStorE);
        TrustManager[] wrappedTrustManagers = getWrappedTrustManagers(tmf.getTrustManagers());
        SSLContext sslContext = SSLContext.geTinstance("TLS");
        sslContext.init(null,wrappedTrustManagers,null);
        return sslContext.getSocketFactory();
    }

然后,您可以在项目中设置OkhttpClient,如下所示:

okhttpClient.setSslSocketFactory(getSSLSocketFactory());

关于setHostnameVerifier,看起来你的问题链接中有一个解决方案.

希望这可以帮助!

大佬总结

以上是大佬教程为你收集整理的改进HTTPS连接无法在Android中运行全部内容,希望文章能够帮你解决改进HTTPS连接无法在Android中运行所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。