Eclipse调用SOAP WebService出现SSLException异常问题咨询
异常根因
你遇到的javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?报错,核心是Java的HttpsURLConnection组件尝试和目标端口建立SSL握手时,收到了明文HTTP响应,而非预期的SSL协议报文。SOAP UI可正常访问的原因是该工具会自动识别服务实际支持的协议类型,不会强制执行HTTPS握手逻辑。
排查步骤
- 核对
apiURL配置:确认代码中使用的接口地址前缀是http://还是https://,如果目标SOAP服务实际仅开放HTTP协议接口,强行使用HttpsURLConnection发起请求就会触发该错误。 - 核对端口配置:HTTPS默认端口为443,HTTP默认端口为80,如果目标服务的HTTPS端口为自定义端口,确认你填写的端口是服务实际开放HTTPS服务的端口,而非HTTP服务端口。
- 验证JVM代理配置:Java程序运行时读取的是JVM级别的代理参数,和Eclipse全局代理配置相互独立。可在请求代码前增加如下输出,确认是否存在隐性代理配置将HTTPS请求转发到了HTTP代理端口:
System.out.println("HTTPS代理地址:" + System.getProperty("https.proxyHost")); System.out.println("HTTPS代理端口:" + System.getProperty("https.proxyPort"));
- 测试端口响应:使用telnet、nc等工具直接连接目标地址+端口,输入任意字符后查看返回内容,如果返回明文HTTP响应头,说明当前请求的端口不支持HTTPS协议。
修复方案
- 若确认服务走HTTP协议:将
HttpsURLConnection替换为普通HttpURLConnection即可,修改后的代码如下:
URL u = new URL(apiURL); HttpURLConnection uc = (HttpURLConnection) u.openConnection(); connection = uc; connection.setDoOutput(true); connection.setDoInput(true); connection.setRequestMethod("POST"); connection.setRequestProperty("Content-Type", "text/xml; charset=UTF-8"); OutputStream out = connection.getOutputStream(); Writer wout = new OutputStreamWriter(out); wout.write(request); wout.flush(); wout.close(); out.close();
- 若确认服务必须走HTTPS协议:替换为正确的HTTPS接口地址和端口即可。
- 若为JVM代理配置错误:可在代码初始化阶段修正或禁用HTTPS代理:
// 禁用HTTPS代理 System.setProperty("https.proxyHost", ""); System.setProperty("https.proxyPort", "");
内容的提问来源于stack exchange,提问作者Chandragiri Giribabu
相关产品推荐
相关产品推荐

