博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
阅读量:6697 次
发布时间:2019-06-25

本文共 3249 字,大约阅读时间需要 10 分钟。

hot3.png

今天在处理SQLServer数据库连接时,出现了以下问题: (下边有解决方案)

com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“RSA premaster secret error”。 ClientConnectionId:d1c3978f-3be0-496f-883d-add6cb86d5c3        at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1745)        at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1704)        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1401)        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1068)        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:904)        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:451)        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1014)        at java.sql.DriverManager.getConnection(Unknown Source)        at java.sql.DriverManager.getConnection(Unknown Source)        at com.yonyou.migrationtool.bs.dao.SQLServerDao.newConnection(Unknown Source)        at com.yonyou.migrationtool.bs.dao.BizDaoHandler.invoke(Unknown Source)        at com.sun.proxy.$Proxy2.insertDB(Unknown Source)        at com.yonyou.migrationtool.bs.service.impl.AccountServiceImpl.saveDB(Unknown Source)        at com.yonyou.migrationtool.bs.service.impl.AccountServiceImpl.transfer(Unknown Source)        at com.yonyou.migrationtool.vo.TransferTask.start(Unknown Source)        at com.yonyou.migrationtool.bs.service.Scheduler$WorkThread.run(Unknown Source)        at java.lang.Thread.run(Unknown Source)Caused by: javax.net.ssl.SSLKeyException: RSA premaster secret error        at sun.security.ssl.RSAClientKeyExchange.
(Unknown Source)        at sun.security.ssl.ClientHandshaker.serverHelloDone(Unknown Source)        at sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)        at sun.security.ssl.Handshaker.processLoop(Unknown Source)        at sun.security.ssl.Handshaker.process_record(Unknown Source)        at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)        at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)        at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)        at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1630)        ... 15 moreCaused by: java.security.NoSuchAlgorithmException: SunTlsRsaPremasterSecret KeyGenerator not available        at javax.crypto.KeyGenerator.
(KeyGenerator.java:169)        at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:223)        at sun.security.ssl.JsseJce.getKeyGenerator(Unknown Source)        ... 25 more

上网找了好多解决方案,不是凑合试的,就是copy别人的.没有一个像样的方案.找了好多外文网站,也没什么合适的方式.

首先说一下我复现问题的方式:

1.在eclipse里运行我的程序连接SQLServer数据库进行操作,没问题!eclipse用的jdk7-64位.

2.打包成jar,用jre来运行的时候,就会抛出上边的异常.(另外如果大家运行在不同环境或者切换不同jdk的时候,我觉得都可以归类为这种问题)

从异常中可以看到:

RSA premaster secret error

说明这个是加密异常. 那么jdk中对应的包就是sunjce_provider.jar,这个包在{JAVA_HOME}\jre\lib\ext下.

而在jre中的这个包就会抛出异常.那么就干脆用jdk中的这个包替换掉jre中的这个包,问题自然就解决了.

我的这个现象可能不能解决所有类似的问题,但是至少能给大家提供一些建议也就好的

转载于:https://my.oschina.net/u/928852/blog/638710

你可能感兴趣的文章
[转]Raft [Why Not Paxos]
查看>>
[翻译] GCDiscreetNotificationView
查看>>
PreparedStatement的用法
查看>>
java调用shell脚本,并获得结果集的例子
查看>>
MVC 5 Scaffolder + EntityFramework+UnitOfWork Pattern 代码生成工具集成Visual Studio 2013
查看>>
jstat命令(Java Virtual Machine Statistics Monitoring Tool)
查看>>
关于 initWithNibName 和 loadNibNamed 的区别和联系
查看>>
ANDROID_SDK_HOME设置
查看>>
Linux下Python科学计算包numpy和SciPy的安装
查看>>
Deploying Cloud Foundry on OpenStack Juno and XenServer (Part II)
查看>>
linux光盘、U盘的挂载与卸载
查看>>
xheditor
查看>>
Android 上SuperUser获取ROOT权限原理解析
查看>>
把notepad++设置为系统全局文本默认打开应用
查看>>
基于用户信任和商品相似度的随机游走推荐模型
查看>>
Android之WebViewClient与WebChromeClient的区别
查看>>
学习淘宝指数有感
查看>>
Shell获取文件的文件名和扩展名的例子
查看>>
[转]Linux动态库的种种要点
查看>>
AngularJS快速入门指南11:事件
查看>>