Java URLConnection下载文件忽略https证书验证

该代码片段展示了如何在Java中创建一个自定义的信任管理器,允许忽略HTTPS连接的证书验证。通过继承X509ExtendedTrustManager并覆盖其方法,所有服务器证书都将被视为可信。此外,还提供了一个SSLContext的静态实例,用于设置不验证证书的HTTPS连接。
摘要由CSDN通过智能技术生成
public class HttpUtils {


    /*
     * HTTPS忽略证书验证,防止因证书算法不符合约束条件,使用继承X509ExtendedTrustManager的方式
     */
    public static class VulX509TrustManager extends X509ExtendedTrustManager {

        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
        }

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

        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1, Socket arg2) throws CertificateException {
        }

        @Override
        public void checkClientTrusted(X509Certificate[] arg0, String arg1, SSLEngine arg2)
                throws CertificateException {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1, Socket arg2) throws CertificateException {
        }

        @Override
        public void checkServerTrusted(X509Certificate[] arg0, String arg1, SSLEngine arg2)
                throws CertificateException {
        }
    }



    private static SSLContext X509TrustManagerIgnoreCertificate() {
        TrustManager[] tm = { new VulX509TrustManager() };
        SSLContext ctx = null;
        try {
            ctx = SSLContext.getInstance("TLS");
            ctx.init(null, tm, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ctx;
    }

    private static final class SslContextInstanceHolder {
        static final SSLContext sslContextInstance = X509TrustManagerIgnoreCertificate();
    }

    public static SSLContext getSslContextIgnoreCertInstance() {
        return SslContextInstanceHolder.sslContextInstance;
    }
url = new URL(url);//eg:url=https://repo1.maven.org/maven2/org/codehaus/plexus/plexus-utils/3.0.15/plexus-utils-3.0.15.jar
File file = new File(filePath);//下载的目标位置eg filePath=E:\plexus-utils-3.0.15.jar
InetSocketAddress addr = new InetSocketAddress("xxx.xx", 端口号); // proxy
proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
HttpsURLConnection urlOnnection = (HttpsURLConnection) url.openConnection(proxy);
                SSLContext sslContextIgnoreCertInstance = HttpUtils.getSslContextIgnoreCertInstance();
                urlOnnection.setSSLSocketFactory(sslContextIgnoreCertInstance.getSocketFactory());
                urlOnnection.setHostnameVerifier(new HostnameVerifier() {
                    @Override
                    public boolean verify(String arg0, SSLSession arg1) {
                        return true;
                    }
                });
InputStream inputStream = urlOnnection.getInputStream();
FileUtils.copyInputStreamToFile(inputStream, file);
//至此,下载成功,位置在filePath
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值