Непризнанное сообщение SSL, соединение с открытым текстом? исключение

У меня есть пакет, совместимый с java, для общения с 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?

Ответ 1

Я думаю, что это связано с подключением установленный с клиентской машиной не защищен.

Это связано с тем, что вы разговариваете с HTTP-сервером, а не с сервером HTTPS. Возможно, вы не использовали правильный номер порта для HTTPS.

Ответ 2

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

Ответ 3

Я получил то же сообщение об ошибке, когда забыл войти в брандмауэр компании, прежде чем выполнять запрос POST через прокси.

Ответ 4

Я получил ту же ошибку. это потому, что я обращался к порту https, используя http. Проблема была решена, когда я изменил http на https.

Ответ 5

Я сталкиваюсь с той же проблемой с Java-приложением, встроенным в Jdevelopr 11.1.1.7 IDE. Я решил проблему, сняв флажок в использовании свойств проекта proxy.

Вы можете найти его в следующем: Свойства проекта → (из левой панели) Запуск/Отладка/Профиль → Щелкните (изменить) с правой панели → Настройка инструмента с левой панели → снимите флажок (Использовать прокси).

Ответ 6

Добавление этого в качестве ответа, поскольку это может помочь кому-то позже.

Мне пришлось заставить jvm использовать стек IPv4 для устранения ошибки. Мое приложение использовалось для работы в сети компании, но при подключении из дома оно дало то же исключение. Никакой прокси. Добавлен аргумент jvm   -Djava.net.preferIPv4Stack=true и все запросы https ведут себя нормально.

Ответ 7

Как сказал EJP, это сообщение показано из-за вызова протокола non-https. Если вы уверены, что это HTTPS, проверьте настройки прокси-сервера обхода и в случае, если ваш URL-адрес хоста webservice в списке прокси-сервера обхода

Ответ 8

если соединение - тест FTPS:

FTPSClient ftpClient = новый FTPSClient (протокол, ложь);

protocol = TLS, SSL и false = isImplicit.

Ответ 9

Я столкнулся с этим исключением при использовании Gmail.

Чтобы использовать Gmail, мне пришлось включить "Разрешить менее безопасные приложения".

Этот параметр Gmail можно найти по адресу https://www.google.com/settings/security/lesssecureapps после входа в учетную запись Gmail.

Ответ 10

У меня похожая ошибка при использовании компонента верблюжьей почты для отправки сообщений электронной почты через gmail 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:[email protected]&amp;password=mypw&amp;[email protected]&amp;debugMode=true&amp;mail.smtp.starttls.enable=true"/>
</route>

Ответ 11

Если вы работаете локально с помощью Spring, я бы предложил использовать:

@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();
}

Это работает для меня с помощью модульного теста.

Надеюсь, это поможет!

Ответ 12

Теперь он работал у меня, я изменил настройку своей учетной записи google, как показано ниже:

        System.out.println("Start");
        final String username = "[email protected]";
        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("[email protected]"));//formBean.getString("fromEmail")
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("[email protected]"));
            message.setSubject("subject");//formBean.getString(
            message.setText("mailBody");
            transport.connect();
            transport.send(message, InternetAddress.parse("[email protected]"));//(message);

            System.out.println("Done");

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

        }

Хотя я включил SSL и TSL во время запуска программы в этой ссылке того же сообщения. Я провожу много времени, но я понял и нашел эту ссылку. И сделали 2 следующих шага и установили контроль в google.:

  • Отключите двухэтапную аутентификацию (пароль и OTP)

  • Включение доступа к менее безопасному приложению ( Разрешить менее безопасные приложения: ON.)

Теперь я могу отправлять почту, используя указанную выше программу.

Ответ 13

Если вы работаете

  • Cisco AnyConnect Secure Mobility Agent
  • Cisco AnyConnect Web Security Agent

попробуйте остановить сервис (ы).

Не уверен, почему я получил отрицательный голос за этот ответ. В нашей корпоративной сети это является решением проблемы.

Ответ 14

Я получил ту же проблему, и она была решена путем установки "proxyUser" и "proxyPassword" в свойствах системы.

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

вместе с "proxyHost" и "proxyPort"

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

Надеюсь, это сработает.

Ответ 15

я решил свою проблему, используя порт 25 и следующий проп

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

Ответ 16

Если вы запускаете процесс Java из командной строки на Java 6 или ранее, добавление этого переключателя решило проблему выше для меня:

-Dhttps.protocols = "TLSv1"

Ответ 17

Возможно, срок действия вашего сертификата по умолчанию истек. обновить его через консоль администратора "Безопасность" SSL-сертификат и управление ключами > Хранилища ключей и сертификаты > NodeDefaultKeyStore > Личные сертификаты "выберите псевдоним по умолчанию и нажмите" обновить "после перезапуска WAS.

Ответ 18

Другая причина, пожалуй, "доступ запрещен", возможно, вы не можете получить доступ к URI и получить страницу ответа блокировки для внутреннего доступа к сети. Если вы не уверены, что в вашем приложении требуется правило брандмауэра, вы пытаетесь подключиться к терминалу, командной строке. Для GNU/Linux или Unix вы можете попробовать запустить эту команду и увидеть, что результат исходит из правила блокировки или действительно удаленного адреса: echo | nc -v yazilimcity.net 443