studio significa que not net found for certification certificado java android web-services ssl https

significa - javax.net.ssl.SSLException: protocolo de enlace SSL abortado Restablecimiento de la conexión por igual al llamar al servicio web Android



trust anchor for certification path not found que significa (4)

Llamaré a https webservice y funciona bien antes, pero ahora cuando intento llamarlo me dan los siguientes errores.

Errores de registro:

12-23 06:28:11.969: W/System.err(3014): javax.net.ssl.SSLException: SSL handshake aborted: ssl=0x1cc160: I/O error during system call, Connection reset by peer 12-23 06:28:11.979: W/System.err(3014): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method) 12-23 06:28:11.979: W/System.err(3014): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:474) 12-23 06:28:11.979: W/System.err(3014): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.<init>(OpenSSLSocketImpl.java:750) 12-23 06:28:11.979: W/System.err(3014): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:692) 12-23 06:28:11.979: W/System.err(3014): at crittercism.android.aa.getInputStream(Unknown Source) 12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.io.SocketInputBuffer.<init>(SocketInputBuffer.java:93) 12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.SocketHttpClientConnection.createSessionInputBuffer(SocketHttpClientConnection.java:83) 12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.conn.DefaultClientConnection.createSessionInputBuffer(DefaultClientConnection.java:170) 12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.SocketHttpClientConnection.bind(SocketHttpClientConnection.java:106) 12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.conn.DefaultClientConnection.openCompleted(DefaultClientConnection.java:129) 12-23 06:28:11.979: W/System.err(3014): at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:171) 12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:359) 12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 12-23 06:28:11.989: W/System.err(3014): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)

Estoy usando el siguiente código para llamar a https webservice.

public static void trustAllHosts() { X509TrustManager easyTrustManager = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { // Oh, I am easy! } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { // Oh, I am easy! } public X509Certificate[] getAcceptedIssuers() { return null; } }; // Create a trust manager that does not validate certificate chains TrustManager[] trustAllCerts = new TrustManager[] { easyTrustManager }; // Install the all-trusting trust manager try { SSLContext sc = SSLContext.getInstance("TLS"); sc.init(null, trustAllCerts, new java.security.SecureRandom()); HttpsURLConnection .setDefaultSSLSocketFactory(sc.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } } public static HttpClient getNewHttpClient() { try { KeyStore trustStore = KeyStore.getInstance(KeyStore .getDefaultType()); trustStore.load(null, null); SSLSocketFactory sf = new MySSLSocketFactory(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory .getSocketFactory(), 80)); registry.register(new Scheme("https", sf, 443)); ClientConnectionManager ccm = new ThreadSafeClientConnManager( params, registry); return new DefaultHttpClient(ccm, params); } catch (Exception e) { return new DefaultHttpClient(); } }

MySSLSocketFactory.java

public class MySSLSocketFactory extends SSLSocketFactory { SSLContext sslContext = SSLContext.getInstance("TLS"); public MySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { super(truststore); TrustManager tm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; sslContext.init(null, new TrustManager[] { tm }, null); } @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); } @Override public Socket createSocket() throws IOException { return sslContext.getSocketFactory().createSocket(); } }

Está funcionando bien antes, pero ahora falla. No hay ningún cambio realizado en el servidor.

Ya me referí

  1. Android-Query - Random SSLExceptions
  2. Restablecimiento de la conexión intermitente por errores pares en Android que se conecta al punto final REST .NET
  3. Excepción de Android HTTPS Restablecimiento de la conexión por pares
  4. ¿Por qué HttpUrlConnection lanza una SSLException mientras está en una conexión de datos móvil?

Lo he probado tanto en wifi como en datos móviles. La aplicación no funciona en ambos.

Si alguien enfrenta este problema antes, ayúdame a resolverlo.


Estaba teniendo el mismo problema para algunos dispositivos Android. Encontré la solución en la configuración del servidor IIS .

Pasos:

  1. Abra IIS
  2. Seleccione el sitio en el que está trabajando
  3. Editar enlace de sitio
  4. Desmarque la identificación requerida del nombre del servidor
  5. Haga clic en Aceptar

Captura de pantalla de referencia:

Espero que esto te ayude.


Puede haber 2 razones:

Los certificados pueden caducar al final del cliente o del servidor.

Solución: Extienda la fecha de caducidad del certificado existente o Cambie nuevos certificados.

El puerto del servidor se ha restablecido en algún otro puerto.

Solución: me he enfrentado a este problema de cambio de puerto, normalmente debido al mantenimiento del servidor o la actualización del parche, a veces el puerto del servicio recibe cambios. Pídale a la persona que le proporcionó el wsdl que regenere wsdl en su servidor y verifique si el puerto no coincide con el wsdl existente en el lado del cliente o no. Probablemente este sea el caso aquí.


También recibí la misma excepción. Descubrí que era debido a que el protocolo TLS 1.0 no era compatible con el servidor.

Observé que el dispositivo Android, la conexión http falla al servidor donde TLS 1.0 no es compatible. Busqué en todas partes sobre el error, pero no encontré nada relacionado con este problema. Y el problema se resolvió cuando se agregó el soporte de TLS 1.0 protocol al servidor. Puede consultar el soporte de protocolo de servidor / nombre de host usando https://www.ssllabs.com/ssltest .


Tuvimos este mismo problema a partir de esta mañana y lo solucionamos.

SSL en IIS 8

  1. Todo funcionó bien ayer y anoche nuestro SSL se actualizó en el sitio de IIS.
  2. Mientras revisábamos los Enlaces del sitio al SSL, notamos que IIS8 tenía una nueva casilla de verificación "Requerir indicación de nombre del servidor", no estaba marcada, así que procedimos a habilitarla.
  3. Eso desencadenó el problema.
  4. Volví a IIS, deshabilité la casilla ... ¡problema resuelto!