IT이야기

인식할 수 없는 SSL 메시지, 일반 텍스트 연결?예외.

cyworld 2022. 7. 1. 21:51
반응형

인식할 수 없는 SSL 메시지, 일반 텍스트 연결?예외.

넷상의 https 서버와 통신하기 위한 Java 준거 패키지가 있습니다.컴파일을 실행하면 다음과 같은 예외가 발생합니다.

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 서버에 접속하기 위해 로컬머신 또는 포트를 설정하는 방법이 있습니까?

클라이언트 머신과의 접속이 안전하지 않기 때문이라고 생각합니다.

이는 HTTPS 서버가 아닌 HTTP 서버와 통신하고 있기 때문입니다.HTTPS에 올바른 포트 번호를 사용하지 않았을 수 있습니다.

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

프록시를 통해 POST 요청을 실행하기 전에 회사 방화벽에 로그인하는 것을 잊어버렸을 때 동일한 오류 메시지가 나타납니다.

저도 같은 오류가 발생했어요.http를 사용하여 https 포트에 접속하고 있었기 때문입니다.http를 https로 바꾸자 문제가 해결되었습니다.

나중에 누군가에게 도움이 될 수 있기 때문에 이것을 답으로 추가하는 것이 좋습니다.

오류를 해결하기 위해 jvm이 IPv4 스택을 사용하도록 강제해야 했습니다.제 어플리케이션은 회사 네트워크 내에서 동작하고 있었습니다만, 자택에서 접속하는 경우에도 같은 예외가 있었습니다.프록시는 관여하지 않습니다.jvm 인수를 추가했습니다.-Djava.net.preferIPv4Stack=true그리고 그 모든 것https요청은 정상적으로 동작하고 있었습니다.

Jdeveloper 11.1.7 IDE에 내장된 Java 어플리케이션에서도 같은 문제가 발생합니다.Project properties의 프록시 폼 사용을 선택 해제하여 문제를 해결했습니다.

다음에서 찾을 수 있습니다.[ Project Properties ](왼쪽 패널부터) [Run/Debug/Profile](실행/디버깅/프로파일부터) -> 오른쪽 패널에서 [Tool Setting](편집)을 클릭합니다.왼쪽 패널에서 [Tool Setting](도구 설정) 옵션을 선택 해제합니다.

포트 25와 다음 소품을 사용하여 문제를 해결했습니다.

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

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

유닛 테스트로 할 수 있습니다.

도움이 됐으면 좋겠네요!

이제 작동하게 되었습니다. 구글 계정 설정을 다음과 같이 변경했습니다.

        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);

        }

같은 게시물의 이 링크에서 프로그램을 실행하면서 SSL과 TSL을 활성화했습니다.나는 많은 시간을 보냈지만 이 링크를 깨닫고 발견했다.그리고 구글에서 2단계와 세팅 컨트롤을 수행했습니다.:

  • 2단계 검증(패스워드OTP)을 디세블로 합니다.

  • 보안 수준이 낮은 앱에 액세스할 수 있도록 설정(보안 수준이 낮은 허용: 켜짐)

이제 위의 프로그램으로 메일을 보낼 수 있게 되었습니다.

EJP가 말했듯이 이는 비https 프로토콜 호출 때문에 나타나는 메시지입니다.HTTPS가 확실한 경우 바이패스 프록시 설정을 확인하고 바이패스 프록시 목록에 웹 서비스 호스트 URL을 추가하는 경우

연결이 FTPS 테스트인 경우:

FTPClient ftpClient = 새 FTPClient(프로토콜, false);

protocol = TLS,SSL 및 false = isImplicit.

같은 문제가 발생했는데 시스템 속성에서 "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);

효과가 있기를 바랍니다.

Gmail을 사용할 때 이 예외에 직면했습니다.

Gmail을 사용하기 위해서는 "안전성이 낮은 허용"을 켜야 했습니다.

이 Gmail 설정은 Gmail 계정에 로그인한 후 https://www.google.com/settings/security/lesssecureapps에서 확인할 수 있습니다.

실행 중인 경우

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

서비스를 정지해 보겠습니다.

왜 내가 이 대답에 찬성표를 얻었는지 모르겠다.사내 네트워크에서는 이것이 문제의 해결책입니다.

gmail smtp로 이메일을 보낼 때 camel-mail 컴포넌트를 사용하는 것과 유사한 오류가 발생했습니다.

솔루션은 다음과 같이 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>

Java 6 이전 명령줄에서 Java 프로세스를 실행하는 경우 이 스위치를 추가하면 위의 문제가 해결됩니다.

-Dhttps.protocols="TLSv1"

매우 중요한 답변은 다음과 같습니다.

API URL String(메서드 내)을 https에서http로 변경하기만 하면 됩니다.원인일 수도 있습니다.

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

대신

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

기본 cerficate가 만료되었을 수 있습니다.관리 콘솔에서 갱신하려면 [Security]> [ SSL certificate and key management ]> [ Key stores and certificates ]> [ Node Default Key Store ]> [ Personal certificates ]를 선택하고 WAS를 재시작한 후 [rew]을 클릭합니다.

그러하다, '그러다'는요.URI 에 액세스 할 수 없고, 내부 네트워크액세스의 블로킹 응답 페이지를 수신했을 가능성이 있습니다.애플리케이션 존에 방화벽 규칙이 필요한지 확실하지 않은 경우 terminal, 명령줄에서 연결을 시도합니다.GNUUnix 의 는, 해, 룰 할 수 .GNU/Linux "Unix " " " " " 음음음 음음 。echo | nc -v yazilimcity.net 443

언급URL : https://stackoverflow.com/questions/6532273/unrecognized-ssl-message-plaintext-connection-exception

반응형