2012-07-16 26 views
5

jTDS JDBC SQLServerライブラリを使用してSQL Server 2008データベースに接続しています。 SSLなしでは常に動作しましたが、有効にした後は接続できませんでした。私はJavaを次のようにトレースし、DB側のログをチェックして認証が正しく機能しますが、クエリを実行しようとするとすぐに接続が切断されます。誰もこの問題を見た?JDBC(JTDS)SSL認証後にSQL Server接続が閉じられる

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) 

答えて

7

Oracleは、Microsoft JDBC/jTDS接続を妨げることが知られているSSL/TLS BEAST攻撃に対するセキュリティ修正を導入しました。

システム変数-Djsse.enableCBCProtection=falseを設定すると、修正が無効になり、接続が許可される可能性があります。このSOスレッドで見つかった

情報:Java7 sqljdbc4 - SQL error 08S01 on getConnection()

+0

私は、SQL Server 2005とjTDS 1.2.5でjBoss 5.1を使用していましたが、この修正は私にとってもうまくいきました!私の問題は、サーバーがgetConnection()にぶら下がっていたことでした。 –

3

私は、接続文字列のURLにssl=requestまたはssl=requireを追加することによって、同じ基本的なエラーを回避することができました。これは、接続を暗号化しようとするか、要求します。 SQL Serverが暗号化された接続を要求するようにセットアップされている場合、ssl = requireはSSLを使用する接続を強制し、SQL Serverを満たします。

例:

JDBC:JTDS:のSQLServer:// [SERVER]/[データベース]、SSL =必要とします。

関連する問題