Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javax.net.ssl.SSLHandshakeException在使用HTTPPost连接到第三方URL时发生异常 代码片段:_Java_Ssl_Https_Http Post_Apache Httpclient 4.x - Fatal编程技术网

javax.net.ssl.SSLHandshakeException在使用HTTPPost连接到第三方URL时发生异常 代码片段:

javax.net.ssl.SSLHandshakeException在使用HTTPPost连接到第三方URL时发生异常 代码片段:,java,ssl,https,http-post,apache-httpclient-4.x,Java,Ssl,Https,Http Post,Apache Httpclient 4.x,这是一个独立的多线程核心java应用程序,它使用httpclient-4.0-beta1.jar进行连接 例外情况: 当尝试连接到客户端url时出现以下异常,我需要发送请求 javax.net.ssl.SSLHandshakeException:远程主机关闭连接 握手过程中javax.net.ssl.SSLException:连接已断开 关闭:javax.net.ssl.SSLHandshakeException:远程主机关闭 握手时的连接 位于sun.security.ssl.SSLSocke

这是一个独立的多线程核心java应用程序,它使用httpclient-4.0-beta1.jar进行连接

例外情况: 当尝试连接到客户端url时出现以下异常,我需要发送请求

javax.net.ssl.SSLHandshakeException:远程主机关闭连接 握手过程中javax.net.ssl.SSLException:连接已断开 关闭:javax.net.ssl.SSLHandshakeException:远程主机关闭 握手时的连接 位于sun.security.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1496) 位于sun.security.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1508) 位于sun.security.ssl.AppOutputStream.write(AppOutputStream.java:70) 位于org.apache.http.impl.conn.DefaultClientConnection.close(DefaultClientConnection.java:161) 位于org.apache.http.impl.conn.AbstractPooledConnAdapter.close(AbstractPooledConnAdapter.java:158) 在com.firstdata.preadward.closedloop.service.realtime.transaction.processor.ProcessorThread.run(ProcessorThread.java:25)上 原因:javax.net.ssl.SSLHandshakeException:远程主机关闭 握手时的连接 位于sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:953) 位于sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332) 位于sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:709) 位于sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) 位于org.apache.http.impl.io.AbstractSessionOutputBuffer.flushBuffer(AbstractSessionOutputBuffer.java:87) 位于org.apache.http.impl.io.AbstractSessionOutputBuffer.write(AbstractSessionOutputBuffer.java:107) ... 另外12个原因:java.io.EOFException:SSL对等机错误关闭

为了


连接:
我使用下面的配置运行这个shell脚本,起初我尝试使用代理执行,但之后我也配置了代理 但仍然存在同样的问题。我们将非常感谢您在thsi方面提供的任何帮助

$JAVA_HOME/java -Xms128m -Xmx1024m -cp $CLASSPATH -Djavax.net.ssl.trustStore=/java/jdk1.7.0_49/jre/lib/security/cacerts -Djavax.net.ssl.keyStorePassword=changeit -Djavax.http.proxyHost=proxyAddress -Djavax.http.port=8080  > ./out.log 2>&1 &

我在
localhost
上对自签名证书进行REST调用,因此我想将我的证书添加到
cacert
文件中的
jvm
,但在这之后,这对我来说很好
CloseableHttpClient=HttpClients.custom().setSSLHostnameVerifier(新NoopHostnameVerifier()).build()

javax.net.ssl.SSLHandshakeException:握手期间远程主机关闭连接

这几乎可以是任何内容,但通常与服务器证书的验证无关。此错误的一些常见原因:

  • 服务器需要,但客户端未使用SNI。尤其是Android SDK附带的Apache HTTP客户端不支持SNI
  • 服务器需要客户端不发送或服务器不接受的客户端证书
  • 密码、协议版本不匹配
要调试问题,请尝试与其他客户端联系服务器,尝试与客户端联系其他服务器,使用密码协议版本,查看数据包捕获等。同时查看服务器端的日志。不幸的是,SSL问题很难调试,因为没有得到多少有用的错误消息

SSLContext we used 
    SSLContext context = SSLContext.getInstance(TLSv1_2);
 HttpParams params = new BasicHttpParams();
 ConnManagerParams.setMaxConnectionsPerRoute(params, new ConnPerRouteBean(900));
 ConnManagerParams.setMaxTotalConnections(params, 1800);
 HttpConnectionParams.setConnectionTimeout(params, 30); // Connection timeout when requesting a connection.
HttpConnectionParams.setSoTimeout(params, 30); // Connection level timeout for waiting on data if Method level not provided.
HttpConnectionParams.setLinger(params, 0); //Disabled - How long a socket lingers after close() is called.
HttpConnectionParams.setStaleCheckingEnabled(params, false); // Disabled - Check the connec tion before attempting to use.
HttpConnectionParams.setTcpNoDelay(params, false); // Disabled - Enables Nagles Algorithm for performance.

HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); // Http Protocol Version to use.
HttpProtocolParams.setUseExpectContinue(params, false); 
HttpProtocolParams.setContentCharset(params, "ISO-8859-1"); // Body Content Character Set.
HttpProtocolParams.setHttpElementCharset(params, "ISO-8859-1"); // Header Content Character Set. 
HttpClientParams.setAuthenticating(params, false);
ConnManagerParams.setTimeout(params, 30);

HttpClientParams.setRedirecting(params, false); // Disabled - Allow Redirects.
HttpClientParams.setCookiePolicy(params, CookiePolicy.BEST_MATCH);

 SchemeRegistry httpSecureSchemeRegistry = new SchemeRegistry();    
 httpSecureSchemeRegistry.register(new Scheme("https",SSLSocketFactory.getSocketFactory(),443));
 ClientConnectionManager cmHttpSecure = new ThreadSafeClientConnManager(params, httpSecureSchemeRegistry);
 this.httpSecureClient = new DefaultHttpClient(cmHttpSecure, params);

 HttpPost httpPost = new HttpPost(clientURL);
 this.httpSecureClient.execute(httpPost);
$JAVA_HOME/java -Xms128m -Xmx1024m -cp $CLASSPATH -Djavax.net.ssl.trustStore=/java/jdk1.7.0_49/jre/lib/security/cacerts -Djavax.net.ssl.keyStorePassword=changeit -Djavax.http.proxyHost=proxyAddress -Djavax.http.port=8080  > ./out.log 2>&1 &