https 忽略 证书 发送请求

Posted 跳刀玛利亚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了https 忽略 证书 发送请求相关的知识,希望对你有一定的参考价值。

package com.guohuai.organization;


import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.conn.ClientConnectionManager;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.conn.ssl.X509HostnameVerifier;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParams;
import org.apache.http.params.HttpProtocolParams;
import org.apache.http.protocol.HTTP;

 

public class CertificateValidationIgnored {

public static HttpClient getNoCertificateHttpClient(String url){
return getCertificateValidationIgnoredHttpClient();
}

private static HttpClient getCertificateValidationIgnoredHttpClient() {
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore
.getDefaultType());
trustStore.load(null, null);
//核心代码,创建一个UnVerifySocketFactory对象,验证证书时总是返回true
SSLSocketFactory sf = new UnVerifySocketFactory(trustStore);

HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(
params, registry);
return new DefaultHttpClient(ccm, params);
} catch (Exception e) {
System.out.println("CertificateValidationIgnored ::::::::::::创建忽略用户证书的HttpClient对象失败,尝试创建普通HttpClient对象");
e.printStackTrace();
return new DefaultHttpClient();
}
}


/**
* 核心类
* UnVerifySocketFactory:一个验证证书时总是返回true的SSLSocketFactory的子类
*/
private static X509HostnameVerifier ignoreVerifier;
private static class UnVerifySocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");

public UnVerifySocketFactory(KeyStore truststore)
throws NoSuchAlgorithmException, KeyManagementException,
KeyStoreException, UnrecoverableKeyException {
super(truststore);

TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}

public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}

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

sslContext.init(null, new TrustManager[] { tm }, null);
}

@Override
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException, UnknownHostException {
return sslContext.getSocketFactory().createSocket(socket, host,
port, autoClose);
}

//核心代码
@Override
public void setHostnameVerifier(X509HostnameVerifier hostnameVerifier) {
// TODO Auto-generated method stub
ignoreVerifier = new X509HostnameVerifier() {
@Override
public void verify(String arg0, String[] arg1, String[] arg2)
throws SSLException {
}
@Override
public void verify(String arg0, X509Certificate arg1)
throws SSLException {
}
@Override
public void verify(String arg0, SSLSocket arg1)
throws IOException {
}

//最最核心代码
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
};
super.setHostnameVerifier(ignoreVerifier);
}

@Override
public X509HostnameVerifier getHostnameVerifier() {
return ignoreVerifier;
}

@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}
}

}

 

 

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

@Transactional
public void saveOrganizationUserAccountDate(String urlstr){

if (this.jobLockService.getRunPrivilegeOfOrgnization(JobEnum.JOB_jobId_organizationUserAccount.getJobId())) {
JobLogEntity jobLog = JobLogFactory.getInstance(JobEnum.JOB_jobId_organizationUserAccount.getJobId());
try {

HttpClient httpClient = CertificateValidationIgnored.getNoCertificateHttpClient(urlstr);


Map<String,String> createMap = new HashMap<String,String>();
String charset = "utf-8";
HashMap<String, String> headers = new HashMap<String, String>();
HttpGet httpGet = null;
String result = null;
try{

httpGet = new HttpGet(urlstr);

//设置参数
ArrayList<NameValuePair> list = new ArrayList<NameValuePair>();
Iterator iterator = createMap.entrySet().iterator();
while(iterator.hasNext()){
Entry<String,String> elem = (Entry<String, String>) iterator.next();
list.add(new BasicNameValuePair(elem.getKey(),elem.getValue()));
}
if(list.size() > 0){
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list,charset);
//httpGet.setEntity(entity);

}
HttpResponse resp = httpClient.execute(httpGet);
if(resp != null){
HttpEntity resEntity = resp.getEntity();
if(resEntity != null){
result = EntityUtils.toString(resEntity,charset);
}

if(result != null){

JSONObject jsonObject = JSONObject.parseObject(result);
List<UserAccountEntity> listresult = new ArrayList<UserAccountEntity>();
List<UserAccountEntity> userList = JSON.parseArray(jsonObject.get("data").toString(), UserAccountEntity.class);
organizationDao.clearUserAccountTDate();
organizationDao.save(userList);
System.out.println("userAccount更新成功");
}else{
System.out.println("OA系统访问接口异常");
}


}
}catch(Exception ex){
ex.printStackTrace();
}

} catch (Exception e) {
logger.error(e.getMessage(), e);
jobLog.setJobMessage(AMPException.getStacktrace(e));
jobLog.setJobStatus(JobLogEntity.JOB_jobStatus_failed);
}
jobLog.setBatchEndTime(new Timestamp(System.currentTimeMillis()));
this.jobLogService.saveEntity(jobLog);
this.jobLockService.resetJob(JobEnum.JOB_jobId_organizationUserAccount.getJobId());
}






}

 

 

---------------------------------------------------------------------------------------------------------------------------------------------

 

留着自己用哈   

 

以上是关于https 忽略 证书 发送请求的主要内容,如果未能解决你的问题,请参考以下文章

c# https请求忽略证书验证_各种编程语言忽略http的SSL证书认证

Python 发送带自签名证书的 https 请求

groovy http 忽略ssl

通过 Apache Commons HttpClient 发送 HTTPS 请求

用java做一个httpClient 发送https 的get请求,需要证书验证的那种,求大神指点一下!

ssl时如何忽略证书检查