Javax.net.ssl.SSLHandshakeException: El host remoto cerró la conexión durante el apretón de manos al insertar filas en bigquery
Hola estoy trabajando en la aplicación android en la que he integrado bigquery. Veo que a veces estamos recibiendo muchas excepciones de SSL al insertar datos en tablas de consulta grandes. No sé cómo manejar esto. Por favor, ayuda qué es exactamente la causa de este problema. Aquí está el mismo hilo, pero no hay respuesta Bigquery SSL error al hacer streaming insertar llamada api
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
- Cómo utilizar el SSL con multi entidad en android
- Intermitente PeerUnverifiedException: No hay certificado de compañero con el cliente de Android
- Habilitación de protocolos SSL específicos con Android WebViewClient
- Comunicación de servicio web Https de Android (SSL / TLS 1.2)
- El certificado StartSSL no es de confianza en Firefox y en Android
- Aceptación de un certificado para HTTPs en Android
- Cómo deshabilitar SSLbackbackback con okhttp
- Android No se puede verificar el certificado autofirmado sin una conexión previa a Internet
- La manipulación SSL personalizada dejó de funcionar en Android 2.2 FroYo
- Soporte de TLS v1.2 en Webview Android
- Cómo utilizar archivos .key y .pem para crear un socket SSL en Android?
- Cadena de confianza de Android SSL con certificados intermedios (Apache HttpClient 4.X)
- no se puede conectar al servidor utilizando BKS keystore
Probablemente el servidor solicita un certificado de cliente y no está proporcionando uno. El servidor proporcionará una lista de firmantes de confianza y el certificado de cliente debe estar firmado por uno de ellos. No puede utilizar un certificado autofirmado para el cliente a menos que haya hecho arreglos especiales con el servidor, es decir, importado su certificado de cliente en su lista de certificados de confianza. Su cliente SSL no enviará un certificado si no puede encontrar uno, o si los que encuentra no tienen firmantes de confianza.
No tiene nada que ver con lo que la conexión SSL iba a hacer después de que se estableció, por ejemplo, consultas SQL, actualizaciones, etc.
Si está utilizando solicitudes (https), debe agregar Certificado de seguridad en su aplicación. Aquí está el acoplamiento cómo agregarlo.
Usted puede probar si de hecho el certificado de seguridad está causando, Agregar esta clase en su proyecto.
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()); } }
y llama
HttpsTrustManager.allowAllSSL(); // Allow all SSL connections
Antes de una llamada a la API.
NOTA: Este código omite la verificación y permite que cualquier certificado funcione. Este método no debe utilizarse para una comunicación segura. Esto es sólo para comprobar si la autenticación de certificado está causando el error.
Esto puede significar que hay un desajuste entre la configuración de seguridad de java de cliente y servidor. Cosas a comprobar: ¿Está utilizando el número de puerto correcto? Es decir, ¿se está conectando al puerto https definido para el servidor? Java versión en el cliente es igual que en el servidor, si no, por favor, postear qué versiones se están utilizando qué versión de ssl está configurado para ser utilizado? – asegúrese de que son iguales, por ejemplo, tanto ssl v2 o ssl v3
- AppCompatActivity.onCreate sólo se puede llamar desde dentro del mismo grupo de bibliotecas
- Creación dinámica de botones y configuración onClickListener