JAVA免费https,Java与HTTPS
什么是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相关推荐
- java免费游戏,java – 分配免费游戏
我的代码基本上是免费分配的,但是当60fps时,GC每30秒运行一次.使用DDMS检查应用程序以进行分配显示有大量的SimpleListIterator被分配.还有一些东西被分配,因为我使用 Exch ...
- java免费浏览器,Java swing实现简单的浏览器源码免费分享
<p> <span style="color:#666666;font-family:"font-size:16px;background-color:#FFFF ...
- Java写一个excel工具类_Java中Excel写操作工具类--Java免费学习网
核心提示:package com.common.excel;import com.common.excel.exception.WriteExcelException;import jxl.Workb ...
- https Java SSLException protocol_version的问题解决方法
https Java SSLException protocol_version的问题解决方法 参考文章: (1)https Java SSLException protocol_version的问题 ...
- Java后台开发Tomcat添加https支持小程序开发过程
文章原文:blog.ouyangsihai.cn >> Java后台开发Tomcat添加https支持小程序开发过程 1 给自己的域名申请证书 注意:申请好了如果不是在腾讯注册的域名,不会 ...
- Https java信任_java访问非经过信任证书https的方法
由于项目需要,需要调用第三方的API接口,为了简单方便与快速开发,便采用了httpClient来进行调用. org.apache.httpcomponents httpclient 4.5.6 但在第 ...
- 第三方工具监控java进程_前9个免费的Java进程监视工具以及如何选择一种
第三方工具监控java进程 这样就可以运行Java代码了. 也许它甚至可以在生产服务器上运行. 当您做好工作后,我们得到了好消息和令人讨厌的消息. 令人讨厌的消息是,现在开始调试. 就是进行调试和应用 ...
- 前9个免费的Java流程监视工具以及如何选择一种
这样就可以运行Java代码了. 也许它甚至可以在生产服务器上运行. 在您完成出色工作之后,我们得到了好消息和令人讨厌的消息. 令人讨厌的消息是,现在开始调试. 就是调试和应用程序性能监视. 这意味着您 ...
- 前9个免费的Java进程监视工具以及如何选择一种
这样就可以运行Java代码了. 也许它甚至可以在生产服务器上运行. 在您完成出色工作之后,我们得到了好消息和令人讨厌的消息. 令人讨厌的消息是,现在开始调试. 就是调试和应用程序性能监视. 这意味着您 ...
最新文章
- 【每日一题】 面试题 17.14. 最小K个数
- 如何找到php的配置文件,如何查找PHP配置文件php.ini所在路径
- 一、spring mvc简介
- 程序人生:给程序员的18个建议
- 算法导论13-1节习题解答
- 爬虫python是干什么的_爬虫是什么?能自学嘛
- c语言学习之结构篇代码演示样例-输入n个同学的姓名,数学英语成绩,依照平均分从低到高排序并输出...
- 77种互联网盈利创新模式(7)
- easyexcel 导出设置标题_GitHub - niaobulashi/easy-excel: excel实现导入导出配置型通用方法项目...
- 主题背景_游戏背景音乐的种类—主题曲
- python集合操作班级干部竞选演讲稿_【热门】竞选班干部演讲稿集合8篇
- ModuleNotFoundError: No module named ‘项目同名.settings’
- (附源码)springboot社区疫苗接种管理系统 毕业设计 281442
- 院士李德毅:大数据认知(演讲全文)
- tabbar模板html,新闻手机模板,html模板,小程序模板,App模板
- 经典常用SQL语句大全(绝对的经典)
- 怎么把静态图片做成动态图?简单三步让图片动起来
- Supervisor的使用方法
- 武汉大学 计算机博士复试分数线,武汉大学2016年博士研究生录取分数线
- 美团外卖CPS正式上线,饿了么+美团高佣联盟全都有!(外卖员多一份收入)
热门文章
- UI效率实用素材|WEB数据可视化最佳实践
- 电商促销必备优惠券醒目设计插画
- UI设计实用素材|网页陆地页面的业务和发展概念插图
- UI设计素材模板|游戏APP界面
- UE/UX 设计师可临摹的应用模板!
- html 为元素附空值,HTML空(void)元素有哪些?
- 如何减小电压跟随器输出电阻_气动操作器FBD5061SF-1蓝宇品牌安徽
- 论网络安全(观直播后感)
- ncurses鼠标事件:mousemask(),ALL_MOUSE_EVENTS,KEY_MOUSE,getmouse(),mouse_grafo(),wmouse_trafo()
- TensorFlow 基础