获取javax.net.ssl.SSLProtocolException:文件结束

时间:2015-05-13 17:07:57

标签: java http ssl

我将IHS服务器从7.0.0.33升级到7.0.0.37 ..

在最新的IHS服务器中,SSLv3被完全禁用..

我的以下代码

HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
urlConn.setUseCaches(false);
urlConn.setRequestMethod("POST");
urlConn.setDoOutput(true);
DataOutputStream os = new DataOutputStream(urlConn.getOutputStream());  
os.writeBytes( obj.toString());
os.flush();
os.close();

我找到了

 DataOutputStream os = new DataOutputStream(urlConn.getOutputStream()); 

此处代码正在破坏并显示不支持"协议" 之后它抛出以下错误

[5/13/15 14:00:47:730 GMT] 0000001c SystemErr     R javax.net.ssl.SSLProtocolException: end of file
    at com.ibm.jsse.bv.a(Unknown Source)
    at com.ibm.jsse.bv.startHandshake(Unknown Source)
    at com.ibm.net.ssl.www2.protocol.https.b.o(b.java:136)
    at com.ibm.net.ssl.www2.protocol.https.i.connect(i.java:28)
    at com.ibm.net.ssl.www2.protocol.http.bc.getOutputStream(bc.java:44)
    at com.ibm.net.ssl.www2.protocol.https.l.getOutputStream(l.java:23)
    at com.corio.tsr.webservices.SRAutomationWebServiceClient.getJsonObject(SRAutomationWebServiceClient.java:166)
    at com.corio.tsr.jms.receiver.SRAutomationMessageBean.onMessage(Unknown Source)
    at com.ibm.ejs.container.MessageEndpointHandler.invokeMdbMethod(MessageEndpointHandler.java:1013)
    at com.ibm.ejs.container.MessageEndpointHandler.invoke(MessageEndpointHandler.java:746)
    at $Proxy2.onMessage(Unknown Source)
    at com.ibm.ws.sib.api.jmsra.impl.JmsJcaEndpointInvokerImpl.invokeEndpoint(JmsJcaEndpointInvokerImpl.java:201)
    at com.ibm.ws.sib.ra.inbound.impl.SibRaDispatcher.dispatch(SibRaDispatcher.java:627)
    at com.ibm.ws.sib.ra.inbound.impl.SibRaSingleProcessListener$SibRaWork.run(SibRaSingleProcessListener.java:463)
    at com.ibm.ejs.j2c.work.WorkProxy.run(WorkProxy.java:394)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java(Compiled Code))

任何人都可以建议我该怎么做或任何关于如何摆脱这个错误的线索

1 个答案:

答案 0 :(得分:1)

需要SSL握手。没有它将无法正常工作。 首先尝试设置协议支持属性

urlConn.setRequestProperty("https.protocols", "TLSv1");

如果您收到“javax.net.ssl.SSLHandshakeException:远程主机已关闭连接”,请按照以下步骤操作。

如果您使用的是IE,请按以下步骤操作:
1)在浏览器上使用https协议访问URL(例如:服务WSDL位置(例如https://foo.com/bar?wsdl) 2)Internet Explorer将提示安全警报。选择“查看证书”按钮 3)导航到“详细信息”选项卡。选择“复制到文件...”按钮 4)将显示证书导出向导。选择“下一步”按钮 5)默认选择“DER编码二进制X.509(.CER)”选项。选择“下一步” 6)将文件放在最适合您的位置。 S7)选择“下一步”。将显示“完成证书导出向导”。选择“完成”。这将是一个弹出窗口“出口成功”。

以下是将证书签名导入JRE密钥库的步骤:
1)将证书文件移动到%JAVA_HOME%/ jre / lib / security文件夹 2)在ant中,您可以使用命令ant -diagnostics通过java.home系统属性查找java安装文件夹 3)制作名为“cacerts”(密钥库)的文件的备份副本,该文件位于%JAVA_HOME%/ jre / lib / security下。
4)打开命令提示符并将目录(cd)更改为%JAVA_HOME%/ jre / lib / security。
5)运行以下命令:

keytool -importcert -trustcacerts -keystore cacerts -storepass changeit -alias "<aliasname>" –file <cert file>

7)输入“是”。 (出现不受信任证书的提示) 8)运行以下命令验证: 9)keytool -keystore cacerts -storepass changeit -list -alias“”