Java爬虫--Https绕过证书

本文提供了一种在Java中绕过HTTPS证书验证的方法,通过创建一个信任所有证书的自定义证书管理器,允许应用程序忽略证书错误,这对于测试或访问自签名证书的站点非常有用。

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

  https网站服务器都是有证书的。 是由网站自己的服务器签发的,并不被浏览器或操作系统广泛接受。

  在使用CloseableHttpClient时经常遇到证书错误(知乎的网站就是这样)

  现在需要SSL绕过证书,下面直接贴出代码,调用时只需要在发送请求后  new  HttpsBerBer(文件的字节码) ; 

 1 import javax.net.ssl.HostnameVerifier;
 2 import javax.net.ssl.HttpsURLConnection;
 3 import javax.net.ssl.SSLSession;
 4 import java.util.logging.Logger;
 5 
 6 public class HttpsBerBer {
 7     public HttpsBerBer(String name) throws Exception {
 8         logger = Logger.getLogger(name);
 9         trustAllHttpsCertificates();
10         HostnameVerifier hv = new HostnameVerifier() {
11             public boolean verify(String urlHostName, SSLSession session) {
12                 logger.info("Warning: URL Host: " + urlHostName + " vs. " + session.getPeerHost());
13                 return true;
14             }
15         };
16         HttpsURLConnection.setDefaultHostnameVerifier(hv);
17     }
18     private static Logger logger ;
19     private static void trustAllHttpsCertificates() throws Exception {
20         javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];
21         javax.net.ssl.TrustManager tm = new miTM();
22         trustAllCerts[0] = tm;
23         javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext
24                 .getInstance("SSL");
25         sc.init(null, trustAllCerts, null);
26         javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc
27                 .getSocketFactory());
28     }
29     static class miTM implements javax.net.ssl.TrustManager,
30             javax.net.ssl.X509TrustManager {
31         public java.security.cert.X509Certificate[] getAcceptedIssuers() {
32             return null;
33         }
34 
35         public boolean isServerTrusted(
36                 java.security.cert.X509Certificate[] certs) {
37             return true;
38         }
39 
40         public boolean isClientTrusted(
41                 java.security.cert.X509Certificate[] certs) {
42             return true;
43         }
44 
45         public void checkServerTrusted(
46                 java.security.cert.X509Certificate[] certs, String authType)
47                 throws java.security.cert.CertificateException {
48             return;
49         }
50 
51         public void checkClientTrusted(
52                 java.security.cert.X509Certificate[] certs, String authType)
53                 throws java.security.cert.CertificateException {
54             return;
55         }
56     }
57 }

  

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值