java 访问https忽略证书

该博客展示了如何在Java中创建HTTPS连接并忽略证书验证。通过自定义TrustManager和HostnameVerifier,实现了对任何服务器的信任,从而允许不受限制地访问HTTPS资源。示例代码包括设置TLS上下文、初始化不验证证书链的TrustManager,以及设置不验证主机名的HostnameVerifier。

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.X509Certificate;
import javax.net.ssl.SSLContext;
import javax.net.ssl.HttpsURLConnection;
import java.security.SecureRandom;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLSession;
import javax.security.cert.CertificateException;
public class HttpDemo {
	 private static final String SYS_VULLN_URL_JSON="https://10.65.80.34/api/template/webvuln/list?username=admin&password=pass23";
	final static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {

												public boolean verify(String hostname, SSLSession session) {
													return true;
												}
											};
  
Java中,通常访问HTTPS URL时,需要验证SSL证书的有效性以确保安全性。但如果出于某些原因(比如测试环境的自签名证书),需要忽略SSL证书的验证,可以通过安装一个自定义的TrustManager来实现。 这涉及到JavaSSL/TLS协议栈的底层操作。以下是一个示例代码,展示如何创建一个不进行证书验证的URL连接: ```java import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; public class SSLUtils { public static void disableSSLVerification() throws Exception { // 创建一个不进行任何操作的TrustManager(即信任所有证书) TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[]{}; } } }; // 通过TrustManager设置SSLContext SSLContext sc = SSLContext.getInstance("SSL"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // 取消主机名验证(如果需要) HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() { public boolean verify(String s, SSLSession sslSession) { return true; // 总是返回true,即不验证主机名 } }); } } ``` 在上述代码中,首先创建了一个自定义的`TrustManager`,它实际上不会对证书进行任何检查。然后,这个`TrustManager`被用来初始化`SSLContext`。最后,通过`HttpsURLConnection`设置默认的SSL套接字工厂和主机名验证器。 需要注意的是,这种做法仅应在完全了解其安全风险的情况下使用,且仅限于测试环境。在生产环境中,忽略SSL证书验证将使你的应用程序面临中间人攻击的风险。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值