我有一个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服务器?
答案 0 :(得分:191)
我认为这是由于连接造成的 与客户机建立的是 不安全。
这是因为您正在与HTTP服务器通信,而不是HTTPS服务器。可能您没有使用正确的HTTPS端口号。
答案 1 :(得分:16)
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
答案 2 :(得分:8)
在通过代理执行POST请求之前忘记登录公司防火墙时,我收到了相同的错误消息。
答案 3 :(得分:3)
我得到了同样的错误。这是因为我使用http访问https端口。当我将http更改为https时,问题就解决了。
答案 4 :(得分:1)
添加此作为答案,因为它可能会对以后有所帮助。
我不得不强制jvm使用IPv4堆栈来解决错误。我的应用程序曾经在公司网络中工作,但在从家里连接时,它给出了相同的例外。没有代理人参与。添加了jvm参数
-Djava.net.preferIPv4Stack=true
并且所有https
次请求都表现正常。
答案 5 :(得分:1)
我在Jdevelopr 11.1.1.7 IDE中构建的Java应用程序中面临同样的问题。我通过取消选中使用代理表单项目属性解决了这个问题。
您可以在以下内容中找到它: 项目属性 - > (来自左侧panle)运行/调试/配置文件 - >单击(编辑)右侧面板 - >左侧面板中的工具设置 - >取消选中(使用代理)选项。
答案 6 :(得分:0)
正如EJP所说,由于呼叫非https协议,它显示的是一条消息。 如果您确定它是HTTPS,请检查您的旁路代理设置,以防万一将您的webservice主机URL添加到旁路代理列表
答案 7 :(得分:0)
如果连接是FTPS测试:
FTPSClient ftpClient = new FTPSClient(protocol,false);
protocol = TLS,SSL 和false = isImplicit。
答案 8 :(得分:0)
使用Gmail时我遇到了这个例外。
要使用Gmail,我必须开启"允许使用安全性较低的应用" 。
此Gmail设置可在登录Gmail帐户后在https://www.google.com/settings/security/lesssecureapps找到。
答案 9 :(得分:0)
我使用骆驼邮件组件通过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>
答案 10 :(得分:0)
如果您使用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();
}
使用单元测试对我有用。
希望有帮助!
答案 11 :(得分:0)
非常重要的答案:
您只需将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");
答案 12 :(得分:-1)
它现在对我有用,我已经更改了我的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);
}
虽然我在同一帖子的link中运行程序时启用了SSL和TSL。我花了很多时间,但我意识到并发现了这个链接。 并完成了以下两个步骤并在谷歌设置控制。 :
停用两步验证(密码和OTP)
允许访问不太安全的应用(允许安全性较低的应用: ON。强>)
现在我可以使用上述程序发送邮件了。
答案 13 :(得分:-1)
如果您正在运行
尝试停止服务。
不确定为什么我对此答案投了一票。在我们的公司网络中,这是解决问题的方法。
答案 14 :(得分:-1)
我遇到了同样的问题,通过设置&#34; proxyUser&#34;解决了这个问题。和&#34; proxyPassword&#34;在系统属性中。
System.setProperty("http.proxyUser", PROXY_USER);
System.setProperty("http.proxyPassword", PROXY_PASSWORD);
以及#34; proxyHost&#34;和&#34; proxyPort&#34;
System.setProperty("http.proxyHost", PROXY_ADDRESS);
System.setProperty("http.proxyPort", PROXY_PORT);
希望它能奏效。
答案 15 :(得分:-1)
我使用端口25和关注prop
解决了我的问题mailSender.javaMailProperties.putAll([
"mail.smtp.auth": "true",
"mail.smtp.starttls.enable": "false",
"mail.smtp.ssl.enable": "false",
"mail.smtp.socketFactory.fallback": "true",
]);
答案 16 :(得分:-2)
如果您在Java 6或更早版本的命令行中运行Java进程,则添加此开关可以解决上述问题:
-Dhttps.protocols = “使用TLSv1”
答案 17 :(得分:-3)
也许您的默认cerficate已过期。通过管理控制台更新它“安全&gt; SSL证书和密钥管理&gt;密钥存储和证书&gt; NodeDefaultKeyStore&gt;个人证书”选择“默认”别名,然后点击“续订”,然后重新启动WAS。
答案 18 :(得分:-3)
另一个原因可能是“访问被拒绝”,也许您无法访问URI并收到阻止响应页面以进行内部网络访问。如果您不确定您的应用程序区域是否需要防火墙规则,则尝试从终端,命令行进行连接。
对于GNU / Linux或Unix,您可以尝试像此命令一样运行,并看到结果来自阻止规则或真正的远程地址:echo | nc -v yazilimcity.net 443