javax.net.ssl​​.SSLHandshakeException:远程主机关闭握手期间连接,同时插入在BigQuery中的行 [英] javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake while inserting rows in bigquery

查看:495
本文介绍了javax.net.ssl​​.SSLHandshakeException:远程主机关闭握手期间连接,同时插入在BigQuery中的行的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

你好我工作的Andr​​oid应用程序中,我有集成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)请求你需要添加安全证书在你的应用程序。这里是链接如何添加它。

http://stackoverflow.com/questions/4065379/how-to-create-a-bks-bouncycastle-format-java-keystore-that-contains-a-client-c

您可以测试是否真的安全证书是造成它,添加这个类在你的项目中。

 进口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.

http://stackoverflow.com/questions/4065379/how-to-create-a-bks-bouncycastle-format-java-keystore-that-contains-a-client-c

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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆