美文网首页
OKDownload 下载https 文件报错java.sec

OKDownload 下载https 文件报错java.sec

作者: 念念不忘_2016 | 来源:发表于2023-08-04 18:38 被阅读0次
// 在初始化OkDownload之前设置忽略证书验证
    OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient.Builder().sslSocketFactory(SSLHelper.getTrustAllSSLSocketFactory(), SSLHelper.getTrustAllManager()).hostnameVerifier((hostname, session) -> true);
    OkDownload.Builder builder = new OkDownload.Builder(Utils.getApp()).connectionFactory((new DownloadOkHttp3Connection.Factory().setBuilder(okHttpClientBuilder)));

    OkDownload.setSingletonInstance(builder.build());

SSLHelper类如下


import java.io.InputStream;
import java.security.KeyStore;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import javax.net.ssl.*;

public class SSLHelper {

   // 获取TrustManager
   public static X509TrustManager getTrustManager(InputStream certInputStream) {
      try {
         CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
         X509Certificate certificate = (X509Certificate) certificateFactory.generateCertificate(certInputStream);

         // 创建TrustManager并返回
         KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
         keyStore.load(null, null);
         keyStore.setCertificateEntry("ca", certificate);

         TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
         trustManagerFactory.init(keyStore);
         TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();
         return (X509TrustManager) trustManagers[0];
      } catch (Exception e) {
         e.printStackTrace();
         return null;
      }
   }

   // 获取自签名证书的SSL Socket Factory
   public static SSLSocketFactory getSSLSocketFactory(InputStream certInputStream) {
      try {
         SSLContext sslContext = SSLContext.getInstance("TLS");
         sslContext.init(null, new TrustManager[]{getTrustManager(certInputStream)}, null);
         return sslContext.getSocketFactory();
      } catch (Exception e) {
         e.printStackTrace();
         return null;
      }
   }

   // 获取一个信任所有证书的SSL Socket Factory
   public static SSLSocketFactory getTrustAllSSLSocketFactory() {
      try {
         SSLContext sslContext = SSLContext.getInstance("TLS");
         sslContext.init(null, new TrustManager[]{new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain, String authType) {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] chain, String authType) {
            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
               return new X509Certificate[0];
            }
         }}, null);
         return sslContext.getSocketFactory();
      } catch (Exception e) {
         e.printStackTrace();
         return null;
      }
   }

   // 获取一个信任所有证书的TrustManager
   public static X509TrustManager getTrustAllManager() {
      return new X509TrustManager() {
         @Override
         public void checkClientTrusted(X509Certificate[] chain, String authType) {
         }

         @Override
         public void checkServerTrusted(X509Certificate[] chain, String authType) {
         }

         @Override
         public X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
         }
      };
   }
}





相关文章

网友评论

      本文标题:OKDownload 下载https 文件报错java.sec

      本文链接:https://www.haomeiwen.com/subject/oszvpdtx.html