文档章节

httpclient 4 忽略ssl证书

chenganshi
 chenganshi
发布于 2016/09/17 22:51
字数 271
阅读 411
收藏 2
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.DefaultHostnameVerifier;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContexts;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.TrustStrategy;
import org.apache.http.util.EntityUtils;

import javax.net.ssl.SSLContext;
import java.io.IOException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

/**
 * Created by chenganshi on 16/9/17.
 */
public class Test2 {

    public static void main(String[] args) throws Exception {
        /*CloseableHttpClient httpClient = HttpClients.custom()
                .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE)
                .build();
        httpClient.execute(new HttpGet("https://kyfw.12306.cn/otn/regist/init"));*/
        main2();
    }

    public static void main2() throws Exception {
        SSLContext sslContext = SSLContexts.custom()
                .loadTrustMaterial(new TrustStrategy() {
                    @Override
                    public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                        return true;
                    }
                })
                .build();
        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                sslContext,
                NoopHostnameVerifier.INSTANCE);
        /*SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                sslContext,
                new DefaultHostnameVerifier());*/
        /*SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                sslContext);*/
        PlainConnectionSocketFactory plainConnectionSocketFactory = new PlainConnectionSocketFactory();
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("https", sslsf)
                .register("http", plainConnectionSocketFactory)
                .build();
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
        CloseableHttpClient httpClient = HttpClients.custom()
                .setConnectionManager(connectionManager)
                .build();
        ResponseHandler<String> handler = new ResponseHandler<String>() {
            @Override
            public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException {
                return EntityUtils.toString(response.getEntity(), "UTF-8");
            }
        };
        String baidu = httpClient.execute(new HttpGet("http://www.baidu.com"), handler);
        System.out.println("baidu[" + baidu + "]");
        String ticket = httpClient.execute(new HttpGet("https://kyfw.12306.cn/otn/regist/init"), handler);
        //报错,证书和域名不匹配!Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: Host name '211.162.177.45' does not match the certificate subject provided by the peer (CN=kyfw.12306.cn, OU=铁路客户服务中心, O=Sinorail Certification Authority, C=CN)
        //String ticket = httpClient.execute(new HttpGet("https://211.162.177.45/otn/regist/init"), handler);
        System.out.println("ticket[" + ticket + "]");

        String gitosc = httpClient.execute(new HttpGet("https://git.oschina.net/"), handler);
        System.out.println("--------");
        System.out.println(gitosc);
    }

}

© 著作权归作者所有

chenganshi
粉丝 2
博文 106
码字总数 38150
作品 0
闵行
程序员
私信 提问
加载中

评论(1)

esdeath
esdeath
感谢,有用到
nginx + tomcat + java SSL客服端

=====nginx + tomcat + java SSL客服端======= 1. 通过keytool 生成密钥库 【注意 CN 为服务端访问域名地址或者IP地址或者主机名 比如 config.ebnew.com】(密钥库密码为:bidconfig) keytool...

愚者00
2015/01/16
720
0
Spring Security 3和CAS 3.5.2集成的完整实例

回顾 在上一篇文章,利用Spring Security 3.2的remember-me搭建SSO,我做了一个简单的单点登录。但其毕竟不够健壮,比如无法点单登出,也无法与非Spring Security的应用集成。今天,我将使用...

xpbug
2014/03/04
6.7K
21
HttpClientUtil 工具

import org.apache.http.*; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHtt......

心月狐
2018/10/08
0
0
android httpClient 支持HTTPS的2种处理方式

问题: 项目中Android https或http请求地址重定向为HTTPS的地址,相信很多人都遇到了这个异常(无终端认证): javax.net.ssl.SSLPeerUnverifiedException: No peer certificate 解决过程: 1....

blackylin
2013/07/11
51.8K
11
利用java实现的一个发送手机短信的小例子

今天闲来无事,在微博上看到一个关于用java实现的一个发送手机短信的程序,看了看,写的不太相信,闲的没事,把他整理下来,以后可能用得着 JAVA发送手机短信,流传有几种方法:(1)使用webserv...

长平狐
2012/11/12
369
1

没有更多内容

加载失败,请刷新页面

加载更多

华为手机翻译功能怎么使用?这三种方法请务必收藏

华为手机翻译功能怎么使用?在我们的生活中会经常遇到翻译问题,许多外语不好的朋友该怎么办呢?华为手机已经为我们解决了这个问题,今天小编就教大家学会使用华为手机中的三种翻译技巧,需要...

翻译小天才
16分钟前
2
0
企业服务软件开发中需要注意的三个问题

在开发企业服务软件时,我们需要分为:业务需求、用户需求、产品需求,三大需求层次,三个层次互相关联,企业服务软件开发首先要服务业务,需要满足业务的需求,再关注用户体验,也就是用户需...

积木创意科技
19分钟前
2
0
C++容器底层数据结构

内置数组: int arr[10][10];memset(arr,0,10*10*sizeof(int)); //初始化int tmp[10][10];memcpy(arr, tmp, 10 * 10 * sizeof(int));//拷贝 void *memcpy(void *destin, void *source,......

SibylY
19分钟前
2
0
Dubbo-自适应拓展机制

背景 在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等,这些都是Dubbo的基础组件。这些基础组件的拓展不是在系统框架启动阶段被加载,而是拓展方...

rock-man
48分钟前
7
0
Kali安装fcitx输入法(五笔)

安装fcitx > sudo apt-get install fcitx-rime fcitx-config-gtk3 重启 > sudo reboot fcitx配置 效果就是这样 配置输入法切换 系统设置...

yeahlife
49分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部