2012-07-16 23 views
5

Sto utilizzando la libreria JDDS SQL Server per connettersi a un database SQL Server 2008. Ha sempre funzionato senza SSL ma una volta abilitato, non sono riuscito a collegarlo. Ho tracciato il Java come visto di seguito e controllato il log sul lato DB e l'autenticazione funziona correttamente, ma immediatamente si interrompe la connessione quando si tenta di eseguire la query. Qualcuno ha visto questo problema?JDBC (JTDS) Connessione SQL Server chiusa dopo l'autenticazione 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) 

risposta

7

Oracle ha introdotto un fix di sicurezza per l'attacco SSL/TLS bestia che è noto per interferire con Microsoft JDBC/jTDS connessioni.

L'impostazione della variabile di sistema -Djsse.enableCBCProtection=false disattiva la correzione e consente potenzialmente la connessione.

Informazioni trovate in questo SO discussione: Java7 sqljdbc4 - SQL error 08S01 on getConnection()

+0

Stavo usando jBoss 5.1 con Sql Server 2005 e jTDS 1.2.5 e questa correzione ha funzionato anche per me! Il mio problema era che il server era sospeso su getConnection(). –

3

sono stato in grado di aggirare lo stesso errore di base con l'aggiunta di ssl=request o ssl=require all'URL della stringa di connessione. Ciò prova o richiede che la connessione sia crittografata. Se SQL Server è configurato per richiedere connessioni crittografate, ssl = require forza la connessione a utilizzare SSL e soddisferà SQL Server.

Esempio:

jdbc: jtds: sqlserver: // [SERVER]/[DATABASE]; ssl = richiedere;

Problemi correlati