httpclient 4.5.2 https协议时忽略服务器证书
来源:互联网 发布:怎么去做淘宝 编辑:程序博客网 时间:2024/05/13 01:03
1maven dependencedependency> groupId>org.apache.httpcomponentsgroupId> artifactId>httpclientartifactId> version>4.5.2version>dependency>2. 测试类package com.iraid.test; import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.security.KeyStore; import javax.net.ssl.SSLContext; import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpPost;import org.apache.http.config.Registry;import org.apache.http.config.RegistryBuilder;import org.apache.http.conn.HttpClientConnectionManager;import org.apache.http.conn.socket.ConnectionSocketFactory;import org.apache.http.conn.socket.PlainConnectionSocketFactory;import org.apache.http.conn.ssl.SSLConnectionSocketFactory;import org.apache.http.conn.ssl.SSLContexts;import org.apache.http.conn.ssl.TrustSelfSignedStrategy;import org.apache.http.entity.ContentType;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.util.EntityUtils; /** * 使用 httpclient4.5 进行 https 通讯, * 采用双向认证, 连接池管理connection * * @author wangfeihu * */public class HttpClientforSSL { public static HttpClientConnectionManager CONNECTION_MANAGER = null; /** * 初始化 connection manager. * @param keyStoreFile * @param keyStorePass * @param trustStoreFile * @param trustStorePass * @throws Exception */ public void init(String keyStoreFile, String keyStorePass, String trustStoreFile, String trustStorePass) throws Exception { System.out.println("init conection pool..."); InputStream ksis = new FileInputStream(new File(keyStoreFile));// 私钥证书 InputStream tsis = new FileInputStream(new File(trustStoreFile));// 信任证书库 KeyStore ks = KeyStore.getInstance("PKCS12"); ks.load(ksis, keyStorePass.toCharArray()); KeyStore ts = KeyStore.getInstance("JKS"); ts.load(tsis, trustStorePass.toCharArray()); SSLContext sslContext = SSLContexts.custom() .loadKeyMaterial(ks, keyStorePass.toCharArray()) // 如果有 服务器证书 .loadTrustMaterial(ts, new TrustSelfSignedStrategy()) // 如果没有服务器证书,可以采用自定义 信任机制 // .loadTrustMaterial(null, new TrustStrategy() { // // // 信任所有 // public boolean isTrusted(X509Certificate[] arg0, // String arg1) throws CertificateException { // return true; // } // // }) .build(); SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); Registry registry = RegistryBuilder . create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", sslsf).build(); ksis.close(); tsis.close(); CONNECTION_MANAGER = new PoolingHttpClientConnectionManager(registry); } /** * do post * @param url * @param params * @throws Exception */ public void post(String url, String params) throws Exception { if (CONNECTION_MANAGER == null) { return; } CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(CONNECTION_MANAGER).build(); HttpPost httpPost = new HttpPost(url); httpPost.setEntity(new StringEntity(params, ContentType.APPLICATION_JSON)); CloseableHttpResponse resp = httpClient.execute(httpPost); System.out.println(resp.getStatusLine()); InputStream respIs = resp.getEntity().getContent(); String content = convertStreamToString(respIs); System.out.println(content); EntityUtils.consume(resp.getEntity()); } public static String convertStreamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder sb = new StringBuilder(); String line = null; try { while ((line = reader.readLine()) != null) { sb.append(line + "/n"); } } catch (IOException e) { e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { e.printStackTrace(); } } return sb.toString(); }
如果没有证书或者秘钥上面的init方法直接可以写成这样:
/** * httpclient4.5.2版 * 忽略服务器证书,采用信任机制 * @return */public static HttpClientConnectionManager init(){try {SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, new TrustStrategy() {@Overridepublic boolean isTrusted(X509Certificate[] arg0, String arg1)throws CertificateException {// TODO Auto-generated method stubreturn true;}}).build();SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( sslContext, new String[] { "TLSv1" }, null, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);Registry registry = RegistryBuilder . create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", sslsf).build(); return new PoolingHttpClientConnectionManager(registry);} catch (Exception e) {e.printStackTrace();}return null;}在main方法中调用getConn方法
public static void main(String[] args) {HttpClientConnectionManager clientConnectionManager = init();if(clientConnectionManager != null){CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(clientConnectionManager).build();String url = "http://admod-analyse.com:8080";getConn(httpClient, url);}}
原文地址:http://www.68iis.com/server/Linuxserver/4181_2.html
0 0
- httpclient 4.5.2 https协议时忽略服务器证书
- httpclient https忽略证书
- HttpClient忽略证书访问HTTPS接口
- httpclient https忽略证书直接请求
- HttpClient忽略证书访问HTTPS接口
- httpclient忽略证书验证允许https请求
- HttpClient忽略证书访问HTTPS接口()
- HttpClient忽略证书访问HTTPS接口
- httpclient/RestTemplate,asynchttpclient设置忽略https,ssl证书
- httpclient发送https的get请求忽略证书
- 【Android Trick 2】HTTPS请求忽略证书
- https 忽略证书
- OKHttp HTTPS 请求支持所有Https服务器 证书验证忽略客户端证书,(3)
- android https HttpsURLConnection 忽略证书
- java 访问https忽略证书
- HttpPost忽略证书请求https
- okhttp3.0忽略https证书
- 通过HttpClient调用接口时忽略SSL证书验证
- 沉浸式
- CVI多线程数据保护(安全队列)
- SwipeRefreshLayout和RecyclerView的结合使用
- 演进分组系统的几个概念 EPS/EPC/SAE/LTE/EUTRAN
- 内核代码宏中 do{...}while(0) 的作用
- httpclient 4.5.2 https协议时忽略服务器证书
- 流程图画法及练习
- 第一行代码笔记,第四章-------探究碎片
- 内存泄漏专题分析
- TextField
- html5解决大文件断点续传
- java中与接口有关的匿名类详解
- weblogic下发步骤使用命令行代替控制台界面
- 会计科目****不能使用(请更正)