Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法识别的SSL消息,纯文本连接?例外情况_Java_Https - Fatal编程技术网

Java 无法识别的SSL消息,纯文本连接?例外情况

Java 无法识别的SSL消息,纯文本连接?例外情况,java,https,Java,Https,我有一个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.rea

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

我认为这是由于联系 与客户端计算机建立的 不安全

这是因为您正在与HTTP服务器而不是HTTPS服务器交谈。可能您没有为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时,问题就解决了

您的默认证书可能已过期。要通过管理控制台续订,请转到“安全性>SSL证书和密钥管理>密钥存储和证书>NodeDefaultKeyStore>个人证书”,选择“默认”别名,然后在重新启动WAS后单击“续订”。

我在Jdevelopr 11.1.1.7 IDE中内置的Java应用程序中面临同样的问题。我通过取消选中代理表单项目属性的使用来解决这个问题

System.setProperty("http.proxyUser", PROXY_USER);
System.setProperty("http.proxyPassword", PROXY_PASSWORD);
您可以在以下内容中找到它:
项目属性->(从左窗格)运行/Debug/Profile->从右面板单击(编辑)->从左面板单击工具设置->取消选中(使用代理)选项。

如果您在Java 6或更早版本上从命令行运行Java进程,添加此开关为我解决了上述问题:


-Dhttps.protocols=“TLSv1”

正如EJP所说,这是一条由于调用非https协议而显示的消息。
如果您确定它是HTTPS,请检查您的旁路代理设置,如果将您的webservice主机url添加到旁路代理列表中,现在对我有效,我已更改我的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);

        }
虽然我在同一篇文章中运行程序时启用了SSL和TSL。我花了很多时间,但比我意识到并找到了这个链接。 并在google中完成以下两个步骤和设置控件:

  • 禁用两步验证(密码和OTP)

  • 启用允许访问不太安全的应用程序(允许不太安全的应用程序: 打开。


现在我可以使用上面的程序发送邮件了。

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

我不得不强制jvm使用IPv4堆栈来解决错误。我的应用程序过去在公司网络中工作,但在从家连接时,它给出了相同的例外。没有代理参与。添加了jvm参数
-Djava.net.preferIPv4Stack=true
和所有
https
请求的行为正常。

如果连接是FTPS测试:

FTPSClient ftpClient=新的FTPSClient(协议,错误)

协议=TLS,SSL false=isImplicit。

另一个原因可能是“访问被拒绝”,可能是您无法访问URI和接收到的用于内部网络访问的阻塞响应页面。如果您不确定您的应用程序区域是否需要防火墙规则,请尝试从终端、命令行进行连接。
对于GNU/Linux或Unix,您可以尝试像这样运行命令,并查看阻塞规则或真正的远程地址的结果:
echo | nc-v yazilimcity.net 443

,以防您正在运行

  • Cisco AnyConnect安全移动代理
  • Cisco AnyConnect Web安全代理
尝试停止服务


不知道为什么我对这个答案投了反对票。在我们的公司网络中,这就是问题的解决方案。

我也遇到了同样的问题,通过在系统属性中设置“proxyUser”和“proxyPassword”得到了解决

System.setProperty("http.proxyUser", PROXY_USER);
System.setProperty("http.proxyPassword", PROXY_PASSWORD);
以及“proxyHost”和“proxyPort”


希望它能起作用。

我在使用Gmail时遇到了这个例外

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


登录Gmail帐户后,可以在找到此Gmail设置。

我使用端口25和下面的道具解决了问题

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

我在使用驼峰邮件组件通过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:465?username=myemail@gmail.com&amp;password=mypw&amp;to=someemail@gmail.com&amp;debugMode=true&amp;mail.smtp.starttls.enable=true"/>
</route>

某物

如果您使用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();
}
使用单元测试对我来说很有效


希望对你有帮助

这里有一个非常重要的答案:

您只需将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");

他说的是HTTPS,不是SMTP-1就我而言,这很有效,谢谢!javax.mail.MessaginException:无法连接到SMTP主机:mail.livemusicgo.com,端口:25;嵌套异常是:javax.net.ssl.SSLException:无法识别的ssl消息,纯文本连接?@surfealokesea问题是关于HTTP和HTTPS的,关于SMTP的答案或个人体验是不相关的。是的,但这不仅仅是对他而言,也是对其他用户而言,具有相同的“无法识别的ssl消息”+1对你来说,ThobithI也有同样的错误,当我开始使用http而不是https时,我解决了这个问题。但当我用https在浏览器中放置链接时,它就工作了!我需要执行一个安全的查询。你知道我该如何解决这个问题吗?@rsy当你放置链接时。。。如果使用https,浏览器将为您更改为443端口。你自己也可以这样做。事实上,
HttpURLConnection
将自动为您执行此操作,如果您根本不指定端口。我假设您可以将服务器上的任何端口设置为HTTPS,它不必是特定的端口?@KarlSherwin它可以是您喜欢的任何端口,su