2012-07-16 33 views
5

Estoy utilizando la biblioteca JTBC SQLServer de jTDS para conectarme a una base de datos de SQL Server 2008. Siempre funcionó sin SSL, pero una vez que lo habilitamos, no he podido conectarlo. He rastreado el Java como se ve a continuación y he comprobado el registro en el lado de la base de datos y la autenticación funciona correctamente, pero inmediatamente se desconecta la conexión cuando intento ejecutar la consulta. ¿Alguien ha visto este problema?JDBC (JTDS) Conexión del servidor SQL Cerrado después de la autenticación 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) 

Respuesta

7

Oracle presentó una revisión de seguridad para el SSL/TLS BESTIA ataque que se sabe que interfiere con Microsoft JDBC conexiones/jTDS.

Configurando la variable del sistema -Djsse.enableCBCProtection=false se deshabilitará la solución y posiblemente permita la conexión.

Información encontrada en este hilo SO: Java7 sqljdbc4 - SQL error 08S01 on getConnection()

+0

Estaba usando jBoss 5.1 con Sql Server 2005 y jTDS 1.2.5 y esta solución también me funcionó. Mi problema era que el servidor estaba colgado en getConnection(). –

3

que era capaz de moverse por el mismo error de base, añadiendo ssl=request o ssl=require a la URL de la cadena de conexión. Esto intenta o exige que la conexión se encripte. Si SQL Server está configurado para requerir conexiones encriptadas, entonces ssl = require forzará a la conexión a usar SSL y satisfará SQL Server.

Ejemplo:

JDBC: jtds: sqlserver: // [server]/[base de datos]; ssl = necesitar;

Cuestiones relacionadas