发送https忽略证书和用户验证

本文介绍了一种在Java中使用HTTPS请求时忽略证书验证的方法,通过实现X509TrustManager接口并重写其方法,使得在调用HTTPS服务时不会因证书问题而失败。此外,还展示了如何设置HostnameVerifier来忽略主机名验证。

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

之前和别的公司平台做对接时,使用了http,现在要求改为使用https来请求,这就需要我们修改请求方法,因为对方平台为提供证书,所以我们在访问的时候采用了忽略证书并忽略用户的方式
在开发过程中主要用到了httpclient.jar和httpcore.jar两个jar,我们的平台使用的版本比较老,好像是4.2版本的
首先我们要实现X509TrustManager,重写其方法,使我们在调用的时候忽略证书

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;


public class test implements X509TrustManager{

	public static void main(String[] args) {
		 String postVal = "{\"PLAN_DATE\":\"2018-09-26\",\"MILESTONE_NAME\":\"DELIVERY STEAM TURBINE 1\"," +
			   		" \"MILESTONE_CODE\":\"PMON---063\",\"REPORT_TIME\":\"2018-11-13\", \"ORG_CODE\":\"\",\"PROJECT_CODE\":\"\"," +
			   		" \"UPDATE_TIME\":\"2018-11-13\",\"IS_PLAN_DATE_CHANGE\":\"1\",\"COMPLETE_DATE\":\"\"}";
		String url = "https://xxx.xxx.xxx.xxx:xxxx/milestone";
		url = "https://blog.youkuaiyun.com/";
		  String s=httpsRequest(url,"POST",postVal);  
		  System.out.println(s);  
	}

	@Override
	public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
	}
	@Override
	public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
	}
		//重写,直接ruturn null,忽略证书
	@Override
	public X509Certificate[] getAcceptedIssuers() {
		return null;
	}
	
	 public static String httpsRequest(String requestUrl,String requestMethod,String outputStr){  
	        StringBuffer buffer=null;  
	        try{  
	        //创建SSLContext  
	        SSLContext sslContext=SSLContext.getInstance("TLS");  
	        TrustManager[] tm={new test()};  
	        //初始化  
	        sslContext.init(null, tm, new java.security.SecureRandom());;  
	        //获取SSLSocketFactory对象  
	        SSLSocketFactory ssf=sslContext.getSocketFactory();  

 			 //如果是Tomcat服务器,可直接写,如果是weblogic,用  url = new URL(null,urlString,new sun.net.www.protocol.https.Handler()); 
	        URL url=new URL(requestUrl);  	      
	        HttpsURLConnection conn=(HttpsURLConnection)url.openConnection();  
	        
	        conn.setDoOutput(true);  
	        conn.setDoInput(true);  
	        conn.setUseCaches(false);  
	        conn.setRequestMethod(requestMethod);  
	        //设置忽略用户,如果不设置,请求优快云,可能会获取不到网页信息,而是其他信息
	        conn.setHostnameVerifier(new HostnameVerifier() {
				@Override
				public boolean verify(String hostname, SSLSession session) {
					return true;
				}
			});
	        //设置当前实例使用的SSLSoctetFactory  
	        conn.setSSLSocketFactory(ssf);  
	        conn.connect();  
	        //往服务器端写内容  
	        if(null!=outputStr){  
	            OutputStream os=conn.getOutputStream();  
	            os.write(outputStr.getBytes("utf-8"));  
	            os.close();  
	        }  
	          
	        //读取服务器端返回的内容  
	        InputStream is=conn.getInputStream();  
	        InputStreamReader isr=new InputStreamReader(is,"utf-8");  
	        BufferedReader br=new BufferedReader(isr);  
	        buffer=new StringBuffer();  
	        String line=null;  
	        while((line=br.readLine())!=null){  
	            buffer.append(line);  
	        }  
	        }catch(Exception e){  
	            e.printStackTrace();  
	        }  
	        return buffer.toString();  
	    }  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值