Estoy tratando de conectarse a un IIS6 cuadro de ejecución de un godaddy 256 bits SSL cert, y estoy recibiendo el error :

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.

Estado tratando de determinar lo que podría ser la causa de que, pero el dibujo en blanco a la derecha ahora.

Aquí es cómo voy a conectar :

HttpsURLConnection conn;              
conn = (HttpsURLConnection) (new URL(mURL)).openConnection();
conn.setConnectTimeout(20000);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.connect();
String tempString = toString(conn.getInputStream()); 
InformationsquelleAutor Chrispix | 2011-07-26

14 Comentarios

  1. 65

    La solución de @Chrispix es peligroso! Confiar en todos los certificados permite a cualquier persona para hacer un hombre en el ataque medio! Sólo tienes que enviar un certificado para el cliente y que se acepte!

    Agregar el certificado(s) personalizado para un administrador de confianza, como se describe en este post: Confiar en todos los certificados de uso de HttpClient a través de HTTPS

    Aunque es un poco más complejo para establecer una conexión segura con un certificado personalizado, que le traerá la quería cifrado ssl de seguridad, sin el peligro del hombre en el ataque medio!

    • Esto está bien para trabajar con un auto-generado cert, pero para uno (como la OP), que tiene una cadena válida de vuelta a la raíz de la CA es sólo una solución para un mal configurado el servidor – ver mi respuesta.
    • La aceptación de CADA certificado es sólo una opción para una prueba de concepto de la prueba, donde la conexión SSL no es la parte que se desea probar. De lo contrario, usted no tiene que usar SSL, si aceptar todos los certificados, como la conexión no es segura!
    • Ah, lo siento, creo que hay un malentendido – estoy totalmente de acuerdo en que nadie jamás debe aceptar todos los certificados! 🙂 Mi comentario era en lo que respecta a su apartado 2º – la sugerencia de usar un administrador de confianza – que en mi humilde opinión debería ser un último recurso solución en lugar de una solución recomendada.
    • Sobresalen las cabezas para arriba.. he quitado la ‘solución’ me pega como una solución para no causar más problemas, ya que la gente no se la ve como un ‘temporal’.
    • usted no debería de haber retirado la solución parcial, es bueno sólo para propósitos de prueba
    • Si usted es una ROM desarrollador de poner su certificado de CA raíz en AOSP árbol en system/ca-certificates/archivos
    • Antes de hacer esto, por favor, compruebe si el servidor está configurado correctamente, consulte Stevie respuesta – stackoverflow.com/a/16302527/1000551

  2. 193

    Contrario a la aceptación de respuesta que no personalizado administrador de confianza, usted necesita ajustar la configuración de su servidor!

    Me golpeó el mismo problema al conectar a un servidor Apache con un incorrectamente instalado dynadot/alphassl certificado. Me estoy conectando mediante HttpsUrlConnection (Java/Android), que fue lanzando –

    javax.net.ssl.SSLHandshakeException: 
      java.security.cert.CertPathValidatorException: 
        Trust anchor for certification path not found.

    El problema real es un servidor mal configurado – prueba con http://www.digicert.com/help/ o similar, y que incluso le dirá la solución:

    «El certificado no está firmado por una autoridad de confianza (cheques contra de Mozilla raíz de la tienda). Si usted compró el certificado de una autoridad de confianza, probablemente sólo es necesario instalar uno o más de los certificados Intermedios. Póngase en contacto con su proveedor de certificados de asistencia a hacer esto para su plataforma de servidor.»

    También puede comprobar el certificado con openssl:

    openssl s_client -debug -connect www.thedomaintocheck.com:443

    Usted probablemente verá:

    Verify return code: 21 (unable to verify the first certificate)

    y, antes de la salida:

    depth=0 OU = Domain Control Validated, CN = www.thedomaintocheck.com
    verify error:num=20:unable to get local issuer certificate
    verify return:1
    depth=0 OU = Domain Control Validated, CN = www.thedomaintocheck.com
    verify error:num=27:certificate not trusted
    verify return:1
    depth=0 OU = Domain Control Validated, CN = www.thedomaintocheck.com
    verify error:num=21:unable to verify the first certificate`

    La cadena de certificados sólo contienen de 1 elemento (el certificado):

    Certificate chain
     0 s:/OU=Domain Control Validated/CN=www.thedomaintocheck.com
      i:/O=AlphaSSL/CN=AlphaSSL CA - G2

    … pero debe hacer referencia a la firma de las autoridades en una cadena de regreso a uno que es de confianza por Android (Verisign, GlobalSign, etc):

    Certificate chain
     0 s:/OU=Domain Control Validated/CN=www.thedomaintocheck.com
       i:/O=AlphaSSL/CN=AlphaSSL CA - G2
     1 s:/O=AlphaSSL/CN=AlphaSSL CA - G2
       i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
     2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
       i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

    Instrucciones (y los certificados intermedios) para la configuración de su servidor generalmente son proporcionados por la autoridad que emitió el certificado, por ejemplo: http://www.alphassl.com/support/install-root-certificate.html

    Después de la instalación de los certificados intermedios proporcionadas por el emisor del certificado ahora no tengo errores al conectarse mediante HttpsUrlConnection.

    • En caso de que el OP tiene acceso a los servidores de configuración de SSL que se va a conectar, esto podría ser una solución. Pero si él no es el que aloja el servicio se conecta a él tiene que solucionar el problema de su lado, el significado de la implementación de un personalizados administrador de confianza.
    • Su solución funciona, no hay duda, pero no acepta que se trata de una solución en lugar de una solución para la causa raíz? Si tengo que conectar a un servidor desde el 3 de clientes (Android, iOS, Windows Mobile), me tengo que aplicar la solución en todos los 3, mientras que yo puedo arreglar el servidor una vez y todos ellos «sólo trabajo».
    • Gracias Stevie, yo tenía mi servidor mal configurado por 3 meses, y sólo ahora he detectado esto! Ahora mi aplicación para android está funcionando al 100%
    • esta es exactamente la causa de la raíz de nuestro servidor. estamos introduciendo HAProxy en la producción, y la configuración errónea de que la causa del problema.
    • Puedo hacer muchas llamadas a la Api diferentes que comparten el mismo dominio, pero sólo uno de ellos falla con (javax.net.ssl.SSLHandshakeException) … alguna idea de por qué tal cosa sucedería? y por cierto, el Certificado SSL no es de confianza. Por lo tanto, creo que todas las llamadas deben fallar con la misma excepción.
    • Son todas las llamadas desde el mismo cliente de la infraestructura? Tal vez algunos clientes son más sensibles. ¿El uso de los diferentes sub-dominios para algunos de la API? ¿El error de la API de hacer algo un poco diferente – por ejemplo, mediante CORS? Tal vez su situación es lo suficientemente diferentes como para requerir una nueva pregunta?
    • Esto está bien si usted tiene acceso al servidor. ¿Qué pasa si usted encuentra este error en un servidor que no tiene acceso?
    • ponerse en contacto con quien lo hace propio el servidor y decirles que su configuración es roto y sus https no está funcionando correctamente – darles este enlace para probarlo digicert.com/help … me imagine que iba a ser agradecidos y rápido para resolver. De lo contrario, usted tendrá que tomar uno de los pasos de la solución en las otras respuestas, pero entonces usted tendrá que aceptar ninguna seguridad ignorar (certs) o volver a desplegar las aplicaciones cuando el certificado caduque y su confianza personalizada de la tienda ya no coincide con la nueva cert.
    • Este es un excelente post y me llevó a la raíz de la causa de mi problema muy rápidamente. Muchas gracias.
    • Esta es la solución real para el problema y no una solución. Este debe ser un wiki de la comunidad. Gracias @Stevie
    • Para ampliar Stevie solución, permítanme explicar lo que una solución sería igual, por lo que no será de pánico como yo: tengo mi certificado de ssl.com. Aquí los pasos sobre cómo instalar los certificados intermedios (si usa nginx): nginx.org/en/docs/http/configuring_https_servers.html Básicamente, usted necesita descargar el paquete de software de cadena de certificado de su proveedor, luego concatenar con su certificado actual. (Cuidado con el orden).
    • Esta respuesta me ayudó (desarrollador móvil) navegar especialista de la red en mi gran compañía para resolver el problema: a) porque, por alguna razón, entonces no instalar los certificados intermedios correctamente
    • Muchas gracias por los puntos! Esto me da la correcta recuerda. Para mí, mi caso es para conectarse a NodeJS servidor push de ReactNative. Yo no tenía ‘ca’ configuración así que me encontré con el problema, agregó CA el problema solucionado. El final var options = { key: fs.readFileSync('./keys/server-key.pem'), ca: [fs.readFileSync('./keys/ca-cert.pem')], cert: fs.readFileSync('./keys/server-cert.pem') };
    • hola stevie, yo ya ssl de depuración, y se dice que devolver el código 0, im usando comodo, por lo que yo sé de mi servidor ssl configuración es correcta. Debo seguir cavando la configuración de ssl o se trasladó a android el trabajo de todo ?. Usted puede revisar mi sitio web brinsmob.brins.co.id:5000, por favor, hágamelo saber si usted encuentra algo malo. Me acabo de confundir a donde mirar, la configuración del servidor o android, gracias.
    • su configuración de SSL se ve bien para mí, así que es de suponer que el problema está en la aplicación de alguna manera. Si usted no está teniendo exactamente el mismo problema que se describe en el post original, tal vez vale la pena publicar una nueva pregunta con detalles?
    • hola stevie, gracias por su interés en mi pregunta, esta historia completa de mi caso : stackoverflow.com/questions/48426351/…
    • Tengo el mismo problema, sin embargo este problema se produce sólo en los Móviles y las Tabletas. También tengo algunos Android de las cajas de TELEVISIÓN y de alguna manera no hay problema. ¿Tiene usted alguna idea de por qué en Android TV la api de trabajo, pero no en el móvil y las pestañas?
    • Además, este problema se describe en la documentación – developer.android.com/training/articles/…

  3. 16

    Usted puede confiar certificado en particular en tiempo de ejecución.

    Sólo tienes que descargar desde el servidor, poner en activos de carga y como este uso de ssl-utils-android:

    OkHttpClient client = new OkHttpClient();
    SSLContext sslContext = SslUtils.getSslContextForCertificateFile(context, "BPClass2RootCA-sha2.cer");
    client.setSslSocketFactory(sslContext.getSocketFactory());

    En el ejemplo anterior he utilizado OkHttpClient pero SSLContext puede ser utilizado con cualquier cliente en Java.

    Si usted tiene alguna pregunta no dude en preguntar. Soy el autor de esta pequeña biblioteca.

    • lo que sobre .pfx ?
  4. 11

    De actualización basado en Android más reciente de la documentación (Marzo de 2017):

    Cuando recibe este tipo de error:

    javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
            at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:374)
            at libcore.net.http.HttpConnection.setupSecureSocket(HttpConnection.java:209)
            at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:478)
            at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:433)
            at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:290)
            at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:240)
            at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:282)
            at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
            at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)

    el problema podría ser uno de los siguientes:

    1. La CA que emitió el certificado de servidor desconocido
    2. El certificado de servidor no estaba firmado por una CA, pero se auto firmado
    3. La configuración del servidor es la falta de una CA intermedia

    La solución es enseñar HttpsURLConnection a confiar en un conjunto específico de CAs. Cómo? Por favor, compruebe https://developer.android.com/training/articles/security-ssl.html#CommonProblems

    Otros que están utilizando AsyncHTTPClient de com.loopj.android:android-async-http de la biblioteca, por favor, compruebe El programa de instalación de AsyncHttpClient para utilizar HTTPS.

    • ¿Qué pasa si uno está usando una okhttp cliente?
    • Para okhttp, pls comprueba @mklimek la respuesta.
  5. 7

    Responder muy viejo post. Pero tal vez pueda ayudar a algún novato y si no de los de arriba funciona.

    Explicación: no conozco a nadie que quiera explicación mierda; en lugar de la solución. Pero en uno de línea, usted está tratando de acceder a un servicio de su máquina local a una máquina remota que no confía en su equipo. Solicita necesidad de ganar la confianza de servidor remoto.

    Solución: La siguiente solución se supone que usted tiene las siguientes condiciones se reunió

    1. Tratando de acceder a una api remota desde su máquina local.
    2. Usted está construyendo para Android
    3. Su control remoto servidor proxy de filtrado (utiliza el proxy en la configuración de su navegador para acceder a la api remota de servicio, generalmente de un ensayo o de dev server)
    4. Se están probando en el dispositivo real

    Pasos:

    Usted necesita un .el almacén de archivo de extensión a la inscripción de su aplicación. Si usted no sabe cómo crear .archivo de almacén de claves; a continuación, siga con el siguiente sección Crear .archivo de almacén de claves o de lo contrario, pase a la siguiente sección Signo Archivo Apk

    Crear .archivo de almacén de claves

    Abierto De Android Studio. Haga clic en la parte superior del menú Build > Generar Firmado APK. En la siguiente ventana haga clic en el Crear nuevo… botón. En la nueva ventana, por favor, entrada de datos en todos los campos. El recuerdo de las dos campo de Contraseña recomiendo debería tener la misma contraseña; no utilizar una contraseña diferente; y también recordar la ruta de guardado en la parte superior de la mayoría campo Clave de la ruta de acceso del almacén:. Después de introducir todos los campos haga clic en el botón ACEPTAR.

    Signo Archivo Apk

    Ahora lo que necesita para construir una aplicación firmado con el .archivo de almacén de claves que acaba de crear. Siga estos pasos

    1. Construir > Limpieza del Proyecto, espere hasta que se termine de limpiar
    2. Construir > Generar Firmado APK
    3. Haga clic en Choose existing... botón
    4. Seleccione el .archivo de almacén de claves que acabamos de crear en el Crear .archivo de almacén de claves sección
    5. Introducir la misma contraseña que creó durante la creación en Crear .archivo de almacén de claves sección. Usar la misma contraseña para Key store password y Key password campos. También escriba el alias
    6. Haga clic en el botón Next
    7. En la siguiente pantalla, la cual puede ser diferente dependiendo de su configuración en build.gradle archivos, usted necesita para seleccionar Build Types y Flavors.
    8. Para la Build Types elegir release de la lista desplegable
    9. Para Flavors sin embargo, depende de su configuración en build.gradle archivo. Elegir staging de este campo. He utilizado los siguientes ajustes en el build.gradle, puede utilizar la misma que la mía, pero asegúrese de cambiar el applicationId a su nombre del paquete

      productFlavors {
          staging {
              applicationId "com.yourapplication.package"
              manifestPlaceholders = [icon: "@drawable/ic_launcher"]
              buildConfigField "boolean", "CATALYST_DEBUG", "true"
              buildConfigField "boolean", "ALLOW_INVALID_CERTIFICATE", "true"
          }
          production {
              buildConfigField "boolean", "CATALYST_DEBUG", "false"
              buildConfigField "boolean", "ALLOW_INVALID_CERTIFICATE", "false"
          }
      }
    10. Haga clic en la parte inferior dos Signature Versions casillas de verificación y haga clic en Finish botón.

    Casi Allí:

    Todos el trabajar duro está hecho, ahora el movimiento de la verdad. Con el fin de brindar acceso al servidor de Ensayo respaldada por proxy, usted necesita hacer algunos ajustes en su verdadera prueba de los dispositivos Android.

    Configuración de Proxy en un Dispositivo Android:

    1. Haga clic en la opción dentro de Android teléfono y, a continuación, wi-fi
    2. Pulsación larga en el wifi conectado y seleccione Modify network
    3. Haga clic en el Advanced options si usted no puede ver el Proxy Hostname campo
    4. En el Proxy Hostname entrar en el host la IP o el nombre que desea conectarse. Un típico servidor de ensayo será nombrado como stg.api.mygoodcompany.com
    5. Para el puerto introduzca los cuatro dígitos del número de puerto, por ejemplo 9502
    6. Golpear la Save botón

    Una Última Parada:

    Recordar que generó la firma del archivo apk en Signo Archivo APK sección. Ahora es el momento para instalar el archivo APK.

    1. Abrir un terminal y se cambió a la firma del archivo apk de la carpeta
    2. Conectar su dispositivo Android a tu máquina
    3. Eliminar cualquier anterior instalado el archivo apk desde el dispositivo Android
    4. Ejecutar adb install name of the apk file
    5. Si por alguna razón el comando de arriba volver con adb command not found. Introduzca la ruta de acceso completa como C:\Users\shah\AppData\Local\Android\sdk\platform-tools\adb.exe install name of the apk file

    Espero que el problema podría ser resuelto. Si no por favor me deje un comentario.

    Salam!

  6. 6

    Si el uso de reconversión, que necesita para personalizar su OkHttpClient.

    retrofit = new Retrofit.Builder()
                            .baseUrl(ApplicationData.FINAL_URL)
                            .client(getUnsafeOkHttpClient().build())
                            .addConverterFactory(GsonConverterFactory.create())
                            .build();

    Código completo se muestra a continuación.

        public class RestAdapter {
    private static Retrofit retrofit = null;
    private static ApiInterface apiInterface;
    public static OkHttpClient.Builder getUnsafeOkHttpClient() {
    try {
    //Create a trust manager that does not validate certificate chains
    final TrustManager[] trustAllCerts = new TrustManager[]{
    new X509TrustManager() {
    @Override
    public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
    }
    @Override
    public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
    }
    @Override
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    return new java.security.cert.X509Certificate[]{};
    }
    }
    };
    //Install the all-trusting trust manager
    final SSLContext sslContext = SSLContext.getInstance("SSL");
    sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
    //Create an ssl socket factory with our all-trusting manager
    final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
    builder.sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0]);
    builder.hostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
    return true;
    }
    });
    return builder;
    } catch (Exception e) {
    throw new RuntimeException(e);
    }
    }
    public static ApiInterface getApiClient() {
    if (apiInterface == null) {
    try {
    retrofit = new Retrofit.Builder()
    .baseUrl(ApplicationData.FINAL_URL)
    .client(getUnsafeOkHttpClient().build())
    .addConverterFactory(GsonConverterFactory.create())
    .build();
    } catch (Exception e) {
    e.printStackTrace();
    }
    apiInterface = retrofit.create(ApiInterface.class);
    }
    return apiInterface;
    }
    }
    • Estoy intente utilizar el código, pero estoy recibiendo el siguiente error de nuevo.. «javax.net.ssl.SSLHandshakeException: java.de seguridad.cert.CertPathValidatorException: anclaje de Confianza para la certificación de la ruta no encontrada.» u puede ayudar en esto
    • A mí me funciona . Gracias u mucho.
  7. 4

    El mensaje de error que estaba recibiendo era similar, pero la razón era que el certificado autofirmado había expirado.
    Cuando el openssl cliente se intentó, me dio la razón, que se ha pasado por alto cuando estaba revisando el cuadro de diálogo certificado de firefox.

    Así que en general, si el certificado está en el almacén de claves y su «VÁLIDO», este error se apagará.

    • Si el certificado está caducado, no es válido de acuerdo a una serie de normas. Su autorización para el uso de una costumbre TrustManager y utilizar un conjunto diferente de criterios. Pero fuera de la caja, que es lo que tienen que trabajar.
  8. 3

    Tuve el mismo problema, mientras que la conexión de cliente Android para Kurento servidor.
    Kurento el uso del servidor de jks certificados, por lo que he tenido que convertir pem a ella.
    Como entrada para la conversión he utilizado cert.pem archivo y conducir a errores.
    Pero si el uso fullchain.pem en lugar de cert.pem – todo está bien.

  9. 2

    Tuve el mismo problema lo que me encontré fue que el certificado .archivo crt yo siempre falta un certificado intermedio. Así que le pregunté a todos .crt archivos de mi servidor de administración, a continuación, concatinated en orden inverso.

    Ex.
    1. De la raíz.crt
    2. Inter.crt
    3. myCrt.crt

    en windows me ejecutado
    copia Entre otras.crt + Root.crt newCertificate.crt

    (Aquí me ignora myCrt.crt)

    Entonces yo siempre newCertificate.crt archivo en código a través de inputstream.
    El trabajo realizado.

    • También hemos tenido el mismo problema. Certificado intermedio faltaba
  10. 2

    Yo sé que usted no tiene que confiar en todos los certificados, pero en mi caso he tenido problemas con algunos entornos de depuración donde teníamos los certificados auto-firmados y necesitaba una solución sucia.

    Todo lo que tenía que hacer era cambiar la inicialización de la sslContext

    mySSLContext.init(null, trustAllCerts, null); 

    donde trustAllCerts fue creado como este:

    private final TrustManager[] trustAllCerts= new TrustManager[] { new X509TrustManager() {
    public java.security.cert.X509Certificate[] getAcceptedIssuers() {
    return new java.security.cert.X509Certificate[]{};
    }
    public void checkClientTrusted(X509Certificate[] chain,
    String authType) throws CertificateException {
    }
    public void checkServerTrusted(X509Certificate[] chain,
    String authType) throws CertificateException {
    }
    } };

    La esperanza de que esto va a venir muy bien.

    • Que yo quería encontrar! Gracias
    • Tengo un error Hostname '192.168.0.16' was not verified. Estoy probando mi webapi a través de mi depurador (IIS Express) a nivel local. ¿Alguna idea de cómo solucionar este problema? Gracias 🙂
  11. 1

    El anclaje de Confianza error puede ocurrir por muchas razones. Para mí era simplemente que me estaba tratando de acceder https://example.com/ en lugar de https://www.example.com/.

    Así que puede que desee comprobar la Url antes de comenzar a construir su propio Administrador de Confianza (como hice yo).

  12. 0

    De pan de Jengibre por teléfonos, siempre me sale este error: Trust Anchor not found for Android SSL Connection, incluso si el programa de instalación para confiar en el certificado.

    Este es el código que uso en la Scala de idioma):

    object Security {
    private def createCtxSsl(ctx: Context) = {
    val cer = {
    val is = ctx.getAssets.open("mycertificate.crt")
    try
    CertificateFactory.getInstance("X.509").generateCertificate(is)
    finally
    is.close()
    }
    val key = KeyStore.getInstance(KeyStore.getDefaultType)
    key.load(null, null)
    key.setCertificateEntry("ca", cer)
    val tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm)
    tmf.init(key)
    val c = SSLContext.getInstance("TLS")
    c.init(null, tmf.getTrustManagers, null)
    c
    }
    def prepare(url: HttpURLConnection)(implicit ctx: Context) {
    url match {
    case https: HttpsURLConnection 
    val cSsl = ctxSsl match {
    case None 
    val res = createCtxSsl(ctx)
    ctxSsl = Some(res)
    res
    case Some(c)  c
    }
    https.setSSLSocketFactory(cSsl.getSocketFactory)
    case _ 
    }
    }
    def noSecurity(url: HttpURLConnection) {
    url match {
    case https: HttpsURLConnection 
    https.setHostnameVerifier(new HostnameVerifier {
    override def verify(hostname: String, session: SSLSession) = true
    })
    case _ 
    }
    }
    }

    y aquí está el código de conexión:

    def connect(securize: HttpURLConnection  Unit) {
    val conn = url.openConnection().asInstanceOf[HttpURLConnection]
    securize(conn)
    conn.connect();
    ....
    }
    try {
    connect(Security.prepare)
    } catch {
    case ex: SSLHandshakeException /*if ex.getMessage != null && ex.getMessage.contains("Trust anchor for certification path not found")*/ 
    connect(Security.noSecurity)
    }

    Básicamente, tengo que instalar a confiar en mi certificado personalizado. Si eso no funciona, entonces me deshabilitar la seguridad. Esta no es la mejor opción, sino la única opción que conozco con viejos y buggy teléfonos.

    Este código de ejemplo, se puede traducir fácilmente en Java.

  13. 0

    En mi caso esto sucedía después de la actualización a Android 8.0. El certificado auto-firmado Android fue creado para confiar en el uso de algoritmo de firma SHA1withRSA. El cambio a un nuevo cert, utilizando el algoritmo de firma SHA256withRSA se ha solucionado el problema.

  14. -1
    **Set proper alias name**
    CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509","BC");
    X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(derInputStream);
    String alias = cert.getSubjectX500Principal().getName();
    KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
    trustStore.load(null);
    trustStore.setCertificateEntry(alias, cert);

Dejar respuesta

Please enter your comment!
Please enter your name here