2012-11-20 13 views
5

मैं अमेज़न RDS MySQL उपयोग कर रहा हूँ और SSL प्रमाण पत्र (डिफ़ॉल्ट प्रमाणपत्र http://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem पर उपलब्ध है), मैं निम्नलिखित चरणों का कर रहा हूँ के साथ जोड़ने:SSL के साथ एक्सेस करना आरडीएस - असमर्थित रिकॉर्ड संस्करण अज्ञात-0.0

  1. डाउनलोड किया mysql-ssl-ca-cert.pem
  2. Spring - Hibernate टेम्पलेट (org.springframework.beans.factory.config.PropertyPlaceholderConfigurer) है और यह भी के माध्यम से JKS प्रारूप
  3. और एक वेब अनुप्रयोग से जोड़ने के लिए ऊपर फ़ाइल संशोधित c3p0 उपयोग करते हैं, हम कर रहे हैं jdbc:URL/DB?autoReconnect=true&useUniCode=true&characterEncoding=UTF-8&useSSL=true&verifyServerCertificate=false&requireSSL=true

लेकिन मैं नीचे दी गई समस्या का सामना करना पड़ रहा के रूप में अतिरिक्त URL पैरामीटर ...

javax.net.ssl.SSLException: Unsupported record version Unknown-0.0 

कैसे मैं इसे ठीक कर सकते हैं?

उत्तर

4

असल में इसका मतलब है कि एसएसएल पार्सर खो गया है। सॉकेट परत ने इसे कुछ बाइट पास कर दिए हैं जो एसएसएल प्रोटोकॉल में फिट नहीं होते हैं।

जब आप किसी SSL सॉकेट का उपयोग करके संचारित करते हैं, तो यह एन्क्रिप्टेड पैकेट बनाने के लिए स्वरूपण और एन्क्रिप्शन दिनचर्या को कॉल करता है। इसके बाद यह एन्क्रिप्टेड पैकेट को सर्वर पर स्थानांतरित करने के लिए सादा सॉकेट परत को कॉल करता है। सर्वर की सॉकेट परत को पैकेट प्राप्त होता है और फिर पैकेट को डिक्रिप्ट करने के लिए SSL पैकेज को कॉल करता है। यदि पैकेट एसएसएल प्रारूप में फिट नहीं है, तो आपको असमर्थित संस्करण अपवाद मिलता है।

सॉकेट परत पर आने वाले सभी बाइट एसएसएल पैकेज में भेजे जाते हैं। तो उस त्रुटि को पाने का सबसे आसान तरीका एसएसएल कनेक्शन स्थापित करने के बाद सादा पाठ संदेश संचारित करने के लिए सादे सॉकेट परत का उपयोग करना है।

मेरे विशेष मामले में, मैं इस त्रुटि संदेश में भाग गया क्योंकि मैं अतिरिक्त बाइट्स संचारित कर रहा था। चलो देखते हैं कि मैं अपनी गलती को स्पष्ट रूप से समझा सकता हूं।

मेरे पास एक बफर था (उदाहरण के लिए) 100 बाइट्स। मैंने अपने 50 बाइट संदेश के साथ बफर पैक किया और एसएसएल एन्क्रिप्शन दिनचर्या कहा। परिणामी पैकेट 75 बाइट लंबा था। मैंने बफर को प्रेषित करने के लिए भेज दिया()। यह एक सादा सॉकेट भेजना था; मैंने जो किया वह मैंने किया, जो पूरे 100 बाइट बफर को प्रसारित कर रहा था।

सर्वर पर, पूरे 100 बाइट प्राप्त हुए। एसएसएल पैकेज ने पैकेट को डिक्रिप्ट करने का प्रयास किया। इसे प्राप्त किए गए पहले 75 बाइट्स में पैक किया गया एक बिल्कुल अच्छा एसएसएल संदेश मिला। अब तक सब ठीक है। फिर यह पता लगाने की कोशिश की कि शेष 25 बाइट्स क्या मतलब है। यह माना जाता है कि यह एक दूसरा एसएसएल संदेश था और इसे डिक्रिप्ट करने का प्रयास किया। वह तब हुआ जब उसने उस अपवाद को दबा दिया और निकाल दिया।

मुझे आशा है कि आपको आपके कोड में क्या देखना है इसके बारे में कुछ संकेत दें।

1

अगर मैंने असमर्थित क्लाइंट प्रमाणपत्र प्रस्तुत किया तो मुझे यह त्रुटि मिली। "-Djavax.net.ssl.keyStore" को खाली करना और क्लाइंट प्रमाण पत्र के साथ कनेक्ट करना काम किया।

भी http://feed.askmaclean.com/archives/secure-java-connections-by-default.html देखें:

विभिन्न टीएलएस संस्करणों के लिए समर्थन के लिए इस्तेमाल किया JRE संस्करण के आधार पर भिन्न होता है। सुनिश्चित करें कि आप जेडीके की क्षमताओं को जानते हैं जिनका उपयोग आप विशिष्ट टीएलएस संस्करणों को प्रतिबंधित करने से पहले कर रहे हैं। जब पहले उपरोक्त परीक्षण चलाते हैं, तो एक्लिप्स जेआरई 1.8.0_65 की बजाय जेआरई 1.6.0_45 का उपयोग कर रहा था, और मुझे टीएलएसवी 1.0 सिफर का उपयोग करके कनेक्ट किया गया था।

की वजह से: com.sun.net पर असमर्थित रिकॉर्ड संस्करण अज्ञात-0.0 : javax.net.ssl.SSLException MySQL सर्वर केवल TLSv1.1 और TLSv1.2 देने के लिए कॉन्फ़िगर किया गया था, मैं निम्नलिखित अपवाद प्राप्त .ssl.internal.ssl.InputRecord.readV3Record (InputRecord.java:504)

बड़े JREs का उपयोग TLSv1.0 अक्षम करने से पहले मूल्यांकन किया जाना चाहिए - सौभाग्य से, PERFORMANCE_SCHEMA यह सर्वेक्षण करने ग्राहक JREs आसान हर आवेदन का निरीक्षण करने के बिना बनाता है सर्वर।

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

  • कोई संबंधित समस्या नहीं^_^