Java 无法识别的SSL消息,纯文本连接?例外情况
我有一个java兼容的包,可以在网上与https服务器对话。运行编译会出现以下异常: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
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&password=mypw&to=someemail@gmail.com&debugMode=true&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