我在来自java客户端的Http Post请求上收到一个无效的参数错误
我正在从IBMi-series服务器上的POJOJava应用程序发出HTTP Post请求我在来自java客户端的Http Post请求上收到一个无效的参数错误,java,ssl,http-post,Java,Ssl,Http Post,我正在从IBMi-series服务器上的POJOJava应用程序发出HTTP Post请求 HttpResponse response = httpclient.execute(httppost); 大约3秒钟后,我将返回此错误 java.net.SocketException: A system call received a parameter that is not valid. (Read failed) at java.net.SocketInputStream.socke
HttpResponse response = httpclient.execute(httppost);
大约3秒钟后,我将返回此错误
java.net.SocketException: A system call received a parameter that is not
valid. (Read failed)
at java.net.SocketInputStream.socketRead(SocketInputStream.java:127)
at java.net.SocketInputStream.read(SocketInputStream.java:182)
at java.net.SocketInputStream.read(SocketInputStream.java:152)
at com.ibm.jsse2.b.a(b.java:192)
at com.ibm.jsse2.b.a(b.java:168)
at com.ibm.jsse2.at.a(at.java:358)
at com.ibm.jsse2.at.i(at.java:785)
at com.ibm.jsse2.at.a(at.java:68)
at com.ibm.jsse2.at.startHandshake(at.java:520)
at
org.apache.http.conn.ssl.SSLConnectionSocketFactory.createLayeredS
ocket(SSLConnectionSocketFactory.java:394)
at
org.apache.http.conn.ssl.SSLConnectionSocketFactory.connectSocket(
SSLConnectionSocketFactory.java:353)
at
org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.conn
ect(DefaultHttpClientConnectionOperator.java:134)
at
org.apache.http.impl.conn.PoolingHttpClientConnectionManager.conne
ct(PoolingHttpClientConnectionManager.java:353)
at
org.apache.http.impl.execchain.MainClientExec.establishRoute(MainC
lientExec.java:380)
at
org.apache.http.impl.execchain.MainClientExec.execute(MainClientEx
ec.java:236)
at
org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.j
我已经确定我们使用的是TLS1.2,java版本是1.8
客户端-代码段-
CloseableHttpClient httpclient =
HttpClientBuilder.create().setDefaultRequestConfig(config).build();
HttpPost httppost = new HttpPost("https://lb1.cardknox.com/gateway");
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
sslContext.init(null, null, null);
SSLContext.setDefault(sslContext);
HttpResponse response = httpclient.execute(httppost);
注:
当我在eclipse工作台上使用它时,它工作得很好——我只有在IBM服务器上运行它时才会出现问题
IBM服务器上的Java运行时详细信息
java版本“1.8.0”Java(TM)SE运行时环境(构建pap3280sr4fp10-20170727_01(SR4 FP10))
IBM J9虚拟机(构建2.8,JRE 1.8.0 OS/400 ppc-32 jvmap3280sr4fp10-20170727_01(启用JIT,启用AOT) J9VM-R28_20170722_0201_B357405
JIT-tr.r14.java_20170722_357405
GC-R28_20170722_0201_B357405
J9CL-20170722_357405)
JCL-20170726_01基于Oracle jdk8u144-b01IBM Websphere server使用IBM JRE而不是Oracle JRE。这是报价单 SSLContext.getInstance(“TLS”)的IBM实现是不同的 来自Oracle实现 请在下面找到此链接 还可以查看以下引用 如果设置系统属性com.ibm.jsse2.overrideDefaultTLS=true 并且您可以使SP800-131a严格合规 (com.ibm.jsse2.sp800-131)或套件B(com.ibm.jsse2.suiteB)系统 属性,则仅启用TLS V1.2协议 从下面的链接。 参考链接
IBM Websphere server使用IBM JRE而不是Oracle JRE。这是报价单 SSLContext.getInstance(“TLS”)的IBM实现是不同的 来自Oracle实现 请在下面找到此链接 还可以查看以下引用 如果设置系统属性com.ibm.jsse2.overrideDefaultTLS=true 并且您可以使SP800-131a严格合规 (com.ibm.jsse2.sp800-131)或套件B(com.ibm.jsse2.suiteB)系统 属性,则仅启用TLS V1.2协议 从下面的链接。 参考链接
我们不是在使用IBM Websphere,而是在IBM I-server上安装本机java SE 8。我不确定这是否有帮助,但我们已经在这样做了。。。SSLContext SSLContext=SSLContext.getInstance(“TLSv1.2”);你能检查一下IBM Server中的java版本并告诉我们吗?我刚刚将它添加到了顶部线程,因为它比允许的注释大-你能参考上面的主要帖子吗?是的,可以看到它是IBM JRE 1.8版,您可以尝试使用此链接。您是否尝试按照上面链接中给出的设置系统属性?我们使用的不是IBM Websphere,而是IBM I-server上的本机java SE 8安装。我不确定这是否有帮助,但我们已经在这样做了。。。SSLContext SSLContext=SSLContext.getInstance(“TLSv1.2”);您可以检查IBM Server中的java版本并告诉我们。我刚刚将其添加到顶部线程,因为它比允许的注释大-您可以参考上面的主要帖子吗?是的,可以看到它是IBM JRE 1.8版,您可以尝试使用此链接。您是否尝试按照上面链接中给出的设置系统属性?