2012-07-16 12 views
5

के बाद बंद SQL सर्वर कनेक्शन SQL सर्वर 2008 डेटाबेस से कनेक्ट करने के लिए मैं जेटीडीएस जेडीबीसी एसक्यूएल सर्वर लाइब्रेरी का उपयोग कर रहा हूं। यह हमेशा एसएसएल के बिना काम करता है लेकिन एक बार जब हम इसे सक्षम करते हैं, तो मैं इसे कनेक्ट करने में सक्षम नहीं हूं। मैंने जावा को नीचे देखा है और डीबी पक्ष पर लॉग की जांच की है और प्रमाणीकरण ठीक से काम करता है लेकिन क्वेरी निष्पादित करने का प्रयास करते समय तुरंत कनेक्शन छोड़ देता है। किसी ने भी इस समस्या को देखा?जेडीबीसी (जेटीडीएस) एसक्यूएल प्रमाणीकरण

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

ओरेकल SSL/TLS जानवर हमले कि माइक्रोसॉफ्ट JDBC/jTDS कनेक्शन के साथ हस्तक्षेप करने के लिए जाना जाता है के लिए एक सुरक्षा फिक्स की शुरुआत की।

-Djsse.enableCBCProtection=false सिस्टम चर सेट करने से फिक्स अक्षम हो जाएगा और संभावित रूप से कनेक्शन की अनुमति होगी।

जानकारी इस अतः सूत्र में पाया: Java7 sqljdbc4 - SQL error 08S01 on getConnection()

+0

मैं एसक्यूएल सर्वर 2005 और जेटीडीएस 1.2.5 के साथ जेबॉस 5.1 का उपयोग कर रहा था और यह फिक्स मेरे लिए भी काम करता था! मेरी समस्या यह थी कि सर्वर getConnection() पर लटक रहा था। –

3

मैं कनेक्शन स्ट्रिंग का यूआरएल के लिए ssl=request या ssl=require जोड़कर एक ही मूल त्रुटि से बचने के लिए कर रहा था। यह या तो प्रयास करता है या मांग करता है कि कनेक्शन एन्क्रिप्टेड हो। यदि एसक्यूएल सर्वर एन्क्रिप्टेड कनेक्शन की आवश्यकता के लिए सेटअप है तो ssl = आवश्यकता एसएसएल का उपयोग करने के लिए कनेक्शन को मजबूर करेगी और SQL सर्वर को संतुष्ट करेगी।

उदाहरण:

JDBC: jtds: sqlserver: // [सर्वर]/[डेटाबेस]; ssl = आवश्यकता होती है;

संबंधित मुद्दे