javax.net.ssl.SSLHandshakeException:远程主机关闭握手期间连接,同时插入在BigQuery中的行 [英] javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake while inserting rows in bigquery
问题描述
你好我工作的Android应用程序中,我有集成BigQuery中。我看到有时我们得到了很多的SSL异常而将数据插入到大的查询表。我不知道该如何处理这个问题。请帮究竟是什么这个问题的原因。这里是同一个线程,但无人接听<一href="http://stackoverflow.com/questions/29301463/bigquery-ssl-error-while-doing-streaming-insert-api-call">Bigquery而这样做的流插入API调用 SSL错误
javax.net.ssl.SSLHandshakeException:远程主机关闭握手期间连接
在sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946)〜[呐:1.7.0_51]
在sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)〜[呐:1.7.0_51]
在sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)〜[呐:1.7.0_51]
在sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)〜[呐:1.7.0_51]
在sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)〜[呐:1.7.0_51]
在sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) 〜[呐:1.7.0_51]
在sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1091)〜[呐:1.7.0_51]
在sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)〜[呐:1.7.0_51]
在com.google.api.client.http.javanet.NetHtt prequest.execute(NetHtt prequest.java:77)〜[谷歌的HTTP客户1.19.0.jar:1.19.0]
在com.google.api.client.http.Htt prequest.execute(Htt的prequest.java:965)〜[谷歌的HTTP客户1.19.0.jar:1.19.0]
在com.google.api.client.googleapis.batch.BatchRequest.execute(BatchRequest.java:241)〜[谷歌API的客户1.19.1.jar:1.19.1]
在com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2$$anonfun$4.apply(InsertApiActor.scala:131) 〜[分析数据存储,worker_2.11-1.0.0.jar:1.0.0]
在com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2$$anonfun$4.apply(InsertApiActor.scala:118) 〜[分析数据存储,worker_2.11-1.0.0.jar:1.0.0]
在com.livestream.analytics.common.store.bigquery.api.BigQueryApi $ .withSyncClient(BigQueryApi.scala:71)〜[分析-common_2.11-1.0.0.jar:1.0.0]
在com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2.apply$mcV$sp(InsertApiActor.scala:118) 〜[分析数据存储,worker_2.11-1.0.0.jar:1.0.0]
在com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2.apply(InsertApiActor.scala:115) 〜[分析数据存储,worker_2.11-1.0.0.jar:1.0.0]
在com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2.apply(InsertApiActor.scala:115) 〜[分析数据存储,worker_2.11-1.0.0.jar:1.0.0]
在com.livestream.analytics.common.monitoring.Timer.time(Timer.scala:15)〜[分析-common_2.11-1.0.0.jar:1.0.0]
在com.livestream.analytics.datastorage.worker.InsertApiActor.com$livestream$analytics$datastorage$worker$InsertApiActor$$insertDataRowsToBigQueryTable(InsertApiActor.scala:115) [分析数据存储,worker_2.11-1.0.0.jar:1.0.0]
在com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$receive$1.applyOrElse(InsertApiActor.scala:80) [分析数据存储,worker_2.11-1.0.0.jar:1.0.0]
在akka.actor.Actor $ class.aroundReceive(Actor.scala:465)[阿卡-actor_2.11-2.3.9.jar:NA]
在com.livestream.analytics.datastorage.worker.InsertApiActor.aroundReceive(InsertApiActor.scala:54)[分析数据存储,worker_2.11-1.0.0.jar:1.0.0]
在akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)[阿卡-actor_2.11-2.3.9.jar:NA]
在akka.actor.ActorCell.invoke(ActorCell.scala:487)[阿卡-actor_2.11-2.3.9.jar:NA]
在akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254)[阿卡-actor_2.11-2.3.9.jar:NA]
在akka.dispatch.Mailbox.run(Mailbox.scala:221)[阿卡-actor_2.11-2.3.9.jar:NA]
在akka.dispatch.Mailbox.exec(Mailbox.scala:231)[阿卡-actor_2.11-2.3.9.jar:NA]
在scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)的Scala库,2.11.5.jar:NA]
在scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339)的Scala库,2.11.5.jar:NA]
在scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)的Scala库,2.11.5.jar:NA]
在scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)的Scala库,2.11.5.jar:NA]
java.io.EOFException:通过SSL引起同行不正确关闭
在sun.security.ssl.InputRecord.read(InputRecord.java:482)〜[呐:1.7.0_51]
在sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927)〜[呐:1.7.0_51]
... 30共同框架省略
(HTTPS)请求你需要添加安全证书在你的应用程序。这里是链接如何添加它。
您可以测试是否真的安全证书是造成它,添加这个类在你的项目中。
进口java.security.KeyManagementException;
进口java.security.NoSuchAlgorithmException;
进口java.security.SecureRandom中;
进口java.security.cert.X509Certificate;
进口javax.net.ssl.HostnameVerifier;
进口javax.net.ssl.HttpsURLConnection中;
进口javax.net.ssl.SSLContext;
进口javax.net.ssl.SSLSession中;
进口javax.net.ssl.TrustManager;
进口javax.net.ssl.X509TrustManager;
公共类HttpsTrustManager实现X509TrustManager {
私有静态的TrustManager [] trustManagers;
私有静态最后的X509Certificate [] _AcceptedIssuers =新的X509Certificate [] {};
@覆盖
公共无效checkClientTrusted(
java.security.cert.X509Certificate [] X509Certificates的,的String)
抛出java.security.cert.CertificateException {
}
@覆盖
公共无效checkServerTrusted(
java.security.cert.X509Certificate [] X509Certificates的,的String)
抛出java.security.cert.CertificateException {
}
公共布尔isClientTrusted(x509证书[]链){
返回true;
}
公共布尔isServerTrusted(x509证书[]链){
返回true;
}
@覆盖
公共x509证书[] getAcceptedIssuers(){
返回_AcceptedIssuers;
}
公共静态无效allowAllSSL(){
HttpsURLConnection.setDefaultHostnameVerifier(新的HostnameVerifier(){
@覆盖
公共布尔验证(字符串为arg0,的SSLSession ARG1){
返回true;
}
});
的SSL连接上下文= NULL;
如果(trustManagers == NULL){
trustManagers =新的TrustManager [] {新HttpsTrustManager()};
}
尝试 {
上下文= SSLContext.getInstance(TLS);
context.init(NULL,trustManagers,新的SecureRandom());
}赶上(抛出:NoSuchAlgorithmException E){
e.printStackTrace();
}赶上(KeyManagementException E){
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(上下文
.getSocketFactory());
}
}
和通话
HttpsTrustManager.allowAllSSL(); //允许所有的SSL连接
在一个API调用。
请注意: 这code跳过验证,并允许任何持证上岗。 此方法不应被用于安全通信。 这仅仅是检查证书身份验证导致错误。
Hi I am working on android app in which I have integrated bigquery. I see sometimes we are getting a lot of SSL exceptions while inserting data to big query tables. I don't know how to handle this . Please help what exactly is the cause of this problem. Here is the same thread but no answer Bigquery SSL error while doing streaming insert api call
javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:946) ~[na:1.7.0_51]
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) ~[na:1.7.0_51]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) ~[na:1.7.0_51]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) ~[na:1.7.0_51]
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) ~[na:1.7.0_51]
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) ~[na:1.7.0_51]
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1091) ~[na:1.7.0_51]
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) ~[na:1.7.0_51]
at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77) ~[google-http-client-1.19.0.jar:1.19.0]
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965) ~[google-http-client-1.19.0.jar:1.19.0]
at com.google.api.client.googleapis.batch.BatchRequest.execute(BatchRequest.java:241) ~[google-api-client-1.19.1.jar:1.19.1]
at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2$$anonfun$4.apply(InsertApiActor.scala:131) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2$$anonfun$4.apply(InsertApiActor.scala:118) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
at com.livestream.analytics.common.store.bigquery.api.BigQueryApi$.withSyncClient(BigQueryApi.scala:71) ~[analytics-common_2.11-1.0.0.jar:1.0.0]
at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2.apply$mcV$sp(InsertApiActor.scala:118) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2.apply(InsertApiActor.scala:115) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$2.apply(InsertApiActor.scala:115) ~[analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
at com.livestream.analytics.common.monitoring.Timer.time(Timer.scala:15) ~[analytics-common_2.11-1.0.0.jar:1.0.0]
at com.livestream.analytics.datastorage.worker.InsertApiActor.com$livestream$analytics$datastorage$worker$InsertApiActor$$insertDataRowsToBigQueryTable(InsertApiActor.scala:115) [analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
at com.livestream.analytics.datastorage.worker.InsertApiActor$$anonfun$receive$1.applyOrElse(InsertApiActor.scala:80) [analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
at akka.actor.Actor$class.aroundReceive(Actor.scala:465) [akka-actor_2.11-2.3.9.jar:na]
at com.livestream.analytics.datastorage.worker.InsertApiActor.aroundReceive(InsertApiActor.scala:54) [analytics-data-storage-worker_2.11-1.0.0.jar:1.0.0]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) [akka-actor_2.11-2.3.9.jar:na]
at akka.actor.ActorCell.invoke(ActorCell.scala:487) [akka-actor_2.11-2.3.9.jar:na]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:254) [akka-actor_2.11-2.3.9.jar:na]
at akka.dispatch.Mailbox.run(Mailbox.scala:221) [akka-actor_2.11-2.3.9.jar:na]
at akka.dispatch.Mailbox.exec(Mailbox.scala:231) [akka-actor_2.11-2.3.9.jar:na]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.11.5.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.11.5.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library-2.11.5.jar:na]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.11.5.jar:na]
Caused by: java.io.EOFException: SSL peer shut down incorrectly
at sun.security.ssl.InputRecord.read(InputRecord.java:482) ~[na:1.7.0_51]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927) ~[na:1.7.0_51]
... 30 common frames omitted
If you are using (https) requests you need to add Security Certificate in your app. here is link how to add it.
You can test if indeed security certificate is causing it, Add this class in your project.
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class HttpsTrustManager implements X509TrustManager {
private static TrustManager[] trustManagers;
private static final X509Certificate[] _AcceptedIssuers = new X509Certificate[]{};
@Override
public void checkClientTrusted(
java.security.cert.X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {
}
@Override
public void checkServerTrusted(
java.security.cert.X509Certificate[] x509Certificates, String s)
throws java.security.cert.CertificateException {
}
public boolean isClientTrusted(X509Certificate[] chain) {
return true;
}
public boolean isServerTrusted(X509Certificate[] chain) {
return true;
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return _AcceptedIssuers;
}
public static void allowAllSSL() {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String arg0, SSLSession arg1) {
return true;
}
});
SSLContext context = null;
if (trustManagers == null) {
trustManagers = new TrustManager[]{new HttpsTrustManager()};
}
try {
context = SSLContext.getInstance("TLS");
context.init(null, trustManagers, new SecureRandom());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
}
HttpsURLConnection.setDefaultSSLSocketFactory(context
.getSocketFactory());
}
}
and call
HttpsTrustManager.allowAllSSL(); // Allow all SSL connections
before an API call.
NOTE: This code skips verification and allows any certificate to work. This method should not be used for secure communication. This is just to check if Certificate authentication is causing the error.
这篇关于javax.net.ssl.SSLHandshakeException:远程主机关闭握手期间连接,同时插入在BigQuery中的行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!