无法识别的 SSL 消息、明文连接?异常

问题描述 投票:0回答:13

我有一个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 服务器吗?

java https
13个回答
316
投票

我认为这是由于连接 与客户端机器建立的是 不安全。

这是因为您正在与 HTTP 服务器通信,而不是 HTTPS 服务器。可能您没有使用正确的 HTTPS 端口号。


22
投票
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

12
投票

在通过代理执行 POST 请求之前,当我忘记登录公司防火墙时,我收到了相同的错误消息。


5
投票

我遇到了同样的错误。这是因为我正在使用 http 访问 https 端口。当我将 http 更改为 https 时,问题解决了。


2
投票

将此添加为答案,因为它可能会对以后的某人有所帮助。

我不得不强制 jvm 使用 IPv4 堆栈来解决该错误。我的应用程序曾经在公司网络内工作,但从家里连接时却出现了同样的异常。不涉及代理。添加了 jvm 参数

-Djava.net.preferIPv4Stack=true
和所有
https
请求都表现正常。


1
投票

如果您使用 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();
}

使用单元测试对我有用。

希望有帮助!


0
投票

我在 Jdevelopr 11.1.1.7 IDE 中构建的 Java 应用程序中遇到了同样的问题。我通过取消选中代理表单项目属性的使用解决了该问题。

您可以在以下位置找到它: 项目属性 -> (从左侧面板)运行/调试/配置文件 -> 在右侧面板中单击(编辑) -> 从左侧面板中选择工具设置 -> 取消选中(使用代理)选项。


0
投票

我使用端口 25 和 Follow prop 解决了我的问题

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

0
投票

如果您使用 Jetty 版本 9 或更早版本,您需要将其添加到 jetty 通过

RUN java -jar ${JETTY_HOME}/start.jar --add-to-startd=https

并且根据这个 Jetty:如何在 Jetty 客户端使用 SSL

从 Jetty 版本 10 开始,它应该开箱即用


0
投票

我在 Tomcat 中测试 Spring Boot API(在本地设置中)时偶然发现了这个问题。

在应用程序的

config.properties
文件(这是我们用来配置一些外部 URL 和端点的文件)中,其中一些是用
https
而不是
http
定义的(对于开发环境,我们正在模拟这些第三方 API通过 Postman / SOAPUI)。

通过将这些端点上的

https
更改为
http
并重新启动 Tomcat 解决了该问题。


-1
投票

如果连接是 FTPS 测试:

FTPSClient ftpClient = new FTPSClient(协议, false);

协议 = TLS,SSL 和 false = 是隐式的。


-1
投票

我在使用 Gmail 时遇到了这个异常。

为了使用 Gmail,我必须打开“允许安全性较低的应用程序”

登录 Gmail 帐户后,可以在 https://www.google.com/settings/security/lesssecureapps 找到此 Gmail 设置。


-1
投票

我使用camel-mail组件通过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>
© www.soinside.com 2019 - 2024. All rights reserved.