解决 Received fatal alert: handshake_failure 的问题

本文介绍了一个Java程序如何通过创建自定义的信任管理器和主机名验证器来发送HTTPS请求,并忽略证书错误,适用于需要连接到不受信任的HTTPS服务器的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

废话少说直接上代码

Java代码

import java.io.DataInputStream;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.OutputStream;  
import java.net.ConnectException;  
import java.net.URL;  
import java.security.cert.CertificateException;  
import java.security.cert.X509Certificate;  
  
import javax.net.ssl.HostnameVerifier;  
import javax.net.ssl.HttpsURLConnection;  
import javax.net.ssl.SSLContext;  
import javax.net.ssl.SSLSession;  
import javax.net.ssl.TrustManager;  
import javax.net.ssl.X509TrustManager;  
  
import com.company.TestLogger;  
  
  
public class Test {  
    private static TestLogger logger = TestLogger.getLogger(TrustSSL.class);  
  
    private static class TrustAnyTrustManager implements X509TrustManager {  
  
        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
        }  
  
        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {  
        }  
  
        public X509Certificate[] getAcceptedIssuers() {  
            return new X509Certificate[] {};  
        }  
    }  
  
    private static class TrustAnyHostnameVerifier implements HostnameVerifier {  
        public boolean verify(String hostname, SSLSession session) {  
            return true;  
        }  
    }  
  
    public static String sendHttps(String url) throws Exception {  
        InputStream in = null;  
        OutputStream out = null;  
        String returnValue = "";  
        try {  
            //SSLContext sc = SSLContext.getInstance("SSL");  
            System.setProperty("https.protocols", "TLSv1");  
            SSLContext sc = SSLContext.getInstance("TLSv1");  
            sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());  
            URL console = new URL(url);  
            HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();  
            conn.setSSLSocketFactory(sc.getSocketFactory());  
            conn.setHostnameVerifier(new TrustAnyHostnameVerifier());  
            conn.connect();  
            InputStream is = conn.getInputStream();  
            DataInputStream indata = new DataInputStream(is);  
            returnValue = indata.readLine();              
            conn.disconnect();  
        } catch (ConnectException e) {  
            logger.logError(e.getMessage());  
            logger.logError(e);  
            throw e;  
  
        } catch (IOException e) {  
            logger.logError(e.getMessage());  
            logger.logError(e);  
            throw e;  
        } finally {  
            try {  
                in.close();  
            } catch (Exception e) {  
            }  
            try {  
                out.close();  
            } catch (Exception e) {  
            }  
        }  
        return returnValue;  
    }  
      
    public static void main(String[] args) throws Exception {  
        System.out.println(sendHttps("https://test.com/get.do"));  
    }  
}  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值