RSA premaster secret error 报错 个人总结

既然报错,当然要好好的看报错代码,是好好的看,断点调试查看也是必须要用的。

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 驱动程序无法使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误: RSA premaster secret error。
javax.net.ssl.SSLKeyException: RSA premaster secret errorat 
java.sql.DriverManager.getConnection(DriverManager.java:525)
java.sql.DriverManager.getConnection(DriverManager.java:140)
 org.apache.catalina.core.StandardServer.start(StandardServer.java:700)at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
这些是在调试过程中遇到的关键错误代码,开始以为很容易以为稍微搜搜就搞定了,你可能有或者差不多,但是报错始终是:
 驱动程序无法使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误: RSA premaster secret error

既然是jdbc 报错,那么就更换jdbc 版本就是了,我是从1.0一直更换到4.0 都于事无补,但是网上的一些朋友通过下面的方法解决问题的:

1:更换jdbc 版本,有说更换到1.2 可以解决问题的,也有说更新到2.0可以解决问题的

2:重新安装tomcat

我然后就开始查看代码,首先我是重新安装卸载tomcat ,重启机子,运行以后,发现还是报错,一摸一样的错误代码,

我又重新写了一个测试类,专门来测试与sql的链接,发现可以连接到sql 数据库,但是连接sql的代码放到servlet 当中他就报错。我以为我xml或者其他文件配置配置错了,

无语了,然后我重新写了一个简单的web 连接数据库,还是报错,连接不到数据库,完蛋了,普通java类能连接到数据库,web 就不行,因为我用的是SQL08 R2,不想重装sql,但是无奈,决定重装sql,发现还是报错,然后卸了再装SQL2005 ,我勒个去,还是报错,

和sql 建立连接传输数据,需要IP 需要 端口,sql 默认的端口是1433,使用telnet localhost 1433 查看是否带打开了1433端口,如果出现光标在闪烁那1433 端口就打开了。在sql 的网络配置 tcp ip 协议里面也要选择sql 相应的端口,因为你在安装其他程序的时候,可能会占用1433 端口。然后使用netstat -a 查看1433 是不是在监听状态。

然后win7 用管理员权限运行cmd,执行sqlcmd 看看能不能进入命令行状态,如果能进入的话,说明这些配置正确,但是为什么SSL 需要安全连接呢?

开始查看SSL 是什么东西,既然他说我无法与sql建立安全连接,那么我就不让他建立安全连接,让他失效,既然有建立和不建立,那么肯定有相关的设置,然后开始google,找到相关设置把它关闭,开始查看相关文档,sql帮助,win 7 帮助搜索ssl ,然sql Server 2005 F1 找到了在sql 当中设置ssl 的选项,因为使用的win 7 的平台,所以win 7 这边也要查看一下,把sql 那边的设置关闭ssl连接以后,发现还是报错,而且报错更多了,我晕死。

配置 SQL Server 的 SSL

若要配置 SSL,请在服务器计算机的 Windows 证书存储区中安装一个证书,然后使用 SQL Server 配置管理器中的“证书”选项卡(位于“SQL Server 2005 网络配置”的“协议属性”对话框中)将数据库引擎 配置为使用该证书。使用“MSSQLSERVER 的协议属性”对话框上的“标志”页查看或指定协议加密选项。登录过程将始终是加密的。如果数据库引擎 的 ForceEncryption 选项设置为“是”,则将加密所有客户端/服务器通信,并且拒绝无法支持加密的客户端的访问。如果数据库引擎 的 ForceEncryption 选项设置为“否”,则客户端应用程序可以请求加密,但不是必需的。

如果未安装证书,则实例启动后,SQL Server 2005 将生成一个自签名证书。此自签名证书可代替可信证书颁发机构颁发的证书,但它不提供身份验证,也不具有不可否认性。

 
使用自签名证书加密的 SSL 连接不提供强安全性。它们容易在传输中途受到攻击。在生产环境中或在连接到 Internet 的服务器上,不应依赖使用自签名证书的 SSL。

默认情况下,当客户端应用程序连接到 SQL Server 2005 时,所传输的凭据是被加密的。如果没有由互信证书颁发机构签名的证书,将使用自签名证书。

如果没有来自可信证书颁发机构的证书,且 ForceEncryption 选项的值设置为“是”,将使用自签名证书来加密通过网络在 SQL Server 与客户端应用程序之间传输的所有数据。

更改 ForceEncryption 设置后,必须重新启动 SQL Server。


相关的配置ssl  代码,最好还是F1 查找;这样慢慢研读会发现不少东西。一点一点去配置,我在这上面花的时间最多,可悲的是还是报错,我实在忍不住想骂。微软的东西就是麻烦,然后我就很无奈的想着重装系统吧,我又重新安装了 eclipse 和 myeclipse,在这两个平台上面实验还是报错,崩溃了,要装系统么!我忍了一下,还是坚持去google 了,下面的过程,基本就是不断的重复以前的操作,一点一点研读国外一些论坛上面这个错误代码的问题和解决方案,中间曾经没有报错,不过但我又试了一下,还是报错,曾经有位兄弟说,莫名其妙出错,然后重启机子,就不报错了,还有的说,用清理软件清理的时候,然后连接SQL ,然后就报错,正所谓遇到这个问题的人不少,但是都没有给出正确答案,终于在这篇文章上面找出答案了

http://social.msdn.microsoft.com/Forums/zh-CN/sqldataaccess/thread/031c5b4c-0871-4f12-a163-ce547035740c

大家慢慢读,答案就在里面,可能是我遇到的问题比较搞,可能也是个例,不过我考虑的都考虑了,应该差不多了。我使用的是myeclipse自带的jdk 这次换成我装的jdk 然后替换

Solving the problem was a matter of putting the sunjce_provider.jar in one of the folders specified in the java.ext.dirs parameter. Hard to find, easy to solve.

把sunjce_provider.jar 放到JDKclasspath路径下

但是呢,悲剧的我,还是报错,实在忍不住了。通过一番思考终于找到问题所在了,那就是jdk 和 jre,

因为有人曾经因为清理的时候导致这个错误出现,可能是清理软件把C盘的某些配置文件给清除了,这个或许就是jdk 或者 jre 相关在classPath里面的代码,因为我装了几个jdk版本,我也重启机子过,可以肯定不是缓存在作怪,所以经过上面的推论是配置文件报错,这个文档也证明了这点!

对于我的这个问题来说:普通java类可以连接sql进行增删改查,唯有把连接数据库的代码放到servlet 就报错误,ssl 我已经关闭了,SQL 重装了,1433端口已经开启在监听状态,可以通过远端cmd连接数据库,参考这个文档那位同学的症状,就是jar 包出现问题,或者是一个bug ,那么我就重新安装jdk 和 jre,因为我之前使用的是myeclipse 自带的jdk 换成我装的jdk,连普通java类都连不上了,说明错误就在jdk jre里面,报错也间接说明了这个情况,

java.sql.DriverManager.getConnection(DriverManager.java:140)

所以重新安装jdk 和 jre 代码解决了这个问题,如果能帮助大家或者哪些没注意到,还请大家留言说明!






评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值