अनजाने SSL संदेश, सादा कनेक्शन? अपवाद


172

मेरे पास नेट पर https सर्वर के साथ बोलने के लिए एक जावा कंप्लायड पैकेज है। संकलन चलाना निम्नलिखित अपवाद देता है:

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)

मुझे लगता है कि यह ग्राहक मशीन के साथ स्थापित कनेक्शन के कारण सुरक्षित नहीं है। क्या दूरस्थ https सर्वर से जुड़ने के लिए स्थानीय मशीन या पोर्ट को कॉन्फ़िगर करने का कोई तरीका है?

जवाबों:


238

मुझे लगता है कि यह ग्राहक मशीन के साथ स्थापित कनेक्शन के कारण सुरक्षित नहीं है।

यह इस तथ्य के कारण है कि आप HTTP सर्वर से बात कर रहे हैं, एचटीटीपीएस सर्वर नहीं। संभवतः आपने HTTPS के लिए सही पोर्ट नंबर का उपयोग नहीं किया है।


7
मेरे पास एक ही त्रुटि है, और मैंने हल किया जब मैंने https के बजाय http का उपयोग करना शुरू कर दिया। लेकिन जब मैं ब्राउज़र में लिंक को https के साथ रखता हूं तो यह काम करता है! और मुझे एक सुरक्षित क्वेरी करने की आवश्यकता है। मैं इस समस्या को कैसे हल कर सकता हूं?
ccoutinho

9
@rsy जब आपने 'लिंक रखा ... https' के साथ ब्राउजर आपके लिए 443 पोर्ट में बदल गया होगा। आप खुद भी ऐसा ही कर सकते हैं। वास्तव में HttpURLConnectionयह स्वचालित रूप से आपके लिए होगा, यदि आप एक पोर्ट निर्दिष्ट नहीं करते हैं।
Lorne

मुझे लगता है कि आप HTTPS होने के लिए अपने सर्वर पर किसी भी पोर्ट को सेटअप कर सकते हैं, यह एक विशिष्ट पोर्ट होना जरूरी नहीं है?

1
@KarlSherwin यह आप की तरह किसी भी बंदरगाह हो सकता है, आरक्षण के अधीन है, लेकिन अगर यह 443 नहीं है, तो आपको अपने सभी URL में अपने चारों ओर गाड़ी चलाना होगा।
लोरेन

18
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

आपके पास एक स्थानीय SMTP डोमेन नाम होना चाहिए जो मेल सर्वर से संपर्क करेगा और एक नया कनेक्शन स्थापित करेगा और साथ ही साथ आपको अपने संदेश में SSL गुण बदलना चाहिए

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection

 props.put("mail.smtp.socketFactory.fallback", "true"); // Should be true

10
वह HTTPS बोल रहा है, SMTP नहीं। -1
लोर्ने का मार्क्वेस

2
मेरे मामले में जो काम किया, धन्यवाद! javax.mail.MessagingException: SMTP होस्ट से कनेक्ट नहीं हो सका: mail.livemusicgo.com, port: 25; नेस्टेड अपवाद है: javax.net.ssl.SSLException: अपरिचित एसएसएल संदेश, सादा कनेक्शन?
सर्पिलोकेसी

1
@surfealokesea सवाल HTTP और HTTPS के बारे में है, और SMTP के बारे में एक उत्तर या एक व्यक्तिगत अनुभव प्रासंगिक नहीं है।
लोर्ने

1
हां, लेकिन यह सिर्फ उसके लिए नहीं है यह अन्य उपयोगकर्ताओं के लिए है जो इस 'अपरिचित ssl संदेश' के समान हैं। +1 टू यू, थोबिथ
sam1370

9

मुझे एक ही त्रुटि संदेश मिला जब मैं एक प्रॉक्सी के माध्यम से POST अनुरोध करने से पहले कंपनी फ़ायरवॉल में लॉग इन करना भूल गया था।


मुझे वही करना पड़ा, हालाँकि मैं कंपनी के अंदर था!
मोनोथ्रेड

1
क्या आप कृपया संक्षेप में बता सकते हैं कि कैसे हल करना है, मुझे भी अपनी कंपनी में उसी मुद्दे का सामना करना पड़ रहा है ठीक है
नितेश

3

मुझे भी यही त्रुटि मिली। ऐसा इसलिए था क्योंकि मैं http .. http का उपयोग करके https पोर्ट को एक्सेस कर रहा था। जब मैंने http को https में बदल दिया तो समस्या हल हो गई।


11
नहीं, आपको HTTPS के माध्यम से HTTP पोर्ट एक्सेस करते समय त्रुटि मिली। त्रुटि संदेश पढ़ें। आप एक सादे लक्ष्य से जुड़े। आपके द्वारा वर्णित स्थिति SSLException का कारण नहीं होगी, क्योंकि आप SSL का उपयोग नहीं कर रहे होंगे।
लोर्ने

1

मैं Jdevelopr 11.1.1.7 IDE में निर्मित जावा एप्लिकेशन से एक ही मुद्दे का सामना करता हूं। मैंने प्रॉक्‍सी फॉर्म प्रोजेक्‍ट प्रॉपर्टीज के उपयोग को अनचेक करके इस मुद्दे को हल किया।

आप इसे निम्नलिखित में पा सकते हैं: प्रोजेक्ट गुण -> (बाएं पैनल से) रन / डिबग / प्रोफाइल -> क्लिक (संपादित करें) दाएं पैनल बनाते हैं -> बाएं पैनल से टूल सेटिंग -> अनचेक (उपयोग प्रॉक्सी) विकल्प।


1

इसे उत्तर के रूप में जोड़ना क्योंकि यह बाद में किसी की मदद कर सकता है।

मुझे त्रुटि को हल करने के लिए आईपीवी 4 स्टैक का उपयोग करने के लिए जेवीएम को मजबूर करना पड़ा। मेरा एप्लिकेशन कंपनी नेटवर्क के भीतर काम करता था, लेकिन घर से कनेक्ट करते समय इसने समान अपवाद दिया। कोई प्रॉक्सी शामिल नहीं है। Jvm तर्क जोड़ा -Djava.net.preferIPv4Stack=trueऔर सभी httpsअनुरोध सामान्य रूप से व्यवहार कर रहे थे।


1

यदि आप वसंत का उपयोग कर स्थानीय चला रहे हैं, तो मैं उपयोग करने का सुझाव दूंगा:

@Bean
public AmazonDynamoDB amazonDynamoDB() throws IOException {
    return AmazonDynamoDBClientBuilder.standard()
            .withCredentials(
                    new AWSStaticCredentialsProvider(
                            new BasicAWSCredentials("fake", "credencial")
                    )
            )
            .withClientConfiguration(new ClientConfigurationFactory().getConfig().withProtocol(Protocol.HTTP))
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("localhost:8443", "central"))
            .build();
}

यह यूनिट टेस्ट का उपयोग करके मेरे लिए काम करता है।

आशा है कि यह मदद करेगा!


0

इसने मेरे लिए काम किया है, मैंने नीचे के रूप में अपने Google खाते की सेटिंग बदल दी है:

        System.out.println("Start");
        final String username = "myemail@gmail.com";
        final String password = "************";

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "465");
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

         Session session = Session.getInstance(props,
                  new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                  });


        try {
            Transport transport=session.getTransport();
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("myemail@gmail.com"));//formBean.getString("fromEmail")
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("myemail@gmail.com"));
            message.setSubject("subject");//formBean.getString(
            message.setText("mailBody");
            transport.connect();
            transport.send(message, InternetAddress.parse("myemail@gmail.com"));//(message);

            System.out.println("Done");

        } catch (MessagingException e) {
            System.out.println("e="+e);
            e.printStackTrace();
            throw new RuntimeException(e);

        }

हालांकि मैंने उसी पोस्ट के लिंक में प्रोग्राम चलाते समय एसएसएल और टीएसएल को सक्षम किया है । मैं बहुत समय बिताता हूं लेकिन मैंने इस लिंक को महसूस किया है और पाया है। और google में 2 स्टेप्स और सेटिंग कंट्रोल किया। :

  • 2-चरणीय सत्यापन (पासवर्ड और OTP) अक्षम करें

  • कम सुरक्षित ऐप एक्सेस करने की अनुमति देना ( कम सिक्योर ऐप्स की अनुमति दें: ON )

अब मैं उपरोक्त प्रोग्राम का उपयोग करके मेल भेजने में सक्षम हूं।


3
सवाल HTTPS के बारे में है।
लोर्ने

0

जैसा कि EJP ने कहा, यह एक गैर-प्रोटोकॉल प्रोटोकॉल के लिए कॉल के कारण दिखाया गया संदेश है। यदि आप सुनिश्चित हैं कि यह HTTPS है, तो अपनी बाईपास प्रॉक्सी सेटिंग्स की जाँच करें, और मामले में अपने webservice होस्ट यूआरएल को बाईपास प्रॉक्सी सूची में जोड़ें।


0

यदि कनेक्शन FTPS परीक्षण है:

FTPSClient ftpClient = नया FTPSClient (प्रोटोकॉल, असत्य);

प्रोटोकॉल = TLS, SSL और गलत = ismplicit।


0

जीमेल का उपयोग करते समय मैं इस अपवाद का सामना कर रहा था।

जीमेल का उपयोग करने के लिए मुझे "कम सुरक्षित ऐप्स की अनुमति दें" चालू करना पड़ा ।

जीमेल अकाउंट लॉगइन करने के बाद यह जीमेल सेटिंग https://www.google.com/settings/security/lesssecureapps पर पाई जा सकती है ।


0

यहाँ एक बहुत महत्वपूर्ण जवाब:

आप बस अपना API URL स्ट्रिंग (अपनी विधि में) को https से http में बदलते हैं .. यह भी कारण हो सकता है:

client.resource("http://192.168.0.100:8023/jaxrs/tester/tester");

के बजाय

client.resource("https://192.168.0.100:8023/jaxrs/tester/tester");

-1

मुझे एक ही मुद्दा मिला और यह सिस्टम प्रॉपर्टीज में "प्रॉक्सीयूजर" और "प्रॉक्सीपासवर्ड" सेट करके हल हो गया।

System.setProperty("http.proxyUser", PROXY_USER);
System.setProperty("http.proxyPassword", PROXY_PASSWORD);

"प्रॉक्सीहास्ट" और "प्रॉक्सीपोर्ट" के साथ

System.setProperty("http.proxyHost", PROXY_ADDRESS);
System.setProperty("http.proxyPort", PROXY_PORT);

आशा है कि यह काम करेगा।


यह काम करेगा यदि आप Apache HTTP क्लाइंट का उपयोग कर रहे हैं और आपको एक प्राधिकरण अपवाद मिला है। यह ओपी द्वारा बताई गई समस्या को हल करने के लिए काम नहीं करेगा ।
लोर्ने

-1

मैंने पोर्ट 25 और फॉलो प्रॉप का उपयोग करके अपनी समस्या हल की

mailSender.javaMailProperties.putAll([
                "mail.smtp.auth": "true",
                "mail.smtp.starttls.enable": "false",
                "mail.smtp.ssl.enable": "false",
                "mail.smtp.socketFactory.fallback": "true",
        ]);

-1

मामले में आप चल रहे हैं

  • सिस्को AnyConnect सुरक्षित गतिशीलता एजेंट
  • सिस्को AnyConnect वेब सुरक्षा एजेंट

सेवा को रोकने का प्रयास करें।

निश्चित नहीं कि मुझे इस जवाब के लिए डाउन वोट क्यों मिला। हमारे कॉर्पोरेट नेटवर्क में यह समस्या का समाधान है।


-1

मुझे जीमेल smtp द्वारा ई-मेल भेजने के लिए ऊंट-मेल घटक का उपयोग करने में समान त्रुटि मिली है।

समाधान TLS पोर्ट (587) से SSL पोर्ट (465) में नीचे के रूप में बदल रहा था:

<route id="sendMail">
  <from uri="jason:toEmail"/>
  <convertBodyTo type="java.lang.String"/>
  <setHeader headerName="Subject"><constant>Something</constant></setHeader>
  <to uri="smtps://smtp.gmail.com:465?username=myemail@gmail.com&amp;password=mypw&amp;to=someemail@gmail.com&amp;debugMode=true&amp;mail.smtp.starttls.enable=true"/>
</route>

नहीं, समाधान एक सादे बंदरगाह में बदल रहा था ।
लोर्ने

-2

यदि आप जावा प्रोसेस को जावा 6 या उससे पहले की कमांड लाइन से चला रहे हैं, तो इस स्विच को जोड़ने से मेरे लिए उपरोक्त समस्या हल हो गई है:

-Dhttps.protocols = "TLSv1"


-3

हो सकता है कि आपकी डिफ़ॉल्ट cerficate समाप्त हो गई हो। व्यवस्थापक कंसोल के माध्यम से इसे नवीनीकृत करने के लिए "सुरक्षा> एसएसएल प्रमाणपत्र और कुंजी प्रबंधन> कुंजी स्टोर और प्रमाण पत्र> नोडोडिफॉल्टकेयस्टोर> व्यक्तिगत प्रमाण पत्र" "डिफ़ॉल्ट" उपनाम का चयन करें और डब्ल्यूएएस को पुनरारंभ करने के बाद "नवीनीकरण" पर क्लिक करें।


1
एक समय सीमा समाप्त प्रमाणपत्र rdies इस अपवाद का कारण नहीं है।
लोर्ने

-3

एक अन्य कारण शायद "एक्सेस अस्वीकृत" है, हो सकता है कि आप यूआरआई तक नहीं पहुंच सकते और आंतरिक नेटवर्क एक्सेस के लिए अवरुद्ध प्रतिक्रिया पृष्ठ प्राप्त किया। यदि आप सुनिश्चित नहीं हैं कि आपके आवेदन क्षेत्र को फ़ायरवॉल नियम की आवश्यकता है, तो आप टर्मिनल, कमांड लाइन से कनेक्ट करने का प्रयास करें। जीएनयू / लिनक्स या यूनिक्स के लिए, आप इस आदेश की तरह चल सकते हैं और देखें कि परिणाम अवरुद्ध नियम या वास्तव में दूरस्थ पते से आ रहा है:echo | nc -v yazilimcity.net 443


यदि आपको किसी भी तरह का पेज मिला है तो एसएसएल हिस्सा पूरी तरह से काम कर रहा है और आपको ओपी द्वारा उद्धृत अपवाद नहीं मिलेगा।
लोर्ने

मैं एसएसएल भाग को किसी भी प्रकार का पृष्ठ नहीं प्राप्त कर रहा हूं, मुझे आंतरिक नेटवर्क HTTP प्रतिक्रिया मिली है जो विशेष तैयार पृष्ठ है। इस परिदृश्य के लिए मैं HTTPS अनुरोध के माध्यम से HTTP पृष्ठ पर पहुंच रहा हूं, इसलिए मुझे यह अपवाद मिला। नेटवर्क नियम में बदलाव के बाद, यह अपवाद भी स्वयं हल हो गया।
२१:०२ पर ऑगज़ानकिनिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.