javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
时间: 2024-01-11 13:08:20 浏览: 53
这个错误通常出现在您尝试在使用 SSL/TLS 加密的端口上使用非加密的连接。这种情况可能会发生在以下情况下:
1. 您的客户端尝试在 SSL/TLS 端口上使用非 SSL/TLS 连接。
2. 服务器端口配置错误,没有启用 SSL/TLS 加密。
3. 客户端与服务器之间有代理或防火墙,导致 SSL/TLS 连接无法建立。
要解决这个错误,您可以尝试以下几个步骤:
1. 确认您的客户端代码中是否正确配置了 SSL/TLS 连接。
2. 检查您的服务器是否正确配置了 SSL/TLS 加密,确保您使用的端口支持 SSL/TLS 连接。
3. 检查您的客户端与服务器之间是否有代理或防火墙,如果有,请确认代理或防火墙是否正确配置以支持 SSL/TLS 连接。
相关问题
连接ES时 javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
在连接ES时,如果出现"javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection"错误,可能是由于尝试在使用SSL/TLS协议的端口上建立非加密的连接导致的。为了解决这个问题,你可以按照以下步骤进行操作:
1. 确保你正在使用正确的端口连接ES。默认情况下,ES使用的是9300端口进行节点间通信,而使用9200端口进行REST API访问。如果你正在使用REST API访问ES,请确保你正在使用9200端口。
2. 确保你的连接代码中使用了正确的SSL/TLS配置。如果你的ES集群启用了SSL/TLS加密,你需要在连接代码中配置正确的SSL/TLS证书和密钥。以下是一个示例代码片段,展示了如何使用Java的RestHighLevelClient连接ES并配置SSL/TLS:
```java
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.security.user.User;
import org.elasticsearch.client.security.user.UserOptions;
import org.elasticsearch.client.security.user.UserString;
import org.elasticsearch.common.settings.Settings;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
public class ESConnectionExample {
public static void main(String[] args) throws Exception {
// 配置SSL/TLS信任所有证书
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}}, null);
// 配置ES连接
RestClientBuilder builder = RestClient.builder(new HttpHost("localhost", 9200, "https"))
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setSSLContext(sslContext));
RestHighLevelClient client = new RestHighLevelClient(builder);
// 使用client进行操作...
// 关闭连接
client.close();
}
}
```
请注意,上述代码中的SSLContext配置了一个信任所有证书的TrustManager,这只是为了演示目的。在实际生产环境中,你应该配置正确的证书和密钥以确保安全性。
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection
这个错误通常是由于在一个使用SSL加密的端口上尝试发送非加密的数据导致的。你可以尝试检查以下几个方面:
1. 确认你的代码中使用的是正确的端口号并且支持SSL/TLS协议。
2. 确认你的代码中使用的是正确的SSL/TLS上下文。
3. 确认你的代码中发送的数据是经过加密的。
如果以上步骤都检查过了仍然无法解决问题,你还可以尝试使用Wireshark等工具进行抓包分析,检查是否存在明文传输的数据。