我在一个Linux实例上的Java 8 JVM中启用了SSL记录,从而再现了这个问题.使用-Djavax.net.debug = ssl:handshake:verbose打开SSL日志记录.这显示了一些有用的信息.

我们在生产中使用并已证明可以为我们工作的解决方法是在JVM上设置此参数:

-Djdk.tls.client.protocols=TLSv1

如果你想要更多的细节,请继续阅读.

在可以再现问题的服务器上(再次只有5-10%的时间),我观察到以下情况:

*** ClientHello,TLSv1.2

--- 8

main,WRITE: TLSv1.2 Handshake,length = 195

main,READ: TLSv1.2 Handshake,length = 1130

*** ServerHello,TLSv1.2

--- 8

%% Initialized: [Session-79,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256]

** TLS_DHE_RSA_WITH_AES_128_GCM_SHA256

--- 8

Algorithm: [SHA1withRSA]

--- 8

*** Diffie-Hellman ServerKeyExchange

--- 8

*** ServerHelloDone

*** ClientKeyExchange,DH

--- 8

main,length = 133

--- 8

main,WRITE: TLSv1.2 Change Cipher Spec,length = 1

*** Finished

verify_data: { 108,116,29,115,13,26,154,198,17,125,114,166 }

***

main,length = 40

main,called close()

main,called closeInternal(true)

main,SEND TLSv1.2 ALERT: warning,description = close_notify

main,WRITE: TLSv1.2 Alert,length = 26

main,called closeSocket(true)

main,waiting for close_notify or alert: state 5

main,received EOFException: ignored

main,called closeInternal(false)

main,close invoked again; state = 5

main,handling exception: java.io.IOException: sql Server returned an incomplete response. The connection has been closed. ClientConnectionId:12a722b3-d61d-4ce4-8319-af049a0a4415

请注意,TLSv1.2由数据库服务器选择并用于此交换.我观察到,当有问题的linux服务连接失败时,TLSv1.2始终是所选的级别.但是,当使用TLSv1.2时,连接不总是失败.他们只能在5-10%的时间内失败.

现在这里是一个没有问题的服务器的交换.一切都是平等的.即,连接到相同的数据库,相同版本的JVM(Java 1.8.0_60),相同的JDBC驱动程序等.请注意,在这里,TLSv1由数据库服务器而不是TLSv1.2选择,如在故障服务器的情况下.

*** ClientHello,length = 207

main,READ: TLSv1 Handshake,length = 604

*** ServerHello,TLSv1

--- 8

Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA

--- 8

%% Initialized: [Session-79,TLS_RSA_WITH_AES_128_CBC_SHA]

** TLS_RSA_WITH_AES_128_CBC_SHA

--- 8

Algorithm: [SHA1withRSA]

--- 8

***

*** ServerHelloDone

*** ClientKeyExchange,RSA PreMasterSecret,TLSv1

--- 8

main,WRITE: TLSv1 Handshake,length = 134

main,WRITE: TLSv1 Change Cipher Spec,length = 1

*** Finished

verify_data: { 26,155,166,89,229,193,126,39,103,206,21 }

***

main,length = 48

main,READ: TLSv1 Change Cipher Spec,length = 1

main,length = 48

*** Finished

因此,当在Linux JVM和sql Server之间协商TLSv1时,连接总是成功的.当协商TLSv1.2时,我们得到零星的连接失败.

(注意:Java 7(1.7.0_51)总是协商TLSv1,这就是为什么我们使用Java 7 JVM的问题.)

我们还有的开放性问题是:

>为什么从两个不同的Linux服务器运行的相同的Java 8 JVM将始终协商TLSv1,但是当从另一个Linux服务器连接时,它始终协商TLSv1.2.

>而且为什么TLSv1.2协商连接在该服务器上最成功,但并非全部成功?

资源:

server 2008 服务器不能访问 java项目,Java 8上的SQL Server JDBC错误:驱动程序无法使用安全套接字层(SSL)加密建立到SQL Server的安全连接...相关推荐

  1. 驱动程序无法使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    使用环境:tomcat8,jdk1.8 错误描述:使用jdbc连接SqlServer数据库报错 com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程 ...

  2. 驱动程序无法使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。

    使用jdbc链接数据库,出现下图报错. 百度搜索 各种方法用尽还是没有解决,后来自己解决了.希望能帮到大家! (我这是汉化后)点击窗口(Windows)-----首选项(Preferences) 选择 ...

  3. 驱动程序无法使用安全套接字层(SSL)加密建立到SQL Server的安全连接

    报错:ERROR c.a.d.p.DruidDataSource$CreateConnectionThread [Druid-ConnectionPool-Create-1218864105] cre ...

  4. 驱动程序无法使用安全套接字层(SSL)加密与sql server建立安全连接

    使用myeclipse连接sql server2008时出现错误 驱动程序无法使用安全套接字层(SSL)加密与sql server建立安全连接关于这个问题我找了好几天了,刚开始我百度的时候各种说法我都 ...

  5. 【Java】驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    由于工作需要使用SpringBoot项目连接SQL Server作数据查询,在使用sqljdbc4-4.0.jar驱动包对数据库进行访问时出现了"驱动程序无法通过使用安全套接字层(SSL)加 ...

  6. com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接。

    @TOcom.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接.C co ...

  7. 连接数据库报com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接

    JDBC加载驱动,连接SQLServer 2012 报 java.ext.dirs: C:\Program Files\Java\jdk1.8.0_331\jre\lib\ext;C:\Windows ...

  8. [08S01] 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is

    文章目录 项目场景 问题描述 解决方案 方案一:修改jdk(推荐) 方案二:修改idea 测试连接 项目场景 Idea使用DateSource插件连接SqlServer数据库报错 问题描述 [08S0 ...

  9. com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接

    com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立 安全连接 驱动版本 最新 ...

最新文章

  1. 区块链BaaS云服务(40) 泰岳FruitChain
  2. 贩卖知识的“成功学”,大师“卖拐”几时休?
  3. 安装mysql的过程可以中断吗_安装 mysql 遇到的坑(附 mysql 安装过程)
  4. 编写可阅读代码的艺术 培训实践 第一部分 表面层次的改进
  5. 数据结构-图-Java实现:有向图 图存储(邻接矩阵),最小生成树,广度深度遍历,图的连通性,最短路径1...
  6. Error:Cannot find bean: org.apache.struts.taglib.html.BEAN in any scope
  7. Java常用算法手册-01算法概述
  8. mysql ocp考试准备多久_MySQL OCP考试复习系列--开篇:了解MySQL考试
  9. [android基础知识] 之十三: Runtime.getRuntime()
  10. spring jpa Specification in 查询
  11. 如何对网络安全攻击采取防御措施
  12. Let X be a finite set f : X → X a function. Prove that f is injective if and only if f is surjective
  13. arduino tft 方向_Arduino2.4英寸TFT显示屏的演示
  14. java tessdata训练_Tesseract训练中文字体识别
  15. 【Hexo】选择更高级的Markdown渲染器
  16. 【C语言】常见关键字
  17. 探索<赛博朋克>风格游戏美术
  18. intro.js新手引导
  19. 2021-2027中国食品成本核算软件市场现状及未来发展趋势
  20. C语言——求s=a+aa+aaa+aaaa+aa...a的值

热门文章

  1. .NET Core开发者的福音之玩转Redis的又一傻瓜式神器推荐
  2. Redis基本使用及百亿数据量中的使用技巧分享
  3. asp.net core 发布到 docker 容器时文件体积过大及服务端口的配置疑问
  4. ASP.NET Core 2.0 依赖注入
  5. 用 Docker Machine 创建 Azure 虚拟主机
  6. 不可思议黑科技,Xamarin移动开发新时代
  7. [认证授权] 2.OAuth2授权(续) amp;amp; JSON Web Token
  8. .NET Core项目从xproj+project.json向csproj迁移简介
  9. [C#7] 1.Tuples(元组)
  10. powershell 文件/文件夹操作