2016-08-26 12 views
6

का उपयोग करते हुए ओरेकल डेटाबेस टीएलएस 1.2/एसएसएल कनेक्शन 12.1.0.2 जेडीबीसी थिन ड्राइवर का उपयोग करते हुए ओरेकल डाटाबेस 12 सी से कनेक्ट करने का प्रयास करते समय, हमें अपवाद मिल रहा है। हम जेएलएस प्रमाण पत्र के साथ टीएलएसवी 1.2 का उपयोग कर रहे हैं। लेकिन, हम डेटाबेस से सफलतापूर्वक कनेक्ट करने में असमर्थ हैं।जेडीबीसी पतली और जेकेएस

सूत्र में अपवाद "मुख्य" java.sql.SQLRecoverableException आई ओ त्रुटि: प्राप्त घातक चेतावनी: handshake_failure

उत्तर

9

ये कदम उठाएँ ओरेकल JDBC पतली ड्राइवर कॉन्फ़िगर करने के लिए पालन करने के लिए का उपयोग कर डेटाबेस से कनेक्ट करने हैं टीएलएस v1.2 (मान लें कि आपका डाटाबेस कॉन्फ़िगरेशन सही है)।

चरण 1: बग 19,030,178 के लिए पैच लागू करें (12.2.0.1 में शुरू की जरूरत नहीं)

आप बग 19,030,178 जो TLSv1.2 की अनुमति देता है के लिए पैच लागू करने की आवश्यकता होगी। ध्यान दें कि पैच TLSv1.2 की अनुमति देता है लेकिन डिफ़ॉल्ट रूप से इसे सक्षम नहीं करता है। तो 12.1.0.2 पैच किए गए ड्राइवर के साथ आपको oracle.net.ssl_version = '1.2' सेट करने की भी आवश्यकता है। इस संपत्ति को या तो सिस्टम प्रॉपर्टी (डीडी का उपयोग करके) या डेटासोर्स गुणों के माध्यम से सेट किया जा सकता है।

चरण 2: स्थापित करें JCE फ़ाइलों

Java Cryptography एक्सटेंशन (JCE) फ़ाइलों के बिना मजबूत सिफ़र सुइट है (उदाहरण के TLS_RSA_WITH_AES_256_CBC_SHA256 के लिए) सक्षम नहीं किया जाएगा। तो चाहे आप जेडीके 7 या जेडीके 8 का उपयोग कर रहे हों, आपको जेसीई असीमित शक्ति क्षेत्राधिकार नीति फाइलों को स्थापित करना चाहिए। ये फ़ाइलें ओरेकल वेबसाइट पर पाई जा सकती हैं।

चरण 3: हमेशा JDK

के नवीनतम अद्यतन का उपयोग या तो JDK7 या JDK8 के नवीनतम अद्यतन का उपयोग करने के क्योंकि कीड़े निर्धारित किया गया है TLSv1.2 के लिए आवश्यक हैं कि सुनिश्चित करें।

चरण 4: पर्स के बजाय का उपयोग करें JKS फ़ाइलों

ऐसा लगता है कि आप पहले से ही है कि क्या किया है, लेकिन दूसरों को देखने के लिए बस के लिए: पर्स कॉन्फ़िगर और Oracle JDBC पतली ड्राइवर के साथ उपयोग करें, क्योंकि वे आवश्यकता के लिए जटिल हो जाते हैं अतिरिक्त जार और अतिरिक्त गुण। दूसरी ओर जेकेएस फाइलें जेआरई में मूल रूप से समर्थित हैं और, मेरे अनुभव में, हमेशा अच्छी तरह से काम किया है।

चरण 5: JDK7 उपयोग करते समय, स्पष्ट रूप से मजबूत सिफ़र सुइट

यह कदम सक्षम JDK8 का उपयोग करते समय आवश्यक नहीं है। जेडीके 7 के साथ, यदि आप एक मजबूत सिफर सुइट का उपयोग कर रहे हैं जैसे कि TLS_RSA_WITH_AES_256_CBC_SHA256, तो आपको इसे oracle.net.ssl_cipher_suites कनेक्शन प्रॉपर्टी के माध्यम से सक्षम करना होगा।

चरण 6: -Djavax.net.debug साथ डीबग = सभी

अंत में अगर आप अधिक समस्या आती है, तो आप पता लगाने चालू कर सकते हैं पता लगाने के लिए क्या = सभी -Djavax.net.debug का उपयोग कर रहा है ।

JDK7 साथ ==== उदाहरण और 12.1.0.2 समझौता पतली ड्राइवर =====

java -Doracle.net.ssl_version='1.2' -Doracle.net.ssl_cipher_suites='(TLS_RSA_WITH_AES_256_CBC_SHA256)' -Doracle.net.ssl_server_dn_match='true' -Djavax.net.ssl.trustStore='truststore.jks' -Djavax.net.ssl.trustStorePassword='welcome1' -Djavax.net.ssl.keyStore='keystore.jks' -Djavax.net.ssl.keyStorePassword='welcome1' JDBCTest 'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=host)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=myservice))(security=(ssl_server_cert_dn="CN=name,O=org,L=city,ST=state,C=country")))' 'pdb1' 'welcome1' 

JDK8 और 12.1.0 के साथ ==== उदाहरण।2 पैच किए गए ड्राइवर =====

java -Doracle.net.ssl_version='1.2' -Doracle.net.ssl_server_dn_match='true' -Djavax.net.ssl.trustStore='truststore.jks' -Djavax.net.ssl.trustStorePassword='welcome1' -Djavax.net.ssl.keyStore='keystore.jks' -Djavax.net.ssl.keyStorePassword='welcome1' JDBCTest 'jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=host)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=myservice))(security=(ssl_server_cert_dn="CN=name,O=org,L=city,ST=state,C=country")))' 'pdb1' 'welcome1' 
+0

धन्यवाद। इसने काम कर दिया। – atom

+0

यह बीटीडब्ल्यू थिन-जेडीबीसी 12.2.0.1 – eckes

+1

@Eckes में तय करने के लिए धन्यवाद है। मैंने तदनुसार जवाब संपादित किया है। –