已解决SSLException: Unrecognized SSL message, plaintext connection异常的正确解决方法,亲测有效!!!
目录
问题分析
报错原因
解决思路
解决方法
确认服务器SSL配置
校验客户端连接信息
检查TLS/SSL版本兼容性
检查加密套件兼容性
确保正确的端口号
总结
博主v:XiaoMing_Java
问题分析
SSLException: Unrecognized SSL message, plaintext connection这个异常通常发生在客户端尝试通过SSL/TLS加密的通道发送数据时,但服务器端却以明文方式进行监听和接受数据。这就导致了服务器无法识别或理解客户端发送的经过SSL加密的消息。
报错原因
可能触发此异常的原因包括:
客户端配置为使用SSL/TLS,而服务器没有配置SSL/TLS。端口配置错误,比如客户端尝试连接到非SSL端口。服务器或客户端的SSL配置不匹配,例如TLS版本或者加密套件不一致。
解决思路
解决这个异常的基本思路是确认并确保服务器和客户端的SSL/TLS配置完全匹配,包括但不限于端口、协议版本、证书等。
解决方法
根据上述思路,下面是具体的解决步骤:
确认服务器SSL配置
检查服务器是否正确配置了SSL/TLS,并且正在其对应的端口上监听SSL连接。
# 以Apache服务器为例,检查ssl.conf配置并确认Listen指令是否正确
Listen 443
校验客户端连接信息
确保客户端连接URL是以https开头,且端口号与服务器SSL端口号相匹配。
// Java代码示例
String url = "https://yourserver.com:443/path"; // 确保端口是443或者其他SSL端口
检查TLS/SSL版本兼容性
检查服务器支持的TLS版本和客户端所用的TLS版本是否匹配。如果不匹配,需要相互调整以确保一致性。
// Java代码示例,设置支持的TLS版本
System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
检查加密套件兼容性
确认服务器和客户端都支持至少一个共同的加密套件。
// Java代码示例,可以通过SSLSocket获取支持的加密套件
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
try (SSLSocket socket = (SSLSocket) factory.createSocket()) {
String[] supportedCipherSuites = socket.getSupportedCipherSuites();
// 输出支持的加密套件列表,检查是否与服务器匹配
System.out.println(Arrays.toString(supportedCipherSuites));
}
确保正确的端口号
验证客户端是否使用正确的端口号连接到服务器的SSL/TLS端口。
String host = "yourserver.com";
int port = 443; // SSL端口通常为443
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
try (SSLSocket sslSocket = (SSLSocket) factory.createSocket(host, port)) {
// 在这里进行数据传输,如发送HTTP请求等
}
总结
遇到SSLException: Unrecognized SSL message, plaintext connection异常时,首要任务是核实客户端和服务器端的SSL/TLS配置是否一致,特别是端口、协议版本、加密套件的配置。常见的解决方法是检查并修正SSL/TLS端口配置,确保客户端与服务器端使用相同的通信协议和加密技术。务必注意,任何配置更改后都需要重启服务以使更改生效。通过上述步骤,该异常通常可以得到有效解决。
以上是此问题报错原因的解决方法,欢迎评论区留言讨论是否能解决,如果本文对你有帮助 欢迎 关注 、点赞 、收藏 、评论, 博主才有动力持续记录遇到的问题!!!
博主v:XiaoMing_Java
作者简介:嗨,大家好,我是 小 明
互联网大厂后端研发专家,2022博客之星TOP3 / 博客专家 / CSDN后端内容合伙人、InfoQ(极客时间)签约作者、阿里云签约博主、全网 10 万粉丝博主。
文末获取联系 精彩专栏推荐订阅收藏
专栏系列(点击解锁) 学习路线(点击解锁) 知识定位 Redis从入门到精通与实战 Redis从入门到精通与实战 围绕原理源码讲解Redis面试知识点与实战 MySQL从入门到精通 MySQL从入门到精通 全面讲解MySQL知识与企业级MySQL实战 计算机底层原理 深入理解计算机系统CSAPP 以深入理解计算机系统为基石,构件计算机体系和计算机思维 Linux内核源码解析 围绕Linux内核讲解计算机底层原理与并发 数据结构与企业题库精讲 数据结构与企业题库精讲 结合工作经验深入浅出,适合各层次,笔试面试算法题精讲 互联网架构分析与实战 企业系统架构分析实践与落地 行业最前沿视角,专注于技术架构升级路线、架构实践 互联网企业防资损实践 互联网金融公司的防资损方法论、代码与实践 Java全栈白宝书 精通Java8与函数式编程 本专栏以实战为基础,逐步深入Java8以及未来的编程模式 深入理解JVM 详细介绍内存区域、字节码、方法底层,类加载和GC等知识 深入理解高并发编程 深入Liunx内核、汇编、C++全方位理解并发编程 Spring源码分析 Spring核心七IOC/AOP等源码分析 MyBatis源码分析 MyBatis核心源码分析 Java核心技术 只讲Java核心技术
好文阅读
发表评论