gpt4 book ai didi

使用 HTTPPost 连接到第三方 URL 时出现 javax.net.ssl.SSLHandshakeException

转载 作者:行者123 更新时间:2023-11-30 08:10:56 25 4
gpt4 key购买 nike

代码片段:

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

异常:

尝试连接到客户端 url 时出现以下异常,我需要发送请求。

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at sun.security.ssl.SSLSocketImpl.checkEOF(SSLSocketImpl.java:1496) at sun.security.ssl.SSLSocketImpl.checkWrite(SSLSocketImpl.java:1508) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:70) at org.apache.http.impl.conn.DefaultClientConnection.close(DefaultClientConnection.java:161) at org.apache.http.impl.conn.AbstractPooledConnAdapter.close(AbstractPooledConnAdapter.java:158) at com.firstdata.prepaid.closedloop.service.realtime.transaction.processor.ProcessorThread.run(ProcessorThread.java:25) Caused by: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:953) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1332) at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:709) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) at org.apache.http.impl.io.AbstractSessionOutputBuffer.flushBuffer(AbstractSessionOutputBuffer.java:87) at org.apache.http.impl.io.AbstractSessionOutputBuffer.write(AbstractSessionOutputBuffer.java:107) ... 12 more Caused by: java.io.EOFException: SSL peer shut down incorrectly

   *********************

为了

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);

我正在使用以下配置通过 shell 脚本运行它,起初 1 尝试使用代理执行,但之后我也配置了代理但仍然存在同样的问题。在此方面的任何帮助将不胜感激。

$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 &

最佳答案

javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake

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

  • 服务器需要 SNI但是客户端没有使用 SNI。特别是 Android SDK 附带的 Apache HTTP Client 不支持 SNI。
  • 服务器需要客户端不发送或服务器不接受的客户端证书。
  • 密码不匹配,协议(protocol)版本...

要调试问题,请尝试将服务器与其他客户端联系,尝试将其他服务器与客户端联系,尝试使用密码协议(protocol)版本,查看数据包捕获等。还要查看服务器端的日志。不幸的是,SSL 问题很难调试,因为人们不会收到很多有用的错误消息。

关于使用 HTTPPost 连接到第三方 URL 时出现 javax.net.ssl.SSLHandshakeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com