什么是HTTPS

严格地讲,HTTPS并不是一个单独的协议,而是对工作在一加密连接(TLS或SSL)上的常规HTTP协议的称呼。

TLS/SSL

关于TLS/SSL的介绍网上已经有很多,大家可以参考《SSL/TLS协议运行机制的概述》和 《图解SSL/TLS协议》中的介绍

Java与HTTPS

JDK中对 HTTPS 版本的支持情况

JDK 6

SSL v3

TLS v1(默认)

TLS v1.1(JDK6 update 111 及以上)

JDK 7

SSLv3

TLS v1(默认)

TLS v1.1

TLS v1.2

JDK 8

SSL v3

TLS v1

TLS v1.1

TLS v1.2(默认)

Java在使用HTTPS时遇到的问题

首先看一个错误:

java.net.SocketException: Connection reset

at java.net.SocketInputStream.read(SocketInputStream.java:196)

at java.net.SocketInputStream.read(SocketInputStream.java:122)

at sun.security.ssl.InputRecord.readFully(InputRecord.java:442)

at sun.security.ssl.InputRecord.read(InputRecord.java:480)

at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:934)

at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332)

at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1359)

at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1343)

at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)

at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1301)

at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)

at httpsTest.HttpsSendTest.basicHttpsGet(HttpsSendTest.java:38)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)

at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)

at org.junit.runners.ParentRunner.run(ParentRunner.java:236)

at org.junit.runner.JUnitCore.run(JUnitCore.java:157)

at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)

at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)

at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)

at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

背景

最近在使用的第三方接口升级了TLS协议,只支持TLSv1.2,而我们的机器使用的JDK版本为JDK1.7,默认使用的是TLSv1,所以当服务端只支持TLSv1.2时会报异常

解决

解决方案很简单,只需要在启动参数加上-Dhttps.protocols=TLSv1.2即可

下面我们验证下此解决方案是否有效

使用 HttpURLConnection发送HTTPS请求访问百度(未修改启动参数)

/**

* Created by wujiang on 2017/6/30.

*/

public class HttpsSendTest {

@Test

public void basicHttpsGet() throws Exception {

String url = "https://www.baidu.com";

URL obj = new URL(url);

SSLContext sslContext = SSLContext.getInstance("TLSv1.2");

sslContext.init(null, null, null);

HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

con.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) ...");

con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

con.setRequestMethod("GET");

InputStream inputStream = con.getInputStream();

Scanner scanner = new Scanner(inputStream, "UTF-8");

String text = scanner.useDelimiter("\\A").next();

System.out.println(text);

scanner.close();

}

}

通过wireShark抓包可以看到使用的协议为TLSv1(JDK1.7)

修改启动参数(jdk1.7)

再次请求 可以看到协议变为TLSv1.2

使用JDK1.8我们再看看

JAVA免费https,Java与HTTPS相关推荐

  1. java免费游戏,java – 分配免费游戏

    我的代码基本上是免费分配的,但是当60fps时,GC每30秒运行一次.使用DDMS检查应用程序以进行分配显示有大量的SimpleListIterator被分配.还有一些东西被分配,因为我使用 Exch ...

  2. java免费浏览器,Java swing实现简单的浏览器源码免费分享

    <p> <span style="color:#666666;font-family:"font-size:16px;background-color:#FFFF ...

  3. Java写一个excel工具类_Java中Excel写操作工具类--Java免费学习网

    核心提示:package com.common.excel;import com.common.excel.exception.WriteExcelException;import jxl.Workb ...

  4. https Java SSLException protocol_version的问题解决方法

    https Java SSLException protocol_version的问题解决方法 参考文章: (1)https Java SSLException protocol_version的问题 ...

  5. Java后台开发Tomcat添加https支持小程序开发过程

    文章原文:blog.ouyangsihai.cn >> Java后台开发Tomcat添加https支持小程序开发过程 1 给自己的域名申请证书 注意:申请好了如果不是在腾讯注册的域名,不会 ...

  6. Https java信任_java访问非经过信任证书https的方法

    由于项目需要,需要调用第三方的API接口,为了简单方便与快速开发,便采用了httpClient来进行调用. org.apache.httpcomponents httpclient 4.5.6 但在第 ...

  7. 第三方工具监控java进程_前9个免费的Java进程监视工具以及如何选择一种

    第三方工具监控java进程 这样就可以运行Java代码了. 也许它甚至可以在生产服务器上运行. 当您做好工作后,我们得到了好消息和令人讨厌的消息. 令人讨厌的消息是,现在开始调试. 就是进行调试和应用 ...

  8. 前9个免费的Java流程监视工具以及如何选择一种

    这样就可以运行Java代码了. 也许它甚至可以在生产服务器上运行. 在您完成出色工作之后,我们得到了好消息和令人讨厌的消息. 令人讨厌的消息是,现在开始调试. 就是调试和应用程序性能监视. 这意味着您 ...

  9. 前9个免费的Java进程监视工具以及如何选择一种

    这样就可以运行Java代码了. 也许它甚至可以在生产服务器上运行. 在您完成出色工作之后,我们得到了好消息和令人讨厌的消息. 令人讨厌的消息是,现在开始调试. 就是调试和应用程序性能监视. 这意味着您 ...

最新文章

  1. 【每日一题】 面试题 17.14. 最小K个数
  2. 如何找到php的配置文件,如何查找PHP配置文件php.ini所在路径
  3. 一、spring mvc简介
  4. 程序人生:给程序员的18个建议
  5. 算法导论13-1节习题解答
  6. 爬虫python是干什么的_爬虫是什么?能自学嘛
  7. c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出...
  8. 77种互联网盈利创新模式(7)
  9. easyexcel 导出设置标题_GitHub - niaobulashi/easy-excel: excel实现导入导出配置型通用方法项目...
  10. 主题背景_游戏背景音乐的种类—主题曲
  11. python集合操作班级干部竞选演讲稿_【热门】竞选班干部演讲稿集合8篇
  12. ModuleNotFoundError: No module named ‘项目同名.settings’
  13. (附源码)springboot社区疫苗接种管理系统 毕业设计 281442
  14. 院士李德毅:大数据认知(演讲全文)
  15. tabbar模板html,新闻手机模板,html模板,小程序模板,App模板
  16. 经典常用SQL语句大全(绝对的经典)
  17. 怎么把静态图片做成动态图?简单三步让图片动起来
  18. Supervisor的使用方法
  19. 武汉大学 计算机博士复试分数线,武汉大学2016年博士研究生录取分数线
  20. 美团外卖CPS正式上线,饿了么+美团高佣联盟全都有!(外卖员多一份收入)

热门文章

  1. UI效率实用素材|WEB数据可视化最佳实践
  2. 电商促销必备优惠券醒目设计插画
  3. UI设计实用素材|网页陆地页面的业务和发展概念插图
  4. UI设计素材模板|游戏APP界面
  5. UE/UX 设计师可临摹的应用模板!
  6. html 为元素附空值,HTML空(void)元素有哪些?
  7. 如何减小电压跟随器输出电阻_气动操作器FBD5061SF-1蓝宇品牌安徽
  8. 论网络安全(观直播后感)
  9. ncurses鼠标事件:mousemask(),ALL_MOUSE_EVENTS,KEY_MOUSE,getmouse(),mouse_grafo(),wmouse_trafo()
  10. TensorFlow 基础