प्राप्त हुआ घातक अलर्ट: SSLHandshakeException के माध्यम से हाथ मिलाना


134

मुझे अधिकृत SSL कनेक्शन की समस्या है। मैंने Struts Action बनाया है जो क्लाइंट अधिकृत SSL प्रमाणपत्र के साथ बाहरी सर्वर से जुड़ता है। अपने एक्शन में मैं कुछ डेटा बैंक सर्वर को भेजने की कोशिश कर रहा हूं, लेकिन बिना किसी भाग्य के, क्योंकि मुझे सर्वर से निम्न त्रुटि हुई है:

error: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

मेरे एक्शन क्लास से मेरा तरीका जो सर्वर को डेटा भेजता है

//Getting external IP from host
    URL whatismyip = new URL("http://automation.whatismyip.com/n09230945.asp");
    BufferedReader inIP = new BufferedReader(new InputStreamReader(whatismyip.openStream()));

    String IPStr = inIP.readLine(); //IP as a String

    Merchant merchant;

    System.out.println("amount: " + amount + ", currency: " + currency + ", clientIp: " + IPStr + ", description: " + description);

    try {

        merchant = new Merchant(context.getRealPath("/") + "merchant.properties");

    } catch (ConfigurationException e) {

        Logger.getLogger(HomeAction.class.getName()).log(Level.INFO, "message", e);
        System.err.println("error: " + e.getMessage());
        return ERROR;
    }

    String result = merchant.sendTransData(amount, currency, IPStr, description);

    System.out.println("result: " + result);

    return SUCCESS;

मेरी मर्चेंट.प्रॉपर्टीज़ फ़ाइल:

bank.server.url=https://-servernameandport-/
https.cipher=-cipher-

keystore.file=-key-.jks
keystore.type=JKS
keystore.password=-password-
ecomm.server.version=2.0

encoding.source=UTF-8
encoding.native=UTF-8

पहली बार मुझे लगा कि यह एक प्रमाणपत्र समस्या है, मैंने इसे .pfx से .jks में बदल दिया है, लेकिन मेरी एक ही त्रुटि है, जिसमें कोई बदलाव नहीं है।


क्या आपने सर्वर के ssl को अपने ट्रस्टस्टोर में जोड़ा है?
आनंदी

क्षमा करें, मुझे यह समझ में नहीं आया कि इसका क्या मतलब है, मैं SSL के लिए नया हूँ
Denees

मुझे लगता है कि आपका ऐप जावा डिफ़ॉल्ट ट्रस्टस्टोर का उपयोग कर रहा है। डिफ़ॉल्ट ट्रस्टस्टोर <java-home> / lib / security / cacerts है। अपने ब्राउज़र के साथ सर्वर का यूआरएल खोलें और सभी एसएसएल सेर्ट्स डाउनलोड करें; किसी भी श्रृंखला / मध्यवर्ती श्रृंखला सहित। फिर इन सभी समारोहों को ट्रस्टस्टोर में जोड़ें।
आनंदी

मैं ब्राउज़र में url नहीं खोल सकता, क्‍लाइंट प्रमाणीकरण प्रमाण पत्र के कारण, मैं इस लिंक को केवल उन विशिष्ट मापदंडों को भेज सकता हूं जो मुझे क्लाइंट से प्राप्त होते हैं।
डेनेस

बस url खोलें। अपने ब्राउज़र पर दिखाई देने वाली सभी त्रुटियों को अनदेखा करें। जब आप url का उपयोग करते हैं, तो आपको अपने ब्राउज़र के एड्रेस बार पर एक पैडलॉक आइकन देखना चाहिए। उस पर क्लिक करें और सर्वर का एसएसएल सर्टिफिकेट डाउनलोड करें।
आनंदी

जवाबों:


251

हैंडशेक की विफलता विभिन्न कारणों से हो सकती है:

  • क्लाइंट और सर्वर द्वारा उपयोग में असंगत साइफर सूट करता है। इसके लिए क्लाइंट को सर्वर द्वारा समर्थित साइफर सूट का उपयोग (या सक्षम) करना होगा।
  • उपयोग में SSL के असंगत संस्करण (सर्वर केवल TLS v1 को स्वीकार कर सकता है, जबकि क्लाइंट केवल SSL v3 का उपयोग करने में सक्षम है)। फिर से, क्लाइंट को यह सुनिश्चित करना होगा कि वह एसएसएल / टीएलएस प्रोटोकॉल के संगत संस्करण का उपयोग करता है।
  • सर्वर प्रमाणपत्र के लिए अधूरा विश्वास पथ; सर्वर का प्रमाण पत्र शायद ग्राहक द्वारा भरोसा नहीं किया जाता है। यह आमतौर पर एक अधिक क्रिया त्रुटि में परिणाम होगा, लेकिन यह बहुत संभव है। आमतौर पर फिक्स क्लाइंट के ट्रस्ट स्टोर में सर्वर के CA प्रमाणपत्र को आयात करना है।
  • एक अलग डोमेन के लिए प्रमाणपत्र जारी किया जाता है। फिर से, यह एक और अधिक क्रियात्मक संदेश के रूप में होता है, लेकिन अगर यह कारण है तो मैं यहां तय करूंगा। इस मामले में रिज़ॉल्यूशन को सही प्रमाणपत्र का उपयोग करने के लिए सर्वर (यह आपका नहीं लगता है) मिलेगा।

चूंकि, अंतर्निहित विफलता को इंगित नहीं किया जा सकता है, इसलिए -Djavax.net.debug=allस्थापित एसएसएल कनेक्शन के डिबगिंग को सक्षम करने के लिए ध्वज पर स्विच करना बेहतर है । डिबग को चालू करने के साथ, आप यह इंगित कर सकते हैं कि हैंडशेक में कौन सी गतिविधि विफल हो गई है।

अपडेट करें

अब उपलब्ध विवरणों के आधार पर, यह प्रतीत होता है कि समस्या सर्वर को जारी किए गए प्रमाण पत्र और रूट सीए के बीच एक अपूर्ण प्रमाणपत्र ट्रस्ट पथ के कारण है। ज्यादातर मामलों में, यह इसलिए है क्योंकि रूट CA का प्रमाणपत्र ट्रस्ट स्टोर में अनुपस्थित है, इस स्थिति के लिए जहां प्रमाणपत्र ट्रस्ट पथ मौजूद नहीं हो सकता है; प्रमाणपत्र ग्राहक द्वारा अनिवार्य रूप से अविश्वसनीय है। ब्राउज़र एक चेतावनी प्रस्तुत कर सकते हैं ताकि उपयोगकर्ता इसे अनदेखा कर सकें, लेकिन SSL क्लाइंट (जैसे HttpsURLConnection वर्ग, या Apache HttpCompords Client जैसे किसी HTTP क्लाइंट लाइब्रेरी ) के लिए ऐसा नहीं है।

अधिकांश ग्राहक वर्ग / पुस्तकालय प्रमाणपत्र सत्यापन के लिए जेवीएम द्वारा उपयोग किए जाने वाले ट्रस्ट स्टोर पर भरोसा करेंगे। ज्यादातर मामलों में, यह cacertsJRE_HOME / lib / सुरक्षा निर्देशिका में फ़ाइल होगी । यदि ट्रस्ट स्टोर का स्थान जेवीएम सिस्टम संपत्ति का उपयोग करके निर्दिष्ट किया गया है javax.net.ssl.trustStore, तो उस पथ में स्टोर आमतौर पर क्लाइंट लाइब्रेरी द्वारा उपयोग किया जाता है। यदि आप संदेह में हैं, तो अपनी Merchantकक्षा पर एक नज़र डालें , और संबंध बनाने के लिए उपयोग की जाने वाली कक्षा / लाइब्रेरी का पता लगाएँ।

इस ट्रस्ट स्टोर में सीए जारी करने वाले सर्वर के प्रमाण पत्र को जोड़ने से समस्या का समाधान होना चाहिए। आप इस उद्देश्य के लिए उपकरण प्राप्त करने से संबंधित प्रश्न पर मेरे उत्तर का उल्लेख कर सकते हैं , लेकिन इस उद्देश्य के लिए जावा कीटूल उपयोगिता पर्याप्त है।

चेतावनी : ट्रस्ट स्टोर अनिवार्य रूप से उन सभी सीए की सूची है, जिन पर आप भरोसा करते हैं। यदि आप एक ऐसे प्रमाणपत्र में डालते हैं जो उस सीए से संबंधित नहीं है जिस पर आप भरोसा नहीं करते हैं, तो एसएसएल / टीएलएस उन साइटों से जुड़ता है जिनके पास उस संस्था द्वारा जारी किए गए प्रमाण पत्र हैं, अगर निजी कुंजी उपलब्ध है तो उसे डिक्रिप्ट किया जा सकता है।

# 2 अद्यतन करें: JSSE ट्रेस के आउटपुट को समझना

जेवीएम द्वारा उपयोग किए जाने वाले कीस्टोर और ट्रस्टस्टोर्स आमतौर पर बहुत शुरुआत में सूचीबद्ध होते हैं, कुछ इस तरह से:

keyStore is : 
keyStore type is : jks
keyStore provider is : 
init keystore
init keymanager of type SunX509
trustStore is: C:\Java\jdk1.6.0_21\jre\lib\security\cacerts
trustStore type is : jks
trustStore provider is : 

यदि गलत ट्रस्टस्टोर का उपयोग किया जाता है, तो आपको सर्वर के प्रमाणपत्र को दाईं ओर फिर से आयात करना होगा, या सूचीबद्ध एक का उपयोग करने के लिए सर्वर को फिर से कॉन्फ़िगर करना होगा (अनुशंसित नहीं है यदि आपके पास कई जेवीएम हैं, और उन सभी को अलग-अलग उपयोग किया जाता है। की जरूरत है)।

यदि आप यह सत्यापित करना चाहते हैं कि ट्रस्ट सीट्स की सूची में आवश्यक सीट्स हैं, तो उसी के लिए एक सेक्शन है, जो निम्नानुसार है:

adding as trusted cert:
  Subject: CN=blah, O=blah, C=blah
  Issuer:  CN=biggerblah, O=biggerblah, C=biggerblah
  Algorithm: RSA; Serial number: yadda
  Valid from SomeDate until SomeDate

आपको यह देखने की आवश्यकता होगी कि क्या सर्वर का सीए एक विषय है।

हैंडशेक प्रक्रिया में कुछ मुख्य प्रविष्टियाँ होंगी (आपको उन्हें विस्तार से समझने के लिए SSL की आवश्यकता होगी, लेकिन वर्तमान समस्या को डीबग करने के उद्देश्य से, यह जानना पर्याप्त होगा कि एक हैंडशेक_फैल्योर आमतौर पर Serverio में रिपोर्ट किया जाता है।

1. ClientHello

प्रविष्टियों की एक श्रृंखला की सूचना दी जाएगी जब कनेक्शन को प्रारंभ किया जा रहा है। SSL / TLS कनेक्शन सेटअप में क्लाइंट द्वारा भेजा गया पहला संदेश ClientHello संदेश है, जिसे आमतौर पर लॉग में रिपोर्ट किया जाता है:

*** ClientHello, TLSv1
RandomCookie:  GMT: 1291302508 bytes = { some byte array }
Session ID:  {}
Cipher Suites: [SSL_RSA_WITH_RC4_128_MD5, SSL_RSA_WITH_RC4_128_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_DES_CBC_SHA, SSL_DHE_RSA_WITH_DES_CBC_SHA, SSL_DHE_DSS_WITH_DES_CBC_SHA, SSL_RSA_EXPORT_WITH_RC4_40_MD5, SSL_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA]
Compression Methods:  { 0 }
***

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

2. सर्वरहेलो

सर्वर एक सर्वरहेलो के साथ प्रतिक्रिया करता है, जो इंगित करेगा कि क्या कनेक्शन सेटअप आगे बढ़ सकता है। लॉग में प्रविष्टियाँ आमतौर पर निम्न प्रकार की होती हैं:

*** ServerHello, TLSv1
RandomCookie:  GMT: 1291302499 bytes = { some byte array}
Cipher Suite: SSL_RSA_WITH_RC4_128_SHA
Compression Method: 0
***

उस सिफर सूट पर ध्यान दें, जिसे उसने चुना है; यह सर्वर और क्लाइंट दोनों के लिए सबसे अच्छा सूट है। यदि कोई त्रुटि होती है तो आमतौर पर सिफर सूट निर्दिष्ट नहीं किया जाता है। सर्वर का प्रमाण पत्र (और वैकल्पिक रूप से पूरी श्रृंखला) सर्वर द्वारा भेजा जाता है, और प्रविष्टियों में पाया जाएगा:

*** Certificate chain
chain [0] = [
[
  Version: V3
  Subject: CN=server, O=server's org, L=server's location, ST =Server's state, C=Server's country
  Signature Algorithm: SHA1withRSA, OID = some identifer

.... the rest of the certificate
***

यदि प्रमाणपत्र का सत्यापन सफल हो गया है, तो आपको निम्न के समान प्रविष्टि मिलेगी:

Found trusted certificate:
[
[
  Version: V1
  Subject: OU=Server's CA, O="Server's CA's company name", C=CA's country
  Signature Algorithm: SHA1withRSA, OID = some identifier

उपरोक्त चरणों में से एक भी सफल नहीं हुआ, जिसके परिणामस्वरूप हैंडशेक_फेल्योर, हैंडशेक के लिए आम तौर पर इस चरण में पूरा होता है (वास्तव में नहीं, लेकिन हैंडशेक के बाद के चरण आमतौर पर हैंडशेक विफलता का कारण नहीं होते हैं)। आपको यह पता लगाने की आवश्यकता होगी कि कौन सा चरण विफल रहा है, और उचित संदेश को प्रश्न के अपडेट के रूप में पोस्ट करें (जब तक कि आप संदेश को पहले से ही समझ नहीं चुके हैं, और आप जानते हैं कि इसे हल करने के लिए क्या करना है)।


कृपया जो कुछ भी मिला है, उसे पोस्ट करें, ताकि मैं उत्तर को और अधिक विशिष्ट के साथ अपडेट कर सकूं।
विनीत रेनॉल्ड्स

1
ठीक है विनीत, मैं समझ नहीं पा रहा हूं कि इससे कैसे निपटा जाए, मैं पहले ही थक चुका हूं। मुझे सर्वर URL को ओपस्नल
ओपनसीएल s_client -connect

@ यह, ऐसा लगता है कि सर्वर का प्रमाण पत्र एक इकाई द्वारा जारी किया गया था जो ओपनएसएसएल द्वारा उपयोग किए जाने वाले ट्रस्ट स्टोर में मौजूद नहीं है, और संभवतः आपके सर्वर (क्लाइंट) द्वारा उपयोग किए जाने वाले ट्रस्ट स्टोर में भी मौजूद नहीं है , जब यह कनेक्ट होता है सर्वर। उस स्थिति में, आपको अपने क्लाइंट के (OpenSSL / आपके सर्वर) ट्रस्ट स्टोर में प्रमाणपत्र जारी करने वाले CA के प्रमाण पत्र ( और सर्वर नहीं ) को आयात करना होगा ।
विनीत रेनॉल्ड्स

1
खैर, हो सकता है कि यह कैसर्ट पर निर्भर हो। लेकिन आप इसे केवल तभी निर्धारित कर सकते हैं जब आप नेटवर्क डीबग के आउटपुट को समझते हैं। यदि आप इसे जांचना चाहते हैं, तो आपको keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacertsसामग्री का प्रिंट आउट लेने के लिए कमांड का उपयोग करना होगा । फिर सत्यापित करें कि कैस्केर्ट में प्रमाण पत्र बैंक के प्रमाण पत्र के सीए से मेल खाते हैं या नहीं।
विनीत रेनॉल्ड्स

5
डिफ़ॉल्ट आमतौर पर है changeit। जब तक इसे बदला नहीं गया।
विनीत रेनॉल्ड्स

20

जावा क्रिप्टोग्राफी एक्सटेंशन (JCE) अनलिमिटेड स्ट्रेंथ ( JDK7 | JDK8 के लिए ) इंस्टॉल करने से यह बग ठीक हो सकता है। फ़ाइल को अनज़िप करें और इसे इंस्टॉल करने के लिए रीडमी का पालन करें।


16

हैंडशेक की विफलता एक छोटी सी TLSv1 प्रोटोकॉल कार्यान्वयन हो सकती है।

हमारे मामले में यह जावा 7 के साथ मदद करता है:

java -Dhttps.protocols=TLSv1.2,TLSv1.1,TLSv1 

Jvm इस क्रम में बातचीत करेगा। नवीनतम अपडेट वाले सर्वर 1.2 करेंगे, छोटी गाड़ी v1 तक नीचे जाएगी और यह जावा 7 में समान v1 के साथ काम करेगी।


1
इससे मुझे मदद मिली। मेरा क्लाइंटहेलो था, लेकिन कोई सर्वर नहीं था, अंत काफी अचानक था। यह मेरे लिए जावा 7 पर तय किया। बहुत बहुत धन्यवाद।
virgo47

15

जब ग्राहक को प्रमाण पत्र प्रस्तुत करने की आवश्यकता होती है तो यह भी खुश हो सकता है। सर्वर द्वारा प्रमाण पत्र श्रृंखला को सूचीबद्ध करने के बाद, निम्नलिखित हो सकता है:

3. सर्टिफिकेट रिक्वेस्ट सर्वर क्लाइंट से सर्टिफिकेट रिक्वेस्ट जारी करेगा। अनुरोध उन सभी प्रमाणपत्रों को सूचीबद्ध करेगा जो सर्वर स्वीकार करता है।

*** CertificateRequest
Cert Types: RSA
Cert Authorities:
<CN=blah, OU=blah, O=blah, L=blah, ST=blah, C=blah>
<CN=yadda, DC=yadda, DC=yadda>
<CN=moreblah, OU=moreblah, O=moreblah, C=moreblah>
<CN=moreyada, OU=moreyada, O=moreyada, C=moreyada>
... the rest of the request
*** ServerHelloDone

4. क्लाइंट सर्टिफिकेट चेन यह वह सर्टिफिकेट है जो क्लाइंट सर्वर पर भेज रहा है।

*** Certificate chain
chain [0] = [
[
  Version: V3
  Subject: EMAILADDRESS=client's email, CN=client, OU=client's ou, O=client's Org, L=client's location, ST=client's state, C=client's Country
  Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5
  ... the rest of the certificate
*** ClientKeyExchange, RSA PreMasterSecret, TLSv1    
... key exchange info 

यदि श्रृंखला में कोई प्रमाणपत्र नहीं है और सर्वर को एक की आवश्यकता है, तो आपको यहां हैंडशेक त्रुटि मिलेगी। संभावित कारण आपके प्रमाणपत्र का पथ नहीं मिला।

5. प्रमाणपत्र सत्यापित करें क्लाइंट प्रमाणपत्र को सत्यापित करने के लिए सर्वर से पूछता है

*** CertificateVerify
... payload of verify check

यह चरण केवल तभी होगा जब आप प्रमाण पत्र भेज रहे हों।

6. समाप्त सर्वर सत्यापित प्रतिक्रिया के साथ जवाब देगा

*** Finished
verify_data:  { 345, ... }

मेरे मामले में ऐसा लगता है कि सभी कदम ठीक हैं, लेकिन फिर भी हाथ मिलाने की त्रुटि है।
टिब्बी

बहुत अच्छा जवाब ... लेकिन ये सब मेरे हैंडशेक असफलता में ठीक हैं लेकिन अभी भी मुझे विफलता है। क्या आप मेरे इसी प्रश्न पर एक नज़र डाल सकते हैं?
टिब्बी

ग्राहक प्रमाणपत्र प्रस्तुत करने में विफलता टीएलएस में किसी भी प्रकार की त्रुटि नहीं है। यदि सर्वर को क्लाइंट प्रमाणपत्र की आवश्यकता होती है और किसी को प्रस्तुत नहीं किया जाता है, तो यह कनेक्शन बंद कर देगा।
लोर्ने

@EJP यह सच है कि यह TLS में कोई त्रुटि नहीं है लेकिन असफल कनेक्शन जावा कोड में एक त्रुटि के रूप में दिखाई देता है।
ब्रिगेडियर

1
@ मगर, एक चेतावनी के रूप में नहीं, जो कि यह उत्तर कहता है, और सवाल क्या है।
लोर्ने

15

मुझे नहीं लगता कि यह समस्या पहले प्रश्नकर्ता को हल करती है, लेकिन जवाब के लिए यहां आने वाले गोगलर्स के लिए:


अपडेट 51 पर, जावा 1.8 निषिद्ध [1] RC4 सिफर डिफ़ॉल्ट रूप से, जैसा कि हम रिलीज़ नोट्स पेज पर देख सकते हैं:

बग फिक्स: आरसी 4 सिफर सूट को प्रतिबंधित करें

RC4 को अब एक समझौता किया हुआ सिफर माना जाता है।

RC4 सिफर सुइट्स को क्लाइंट और सर्वर डिफॉल्ट इनेबल्ड साइपर सूट सूची से Oracle JSSE कार्यान्वयन में हटा दिया गया है। ये सिफर सुइट्स अभी भी SSLEngine.setEnabledCipherSuites()और SSLSocket.setEnabledCipherSuites()तरीकों से सक्षम किए जा सकते हैं । JDK-8077109 देखें (सार्वजनिक नहीं)।

यदि आपके सर्वर में इस सिफर के लिए एक मजबूत प्राथमिकता है (या केवल इस सिफर का उपयोग करें) तो यह handshake_failureजावा पर ट्रिगर हो सकता है ।

आप RC4 सिफर को सक्षम करने वाले सर्वर से कनेक्ट करने का परीक्षण कर सकते हैं (पहले, enabledतर्क के बिना यह देखने की कोशिश करें कि क्या कोई ट्रिगर करता है handshake_failure, फिर सेट करें enabled:

import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;

import java.util.Arrays;

/** Establish a SSL connection to a host and port, writes a byte and
 * prints the response. See
 * http://confluence.atlassian.com/display/JIRA/Connecting+to+SSL+services
 */
public class SSLRC4Poke {
    public static void main(String[] args) {
        String[] cyphers;
        if (args.length < 2) {
            System.out.println("Usage: "+SSLRC4Poke.class.getName()+" <host> <port> enable");
            System.exit(1);
        }
        try {
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(args[0], Integer.parseInt(args[1]));
        
            cyphers = sslsocketfactory.getSupportedCipherSuites();
            if (args.length ==3){
                sslsocket.setEnabledCipherSuites(new String[]{
                    "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5",
                    "SSL_DH_anon_WITH_RC4_128_MD5",
                    "SSL_RSA_EXPORT_WITH_RC4_40_MD5",
                    "SSL_RSA_WITH_RC4_128_MD5",
                    "SSL_RSA_WITH_RC4_128_SHA",
                    "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA",
                    "TLS_ECDHE_RSA_WITH_RC4_128_SHA",
                    "TLS_ECDH_ECDSA_WITH_RC4_128_SHA",
                    "TLS_ECDH_RSA_WITH_RC4_128_SHA",
                    "TLS_ECDH_anon_WITH_RC4_128_SHA",
                    "TLS_KRB5_EXPORT_WITH_RC4_40_MD5",
                    "TLS_KRB5_EXPORT_WITH_RC4_40_SHA",
                    "TLS_KRB5_WITH_RC4_128_MD5",
                    "TLS_KRB5_WITH_RC4_128_SHA"
                });     
            }

            InputStream in = sslsocket.getInputStream();
            OutputStream out = sslsocket.getOutputStream();

            // Write a test byte to get a reaction :)
            out.write(1);

            while (in.available() > 0) {
                System.out.print(in.read());
            }
            System.out.println("Successfully connected");

        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}

1 - https://www.java.com/en/download/faq/release_changes.xml


10

मेरे पास यह त्रुटि है जब मैंने JDK 1.7 का उपयोग करने की कोशिश की थी। जब मैंने अपने JDK को jdk1.8.0_66 में अपग्रेड किया तो सब ठीक होने लगा।

तो इस समस्या का सबसे सरल समाधान हो सकता है - अपने JDK को अपग्रेड करना और यह अच्छी तरह से काम करना शुरू कर सकता है।


4
अच्छा लगा। JDK को अपग्रेड करने का सबसे सरल उपाय है? : D क्या आप जानते हैं कि जो वातावरण जहाँ हो रहा है, उसके आधार पर कितना जटिल हो सकता है? मान लीजिए कि अमेज़न ने JDK 7 को चलाया और अब अचानक JDK 8 में अपग्रेड करने की आवश्यकता होगी ... अच्छा!
Arturas M

1
एक साधारण मामूली संस्करण के उन्नयन ने मेरे लिए इस मुद्दे को हल किया .. JDK 11.0.1 से 11.0.6 तक
क्लिंट

4

मेरे मामले में, प्रमाणपत्र आयात किया गया है, त्रुटि बनी हुई है, इसे System.setProperty("https.protocols", "TLSv1.2,TLSv1.1,SSLv3");कनेक्ट करने से पहले जोड़कर हल किया गया है


मेरे लिए जावा 1.8 में काम किया। धन्यवाद :)
सुपुन अमरसिंह

3

यह मानते हुए कि आप उचित एसएसएल / टीएलएस प्रोटोकॉल का उपयोग कर रहे हैं, ठीक से आपके keyStoreऔर कॉन्फ़िगर किए गए हैं trustStore, और पुष्टि की है कि प्रमाण पत्र के साथ कोई समस्या मौजूद नहीं है, आपको अपने सुरक्षा एल्गोरिदम को मजबूत करने की आवश्यकता हो सकती है

जैसा कि विनीत के उत्तर में उल्लेख किया गया है , एक संभावित कारण जो आपको यह त्रुटि प्राप्त होता है वह असंगत सिफर स्वीट्स के कारण होता है। जावा क्रिप्टोग्राफी एक्सटेंशन (जेसीई) में दिए गए लोगों के साथ अपने जेडीके के फ़ोल्डर में मेरे local_policyऔर US_export_policyजार को अपडेट करके , मैं हैंडशेक को सफलतापूर्वक पूरा करने में सक्षम था।security


2

मैं आज एक ही समस्या को पूरा करने के लिए OkHttp क्लाइंट के साथ एक https आधारित url प्राप्त करता हूं। यह सर्वर साइड और क्लाइंट साइड के बीच Https प्रोटोकॉल संस्करण और सिफर विधि बेमेल के कारण होता था ।

1) अपने वेबसाइट https प्रोटोकॉल संस्करण और सिफर विधि की जाँच करें।

openssl>s_client -connect your_website.com:443 -showcerts

आपको कई विस्तार से जानकारी मिलेगी, प्रमुख जानकारी इस प्रकार है:

SSL-Session:
    Protocol  : TLSv1
    Cipher    : RC4-SHA
2) अपने http क्लाइंट को कॉन्फ़िगर करें, उदाहरण के लिए, OkHttp क्लाइंट केस में:
@Test()
public void testHttpsByOkHttp() {
    ConnectionSpec spec = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
            .tlsVersions(TlsVersion.TLS_1_0) //protocol version
            .cipherSuites(
                    CipherSuite.TLS_RSA_WITH_RC4_128_SHA, //cipher method
                    CipherSuite.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
                    CipherSuite.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
                    CipherSuite.TLS_DHE_RSA_WITH_AES_128_GCM_SHA256)
            .build();

    OkHttpClient client = new OkHttpClient();
    client.setConnectionSpecs(Collections.singletonList(spec));
    Request request = new Request.Builder().url("https://your_website.com/").build();
    try {
        Response response = client.newCall(request).execute();
        if(response.isSuccessful()){
            logger.debug("result= {}", response.body().string());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

यह वही मिलेगा जो हम चाहते हैं।


2

मुझे एक HTTPS सर्वर मिला है जो इस तरह से विफल हो गया अगर मेरे जावा क्लाइंट प्रक्रिया को कॉन्फ़िगर किया गया था

-Djsse.enableSNIExtension=false

कनेक्शन सफलतापूर्वक समाप्त handshake_failureहोने के बाद, ServerHelloलेकिन डेटा स्ट्रीम प्रारंभ होने से पहले विफल हो गया था।

कोई स्पष्ट त्रुटि संदेश नहीं था जो समस्या की पहचान करता था, त्रुटि बस दिखती थी

main, READ: TLSv1.2 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, handshake_failure
%% Invalidated:  [Session-3, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384]
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

मैंने " -Djsse.enableSNIExtension=false" विकल्प के साथ और उसके बिना प्रयास करके इस मुद्दे को अलग कर दिया


मुझे GDAX सैंडबॉक्स से कनेक्ट करते समय समान त्रुटि मिल रही है, इसके लिए कोई समाधान?
नितिन वावड़िया

1

मेरा एक था TLS संस्करण असंगत त्रुटि थी।

पहले TLSv1मैंने इसे बदल दिया था इससे TLSV1.2मेरी समस्या हल हो गई।


1

मैं com.google.api http क्लाइंट का उपयोग कर रहा हूं। जब मैं एक आंतरिक कंपनी साइट के साथ संवाद करता हूं, तो मुझे यह समस्या तब हुई जब मैंने http के बजाय गलती से https का उपयोग किया।

main, READ: TLSv1.2 Alert, length = 2
main, RECV TLSv1.2 ALERT:  fatal, handshake_failure
main, called closeSocket()
main, handling exception: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
main, IOException in getSession():  javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
main, called close()
main, called closeInternal(true)
262 [main] DEBUG org.apache.http.impl.conn.DefaultClientConnection  - Connection shut down
main, called close()
main, called closeInternal(true)
263 [main] DEBUG org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager  - Released connection is not reusable.
263 [main] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute  - Releasing connection [HttpRoute[{s}->https://<I-replaced>]][null]
263 [main] DEBUG org.apache.http.impl.conn.tsccm.ConnPoolByRoute  - Notifying no-one, there are no waiting threads
Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
    at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:431)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:339)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at com.google.api.client.http.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:67)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:960)

नहीं, तुम नहीं कर सकते। यदि वह TLS नहीं बोल रहा है तो सर्वर TLS अलर्ट नहीं भेज सकता है।
लोर्ने

मैंने अपने कार्यक्रम से आउटपुट दिखाने के लिए अपनी टिप्पणी अपडेट की है। यह वास्तविक है। यदि आप डाउन वोट को हटा देंगे तो इसकी सराहना करेंगे।
thebiggestlebowski

यह वास्तविक है, लेकिन यह टीएलएस से एक सादा सर्वर से बात करने के कारण नहीं है। एक प्लेनटेक्स्ट सर्वर परिभाषा से टीएलएस पर बात नहीं कर रहा है, और इसलिए आप संभवतः इसे परिभाषा से, टीएलएस अलर्ट प्राप्त नहीं कर सकते हैं। आपको इस बारे में कोई जानकारी नहीं है कि आपके उत्तर को किसने अस्वीकृत किया है।
लोर्ने

मैंने मान लिया कि आपने मतदान किया है - मेरी क्षमा याचना अगर ऐसा नहीं है। मेरा त्रुटि संदेश इस प्रश्न के शीर्षक से बिल्कुल मेल खाता है। यह त्रुटि संदेश प्राप्त करने के लिए एक मान्य पथ / परीक्षण मामला है और मेरे पास एक समाधान है जो दूसरों की मदद कर सकता है। सम्मान से, मुझे नहीं लगता कि यह मायने रखता है कि यह टीएलएस सर्वर त्रुटि प्रतिक्रिया के कारण है या नहीं। कोई यहाँ से गूगल पर आएगा और मेरा जवाब मदद कर सकता है अगर उन्होंने वही गलती की है।
thebiggestlebowski

मैंने आपकी त्रुटि संदेश के बारे में कुछ नहीं कहा है। मैं आपके गलत दावे पर टिप्पणी कर रहा हूं कि यह 'गलती से एचटीटीपीएस का उपयोग करने के बजाय एचटीटीपी के कारण है'। ऐसा नहीं है, और यह उन कारणों से नहीं हो सकता है, जो मैंने बताए हैं और जिन्हें आपने किसी भी तरह से संबोधित नहीं किया है। HTTP का उपयोग करना निश्चित रूप से इसे दूर कर देगा, जाहिर है, क्योंकि प्लेनटेक्स्ट में कोई टीएलएस अलर्ट नहीं हैं, लेकिन अंतर्निहित समस्या को संबोधित नहीं करता है।
लोर्ने


1

Ugg! यह सिर्फ मेरे लिए एक जावा संस्करण मुद्दा बन गया। मुझे JRE 1.6 का उपयोग करके हैंडशेक की त्रुटि मिली और सब कुछ JRE 1.8.0_144 का उपयोग करके पूरी तरह से काम किया।


0

डिस्क्लेमर: मुझे इस बात की जानकारी नहीं है कि क्या जवाब कई लोगों के लिए मददगार होगा, सिर्फ इसलिए शेयर करना क्योंकि ऐसा हो सकता है।

अनुरोध XML (SOAP) भेजने के लिए Parasoft SOATest का उपयोग करते समय मुझे यह त्रुटि मिल रही थी।

मुद्दा यह था कि मैंने प्रमाण पत्र को जोड़ने और इसे प्रमाणित करने के बाद ड्रॉपडाउन से गलत उपनाम का चयन किया था ।


0

मेरे मामले में, वेबसाइट केवल TLSv1.2 का उपयोग कर सकती है। और मैं अपाचे httpclient 4.5.6 का उपयोग करता हूं, मैं इस कोड का उपयोग करता हूं और इसे हल करने के लिए jce स्थापित करता हूं (JDK1.7):

JCE

jdk7 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html

jdk 8 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

कोड:

SSLContext sslContext = SSLContext.getDefault();

  SSLConnectionSocketFactory sslConnectionFactory = new SSLConnectionSocketFactory(
      sslContext,
      new String[]{"TLSv1.2"}, // important
      null,
      NoopHostnameVerifier.INSTANCE);

  Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
      .register("https", sslConnectionFactory)
      .register("http", PlainConnectionSocketFactory.INSTANCE)
      .build();

  HttpClientConnectionManager ccm = new BasicHttpClientConnectionManager(registry);
  httpclient = HttpClientBuilder.create().
      .setSSLSocketFactory(sslConnectionFactory)
      .setConnectionManager(ccm)
      .build();

0

डेवलपर (आइटम 1) और सिस्टम व्यवस्थापक (आइटम 2 और 3) के परिप्रेक्ष्य से समस्या निवारण के लिए:

  1. जावा के माध्यम से SSL हैंडशेक डीबग सक्षम करें -Djavax.net.debug=ssl:handshake:verbose
  2. यदि आप अवलोकन करते हैं, तो sudo apt install ssldumpइस लिंक का अनुसरण करके स्रोत से सर्वर पर ssldump स्थापित करेंUnknown value चरण के नीचे चलने पर सिफर में ।
  3. सर्वर पर, sudo ssldump -k <your-private-key> -i <your-network-interface>
  4. विफलता के वास्तविक कारण के बारे में लॉग की जाँच करें ।

Ssldump लॉग के काम नहीं करने का उदाहरण:

New TCP connection #1: 10.1.68.86(45308) <-> 10.1.68.83(5671)
1 1  0.0111 (0.0111)  C>S  Handshake
      ClientHello
        Version 3.3
        cipher suites
        TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
        TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        TLS_RSA_WITH_AES_256_GCM_SHA384
        TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384
        TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384
        TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
        TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
        TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_RSA_WITH_AES_128_GCM_SHA256
        TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256
        TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256
        TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
        TLS_RSA_WITH_AES_256_CBC_SHA256
        TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384
        TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
        TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
        TLS_RSA_WITH_AES_256_CBC_SHA
        TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA
        TLS_ECDH_RSA_WITH_AES_256_CBC_SHA
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA
        TLS_DHE_DSS_WITH_AES_256_CBC_SHA
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_RSA_WITH_AES_128_CBC_SHA256
        TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256
        TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_DHE_DSS_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
        TLS_RSA_WITH_AES_128_CBC_SHA
        TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA
        TLS_ECDH_RSA_WITH_AES_128_CBC_SHA
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA
        TLS_DHE_DSS_WITH_AES_128_CBC_SHA
        TLS_EMPTY_RENEGOTIATION_INFO_SCSV
        compression methods
                  NULL
1 2  0.0122 (0.0011)  S>C  Alert
    level           fatal
    value           insufficient_security
1    0.0126 (0.0004)  S>C  TCP RST

Ssldump लॉग के सफल हैंडशेक का उदाहरण

New TCP connection #1: 10.1.68.86(56558) <-> 10.1.68.83(8443)
1 1  0.0009 (0.0009)  C>S  Handshake
      ClientHello
        Version 3.3
        cipher suites
        TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
        TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
        Unknown value 0xcca9
        Unknown value 0xcca8
        Unknown value 0xccaa
        TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA256
        TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
        TLS_DHE_RSA_WITH_AES_256_CBC_SHA
        TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
        TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
        TLS_DHE_RSA_WITH_AES_128_CBC_SHA
        TLS_RSA_WITH_AES_256_GCM_SHA384
        TLS_RSA_WITH_AES_128_GCM_SHA256
        TLS_RSA_WITH_AES_256_CBC_SHA256
        TLS_RSA_WITH_AES_128_CBC_SHA256
        TLS_RSA_WITH_AES_256_CBC_SHA
        TLS_RSA_WITH_AES_128_CBC_SHA
        TLS_EMPTY_RENEGOTIATION_INFO_SCSV
        compression methods
                  NULL
1 2  0.0115 (0.0106)  S>C  Handshake
      ServerHello
        Version 3.3
        session_id[0]=

        cipherSuite         TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        compressionMethod                   NULL
1 3  0.0115 (0.0000)  S>C  Handshake
      Certificate
1 4  0.0115 (0.0000)  S>C  Handshake
      ServerKeyExchange
Not enough data. Found 294 bytes (expecting 32767)
1 5    0.0115   (0.0000)    S>C    Handshake
        ServerHelloDone
1 6    0.0141   (0.0025)    C>S    Handshake
        ClientKeyExchange
Not enough data. Found 31 bytes (expecting 16384)
1 7    0.0141   (0.0000)    C>S    ChangeCipherSpec
1 8    0.0141   (0.0000)    C>S      Handshake
1 9    0.0149   (0.0008)    S>C    Handshake
1 10   0.0149   (0.0000)    S>C    ChangeCipherSpec
1 11   0.0149   (0.0000)    S>C      Handshake

जावा लॉग काम नहीं करने का उदाहरण

javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.778 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.779 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.779 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.780 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.780 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.780 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.781 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.781 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.781 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.782 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.783 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: T LS_DHE_RSA_WITH_AES_256_CBC_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 for TLS11
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.784 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_GCM_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.785 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_128_GCM_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_RSA_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384 for TLS10 javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.786 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.787 MYT|HandshakeContext.java:294|Ignore unsupported cipher suite: TLS_DHE_DSS_WITH_AES_256_CBC_SHA256 for TLS10
javax.net.ssl|WARNING|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.818 MYT|SignatureScheme.java:282|Signature algorithm, ed25519, is not supported by the underlying providers
javax.net.ssl|WARNING|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.818 MYT|SignatureScheme.java:282|Signature algorithm, ed448, is not supported by the underlying providers
javax.net.ssl|ALL|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.822 MYT|SignatureScheme.java:358|Ignore disabled signature sheme: rsa_md5
javax.net.ssl|INFO|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.822 MYT|AlpnExtension.java:161|No available application protocols
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.823 MYT|SSLExtensions.java:256|Ignore, context unavailable extension: application_layer_protocol_negotiation
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.823 MYT|SSLExtensions.java:256|Ignore, context unavailable extension: renegotiation_info
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.825 MYT|ClientHello.java:651|Produced ClientHello handshake message (
"ClientHello": {
  "client version"      : "TLSv1.2",
  "random"              : "FB BC CD 7C 17 65 86 49 3E 1C 15 37 24 94 7D E7 60 44 1B B8 F4 18 21 D0 E1 B1 31 0D E1 80 D6 A7",
  "session id"          : "",
  "cipher suites"       : "[TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384(0xC02C), TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256(0xC02B), TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384(0xC030), TLS_RSA_WITH_AES_256_GCM_SHA384(0x009D), TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384(0xC02E), TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384(0xC032), TLS_DHE_RSA_WITH_AES_256_GCM_SHA384(0x009F), TLS_DHE_DSS_WITH_AES_256_GCM_SHA384(0x00A3), TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256(0xC02F), TLS_RSA_WITH_AES_128_GCM_SHA256(0x009C), TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256(0xC02D), TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256(0xC031), TLS_DHE_RSA_WITH_AES_128_GCM_SHA256(0x009E), TLS_DHE_DSS_WITH_AES_128_GCM_SHA256(0x00A2), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384(0xC024), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384(0xC028), TLS_RSA_WITH_AES_256_CBC_SHA256(0x003D), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384(0xC026), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384(0xC02A), TLS_DHE_RSA_WITH_AES_256_CBC_SHA256(0x006B), TLS_DHE_DSS_WITH_AES_256_CBC_SHA256(0x006A), TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA(0xC00A), TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA(0xC014), TLS_RSA_WITH_AES_256_CBC_SHA(0x0035), TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA(0xC005), TLS_ECDH_RSA_WITH_AES_256_CBC_SHA(0xC00F), TLS_DHE_RSA_WITH_AES_256_CBC_SHA(0x0039), TLS_DHE_DSS_WITH_AES_256_CBC_SHA(0x0038), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256(0xC023), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256(0xC027), TLS_RSA_WITH_AES_128_CBC_SHA256(0x003C), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256(0xC025), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256(0xC029), TLS_DHE_RSA_WITH_AES_128_CBC_SHA256(0x0067), TLS_DHE_DSS_WITH_AES_128_CBC_SHA256(0x0040), TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA(0xC009), TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA(0xC013), TLS_RSA_WITH_AES_128_CBC_SHA(0x002F), TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA(0xC004), TLS_ECDH_RSA_WITH_AES_128_CBC_SHA(0xC00E), TLS_DHE_RSA_WITH_AES_128_CBC_SHA(0x0033), TLS_DHE_DSS_WITH_AES_128_CBC_SHA(0x0032), TLS_EMPTY_RENEGOTIATION_INFO_SCSV(0x00FF)]",
  "compression methods" : "00",  "extensions"          : [
    "server_name (0)": {
      type=host_name (0), value=mq.tpc-ohcis.moh.gov.my
    },
    "status_request (5)": {
      "certificate status type": ocsp
      "OCSP status request": {
        "responder_id": <empty>
        "request extensions": {
          <empty>
        }
      }
    },
    "supported_groups (10)": {
      "versions": [secp256r1, secp384r1, secp521r1, sect283k1, sect283r1, sect409k1, sect409r1, sect571k1, sect571r1, secp256k1, ffdhe2048, ffdhe3072, ffdhe4096, ffdhe6144, ffdhe8192]
    },
    "ec_point_formats (11)": {
      "formats": [uncompressed]
    },
    "signature_algorithms (13)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
    },
    "signature_algorithms_cert (50)": {
      "signature schemes": [ecdsa_secp256r1_sha256, ecdsa_secp384r1_sha384, ecdsa_secp512r1_sha512, rsa_pss_rsae_sha256, rsa_pss_rsae_sha384, rsa_pss_rsae_sha512, rsa_pss_pss_sha256, rsa_pss_pss_sha384, rsa_pss_pss_sha512, rsa_pkcs1_sha256, rsa_pkcs1_sha384, rsa_pkcs1_sha512, dsa_sha256, ecdsa_sha224, rsa_sha224, dsa_sha224, ecdsa_sha1, rsa_pkcs1_sha1, dsa_sha1]
    },
    "status_request_v2 (17)": {
      "cert status request": {
        "certificate status type": ocsp_multi
        "OCSP status request": {
          "responder_id": <empty>
          "request extensions": {
            <empty>
          }
        }      }
    },
    "extended_master_secret (23)": {
      <empty>
    },
    "supported_versions (43)": {
      "versions": [TLSv1.2, TLSv1.1, TLSv1]
    }
  ]
}
)
javax.net.ssl|DEBUG|43|SimpleAsyncTaskExecutor-1|2019-07-03 17:35:01.829 MYT|Alert.java:238|Received alert message (
"Alert": {
  "level"      : "fatal",
  "description": "insufficient_security"
}
)

0

मेरे मामले में मेरे पास संस्करण 1.1 के साथ एक मुद्दा था। मैं कर्ल के साथ आसानी से इस मुद्दे को पुन: पेश कर रहा था। सर्वर TLS1.2 की तुलना में कम संस्करणों का समर्थन नहीं करता था।

यह हैंडशेक समस्या प्राप्त हुई:

curl --insecure --tlsv1.1 -i https://youhost --noproxy "*"

संस्करण 1.2 के साथ यह ठीक काम कर रहा था:

curl --insecure --tlsv1.2 -i https://youhost --noproxy "*"

सर्वर एक वेबलॉगिक चला रहा था, और इस तर्क को setEnvDomain.sh में जोड़कर TLS1.1.1 के साथ काम करने के लिए बनाया:

-Dweblogic.security.SSL.minimumProtocolVersion=TLSv1.1

0

जावा संस्करण के कारण यह समस्या हो रही है। मैं 1.8.0.231 JDK का उपयोग कर रहा था और यह त्रुटि प्राप्त कर रहा था। मैंने अपने जावा संस्करण को 1.8.0.231 से 1.8.0.171 तक नीचा दिखाया है, अब यह ठीक काम कर रहा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.