[HttpClient]SSL双向实例

package com.jerry.httpclient;

import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;

import javax.net.ssl.SSLContext;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
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.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/**
 *
 * @author Jerry
 * @date 2015年2月12日 下午11:38:33
 */
public class SSLDemo {

    public static final String KEY_STORE_TYPE_JKS = "jks";
    public static final String KEY_STORE_TYPE_P12 = "PKCS12";   

    public static void main(String[] args) throws Exception{
        KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);//服务器发给浏览器的KeyStore
        KeyStore trustStore = KeyStore.getInstance(KEY_STORE_TYPE_JKS);//浏览器发给服务器的KeyStore
        FileInputStream input = new FileInputStream(new File("d:\\tomcat.keystore"));
        FileInputStream keyInput = new FileInputStream("d:\\mykey.p12");
        trustStore.load(input, "123456".toCharArray());
        keyStore.load(keyInput, "123456".toCharArray());
        /*
         * 使用2个keystore创建sslcontext
         */
        SSLContext sslContext = SSLContexts.custom().useTLS().
                            loadTrustMaterial(trustStore, new TrustSelfSignedStrategy())
                            .loadKeyMaterial(keyStore, "123456".toCharArray())
                            .build();
        //通过sllcontext创建一个socket factory
        SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(sslContext);
        CloseableHttpClient client = HttpClients.custom().setSSLSocketFactory(sslFactory).build();
        HttpGet get = new HttpGet("https://localhost:8443/services");
        System.out.println("executing request: " + get.getRequestLine());
        CloseableHttpResponse response = client.execute(get);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            System.out.println("response content lenght: " + entity.getContentLength());
        }
        System.out.println(EntityUtils.toString(entity));
        EntityUtils.consume(entity);
    }
}
时间: 2024-07-30 10:11:29

[HttpClient]SSL双向实例的相关文章

tomcat配置SSL双向认证

一.SSL简单介绍 SSL(Secure Sockets Layer 安全套接层)就是一种协议(规范),用于保障客户端和服务器端通信的安全,以免通信时传输的信息被窃取或者修改. 怎样保障数据传输安全?  客户端和服务器端在进行握手(客户端和服务器建立连接和交换参数的过程称之为握手)时会产生一个“对话密钥”(session key),用来加密接下来的数据传输,解密时也是用的这个“对话密钥”,而这个“对话密钥”只有客户端和服务器端知道.也就是说只要这个“对话密钥”不被破解,就能保证安全. 2. 客户

Java的http请求客户端 HttpClient的使用实例

HttpClient的概念就是模仿浏览器请求服务端内容,也可以做App和Server之间的链接. 这个是关于Java的HttpClient的简单实例,其实java本身也可以通过自己的net包去做,但是在应用上还是HttpClient方便很多 地址是:http://hc.apache.org/downloads.cgi 下面是java的实例(这里使用了json的jar包,可以前往http://mvnrepository.com/artifact/org.json/json去寻找下载): 注意:jd

Nginx、SSL双向认证、PHP、SOAP、Webservice、https

本文是1:1模式,N:1模式请参见新的一篇博客<SSL双向认证(高清版)> ----------------------------------------------------- 我是分割线 --------------------------------------------------------- 标题太长了不知道该怎么起,索性就把keyword列出来吧~ WebService的WS-*搞了一天没搞定,看样子PHP应该是彻底抛弃SOAP协议了,google翻烂了也没找到什么靠谱的解

SSL双向认证(高清版)

介绍了SSL双向认证的一些基本问题,以及使用Nginx+PHP基于它搭建https的Webservice. 之前的方式只是实现1:1的模式,昨天同事继续实现了n:1的模式,这里我再整理记录下. 由于nginx的ssl_client_certificate参数只能指定一个客户端公钥,如果增加一个客户端进行通信就要重新配一个server. n:1的模式是通过CA的级联证书模式实现的,首先自己生成一套CA根级证书,再借助其生成二级证书作为client证书. 此时client私钥签名不仅可以通过对应的c

TOMCAT配置SSL双向握手

1.利用jre中的keytool工具生成服务器证书. 2. 配置tomcat的server.xml文件,利用keytool生成的证书即当根证,也当服务器证书使用. 3.将自建CA根证书导入到tomcat.keystore信任域中.作用:使根证信任自建CA所签发的用户证书实现SSL双向握手. 4.到此tomcat的双向SSL握手功能配置完毕. 5.tomcat支持单向/双向SSL同时开启.

TOMCAT配置SSL双向单向握手

1.利用jre中的keytool工具生成服务器证书. 2.配置tomcat的server.xml文件,利用keytool生成的证书即当根证,也当服务器证书使用. 3.将自建CA根证书导入到tomcat.keystore信任域中.作用:使根证信任自建CA所签发的用户证书实现SSL双向握手. 4.到此tomcat的双向SSL握手功能配置完毕. 5.tomcat支持单向/双向SSL同时开启. ? ?

SSL双向认证和SSL单向认证的流程和区别

refs: SSL双向认证和SSL单向认证的区别https://www.jianshu.com/p/fb5fe0165ef2 图解 https 单向认证和双向认证!https://cloud.tencent.com/developer/news/233610 SSL/TLS 双向认证(一) -- SSL/TLS工作原理https://blog.csdn.net/wuliganggang/article/details/78428866 双向认证 SSL 协议要求服务器和用户双方都有证书.单向认证

MQTT mosquitto[2]---- SSL双向认证的配置文件的Configuration的配置方式

我们知道,MQTT mosquitto支持单项和双向的SSL认证,在上一节中,我们已经给大家分享了单向的SSL如何配置,在这一节中咱们来看一下双向的SSL认证的配置文件应该如何配置? 那么什么是双向的SSL认证呢?所谓的双向的SSL认证,打个通俗的比方就是,在进行SSL加密通信前,通信的双方(在咱们的例子中是mosquitto服务器端和MQTT客户端(消息的发送或者接收端))需要相互验证各自的证书是否合法.比如,是否是一个合法的CA颁发的等等. 在上一节提到,我们知道启动MQTT mosquit

【密码学】ssl双向认证和单向认证原理

有朋友在搞一个项目,周末有聊到一些安全性的东西,很自然会想起https,但https究竟如何实施,其原理又是什么? 基于ssl,一般的应用都是单向认证,如果应用场景要求对客户来源做验证也可以实现成双向认证. 网上google一下: 为了便于更好的认识和理解 SSL 协议,这里着重介绍 SSL 协议的握手协议.SSL 协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术.SSL 的握手协议非常有效的让客户和服务器之间完成相互