Java 7的javax.net.ssl.SSLHandshakeException

现象:Java7通过httpsURLConnection建立HTTPS连接,异常如下:

javax.net.ssl.SSLHandshakeException: Caused by: Remote host closed connection during handshake Caused by: SSL peer shut down incorrectly

解决方案:客户端需要提高版本到TLSv1.1或TLSv1.2。这可以有2种实现思路,一种是设置JVM的https.protocols参数,另一种是构造支持TLSv1.1或TLSv1.2的SSLContext。

1) 通过-D给出JVM启动参数

-Dhttps.protocols=TLSv1.1,TLSv1.2

2) 必要时,在代码中设置运行时参数

System.setProperty("https.protocols", "TLSv1.1,TLSv1.2");

3) 构造支持TLSv1.1或TLSv1.2的SSLContext

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

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

其中的机理如下:

客户端Java 7默认使用Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1),支持SSLv3或TLSv1,默认通过TLSv1建立到服务器的HTTPS连接。被连接的服务器却只允许使用TLSv1.1或TLSv1.2的HTTPS连接请求。

Java 7经过多次小版本的更新,虽然Sun JSSE provider默认仍然使用TLSv1,但是也支持TLSv1.1或TLSv1.2

特别鸣谢:易生一世

 

最新文章

  1. Script component 用法
  2. jQuery选择器引擎和Sizzle介绍
  3. Remove Element
  4. MySQL管理_数据库常用命令
  5. 读取assets文件夹下图片(ods_interview)
  6. iOS 开发ALAsset获取图片缩略图
  7. 例题.点击按钮显示内容+弹窗效果+ajax
  8. 第2章 Posix IPC
  9. MVC为模型增加正则表达式
  10. 关于HTML代码的转义
  11. 如何在WIN7中关闭JAVA自动更新
  12. windows 安装maven 环境
  13. JSP标准标签库(JSTL)--SQL标签库 sql
  14. Android 跳转权限设置界面的终极方案
  15. python模块安装查看、包制作
  16. vue里v-for下的key的作用
  17. 网站美化:CSS3自定义修改浏览器滚动条
  18. 2018-2019-2 20175211 实验一《Java开发环境的熟悉》实验报告
  19. android开发(1):底部导航条的实现 | navigation tab | activity的创建
  20. Velocity Obstacle

热门文章

  1. Linux上的Shebang符号(#!)
  2. 程序时间计算函数(被tle出阴影来了)
  3. Servlet-授课
  4. 列出 Ubuntu 和 Debian 上已安装的软件包
  5. Java和JDK版本的关系-(转载)
  6. python文件处理(对比和筛选)版本2
  7. Keil编译后的Code,RO,RW,ZI分别表示什么以及和芯片Flash、SRAM的对应关系
  8. HEX与ASCII之间装换
  9. unity lua require dofile loadfile 区别
  10. Manjaro Linux安装singularity-container