2012-07-16 39 views
5

Tôi đang sử dụng thư viện SQLServer JDBC của jTDS để kết nối với cơ sở dữ liệu SQL Server 2008. Nó luôn luôn làm việc mà không có SSL nhưng một khi chúng tôi kích hoạt nó, tôi đã không thể có được nó để kết nối. Tôi đã truy tìm Java như được thấy bên dưới và kiểm tra nhật ký ở phía DB và xác thực hoạt động đúng cách nhưng ngay lập tức giảm kết nối khi cố thực hiện truy vấn. Có ai thấy vấn đề này không?JDBC (JTDS) Kết nối máy chủ SQL đóng sau khi xác thực SSL

main, received EOFException: ignored 
main, called closeInternal(false) 
main, SEND TLSv1 ALERT: warning, description = close_notify 
Padded plaintext before ENCRYPTION: len = 32 
0000: 01 00 DF 4A F1 23 CF E7 6B 62 3D 7D 4D CD C9 AD ...J.#..kb=.M... 
0010: 26 7B 16 59 84 9A 09 09 09 09 09 09 09 09 09 09 &..Y............ 
main, WRITE: TLSv1 Alert, length = 32 
[Raw write]: length = 37 
0000: 15 03 01 00 20 12 0A 45 80 96 80 F8 04 62 2F 62 .... ..E.....b/b 
0010: E0 35 B9 4D 67 B0 4D D7 AC 9C CF C7 57 CA E1 B2 .5.Mg.M.....W... 
0020: 9F DC BA 5E F8          ...^. 
main, called closeSocket(selfInitiated) 
main, called close() 
main, called closeInternal(true) 
java.sql.SQLException: I/O Error: DB server closed connection. 
    at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1053) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:465) 
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1304) 
    at net.sourceforge.jtds.jdbc.ConnectionJDBC2.<init>(ConnectionJDBC2.java:390) 
    at net.sourceforge.jtds.jdbc.ConnectionJDBC3.<init>(ConnectionJDBC3.java:50) 
    at net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:184) 
    at java.sql.DriverManager.getConnection(DriverManager.java:579) 
    at java.sql.DriverManager.getConnection(DriverManager.java:221) 
    at getConnection.main(getConnection.java:25) 
Caused by: java.io.IOException: DB server closed connection. 
    at net.sourceforge.jtds.jdbc.SharedSocket.readPacket(SharedSocket.java:848) 
    at net.sourceforge.jtds.jdbc.SharedSocket.getNetPacket(SharedSocket.java:727) 
    at net.sourceforge.jtds.jdbc.ResponseStream.getPacket(ResponseStream.java:466) 
    at net.sourceforge.jtds.jdbc.ResponseStream.read(ResponseStream.java:103) 
    at net.sourceforge.jtds.jdbc.ResponseStream.peek(ResponseStream.java:88) 
    at net.sourceforge.jtds.jdbc.TdsCore.wait(TdsCore.java:3932) 
    at net.sourceforge.jtds.jdbc.TdsCore.executeSQL(TdsCore.java:1046) 

Trả lời

7

Oracle đã giới thiệu bản sửa lỗi bảo mật cho cuộc tấn công SSL/TLS BEAST được biết là can thiệp vào kết nối JDBC/jTDS của Microsoft.

Đặt biến hệ thống -Djsse.enableCBCProtection=false sẽ tắt tính năng sửa và có khả năng cho phép kết nối. tìm thấy trong này SO chủ đề

Thông tin: Java7 sqljdbc4 - SQL error 08S01 on getConnection()

+0

Tôi đã sử dụng jBoss 5.1 với Sql Server 2005 và jTDS 1.2.5 và bản sửa lỗi này cũng có tác dụng đối với tôi! Vấn đề của tôi là máy chủ đã được treo trên getConnection(). –

3

tôi đã có thể để có được xung quanh các lỗi cơ bản giống nhau bằng cách thêm ssl=request hoặc ssl=require đến URL của chuỗi kết nối. Điều này hoặc cố gắng hoặc yêu cầu kết nối được mã hóa. Nếu SQL Server được thiết lập để yêu cầu các kết nối được mã hóa thì ssl = require sẽ buộc kết nối sử dụng SSL và sẽ đáp ứng SQL Server.

Ví dụ:

jdbc: jtds: sqlserver: // [MÁY CHỦ]/[DATABASE]; ssl = yêu cầu;

Các vấn đề liên quan