HttpClient实现https的简单例子

参考:https://blog.csdn.net/orichisonic/article/details/79951460  (https实现)

          https://www.cnblogs.com/boycelee/p/6425325.html  (https详解)

(SSH详解)

https://mp.weixin.qq.com/s?src=11&timestamp=1575620980&ver=2017&signature=l0JMOHdKnIaY5myynb4qCAVgGNrsw-rsRz1fTvLa4lQjUhV9YBM6Ht0*guHi385w0TAXsvwAarfSr967oj3GsS4Z-8itxgQb2u37JG4VwksKTtg-*SPtyAIgxrvPd*J0&new=1

HTTPS:与SSL(安全套接层)组合使用的HTTP被称为HTTPS(超文本传输安全协议)

加密处理防止窃听:通信加密。HTTP协议与SSL组合使用,加密HTTP的通信内容。用SSL建立安全通信线路之后,就可以在这条线路通信了。

HTTP+加密+认证+完整性保护 = HTTPS

在使用http协议时,HTTP直接与TCP通信,当使用SSL时,则需要先与SSL通信,然后再有SSL和TCP通信

 

SSL是对计算机之间整个会话进行加密的协议。在SSL中,采用了公开密钥和私有密钥两种加密方法。

下面开始讲解https的小例子:

https其实是安全套接层SSL和http组合的,需要SSL证书,SSL证书可以通过CA机构申请得到,也可以本地自己生成(不安全),本次就自己在本地生成SSL证书,以访问https://www.alipay.com/为例子

1、浏览器(以chrome为例)访问https://www.alipay.com/,点击域名左侧的小锁,可以查看支付宝的证书信息,将支付包的证书信息导出,证书格式有很多中,der、cer等。随便选择即可。

2、命令行或者shell执行 keytool     -import -alias "my alipay cert" -file www.alipay.com.cert     -keystore my.store,

如果keytool命令不识别,去检查一下jdk的环境变量是否设置正确。”my alipay cert”是个别名,随便取。“www.alipay.com.cert”这个文件就是从浏览器中导出的支付宝的证书。“my.store”是生成的自己 的证书库文件。回车执行,效果如下:

 

接下来就是代码了,代码如下:

trustStore.load(instream, "123456".toCharArray()); 这个“123456”是秘钥库口令,你生成my.store自己设的口令。

用到的jar包有:commons-logging.jar   

                          fastjson-1.2.58.jar      JSONObject等用到

                          httpclient-4.5.9.jar       org.apache.http.impl.client.*用到

                          httpcore-4.4.11.jar       org.apache.http.client.* 用到

public class HttpsClient {
    public final static void main(String[] args) throws Exception {
        KeyStore trustStore  = KeyStore.getInstance(KeyStore.getDefaultType());
        //加载证书文件
        FileInputStream instream = new FileInputStream(new File("F:\\ideaWork\\HttpUtil\\src\\my.store"));
        try {
         //   trustStore.load(instream, "mypassword".toCharArray());
            trustStore.load(instream, "123456".toCharArray());
        } finally {
            instream.close();
        }
        SSLContext sslcontext = SSLContexts.custom().loadTrustMaterial(trustStore).build();
        SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext,
                SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
        CloseableHttpClient httpclient = HttpClients.custom()
                .setSSLSocketFactory(sslsf)
                .build();
        try
        {
            //访问支付宝
            HttpGet httpget = new HttpGet("https://www.alipay.com/");
            System.out.println("executing request" + httpget.getRequestLine());
            CloseableHttpResponse response = httpclient.execute(httpget);
            try {
                HttpEntity entity = response.getEntity();
                System.out.println("----------------------------------------");
                System.out.println(response.getStatusLine());
                if (entity != null) {
                    System.out.println(EntityUtils.toString(entity));
                }
            } finally {
                response.close();
            }
        } finally {
            httpclient.close();
        }
    }
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值