El certificado es confiable por PC pero no por Android

Desde esta mañana, mi certificado ya no es de confianza en Android y luego mi aplicación ya no se puede conectar:

Catch exception while startHandshake: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. return an invalid session with invalid cipher suite of SSL_NULL_WITH_NULL_NULL javax.net.ssl.SSLPeerUnverifiedException: No peer certificate at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:137) at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93) at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381) at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165) at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:591) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:807) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:781) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:770) 

Si intento en Google Chrome (en el PC), no hay problema y el certificado es de confianza, pero si lo intento en el navegador Chrome en Android me dice que el certificado no es de confianza. ¿Que puedo hacer?

    14 Solutions collect form web for “El certificado es confiable por PC pero no por Android”

    Puede que le falte un certificado intermedio en su archivo cert. Si ya ha visitado otro sitio web que tiene el mismo vendedor de certificados, el certificado intermedio se recuerda en su navegador. Esto no podría – o incluso mejor – no será el caso con cada visitante a su sitio web. Para resolver un certificado intermedio que falta en la conexión SSL, deberá agregar el certificado intermedio a su propio archivo de certificado.

    GoDaddy tiene información sobre los certificados intermedios (pero la mejor fuente siempre es su proveedor de certificados): http://support.godaddy.com/help/article/868/what-is-an-intermediate-certificate

    Una vez tuve esta edición de un cert intermedio (con Commodo también) y tuve que combinar mi propio archivo cert con el CA intermedio para trabajar. Una vez hecho no se produjeron más errores.

    Instrucciones de instalación por servidor web de Godaddy: http://support.godaddy.com/help/article/5346/installing-an-ssl-server-instructions?locale=es

    Y aquí está una lista de las guías de instalación más comunes de Commodo: https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make- My-own-bundle-archivo-de-crt-archivos

    Dependiendo del servidor web que esté utilizando, deberá especificar todos los certificados (certificado de dominio, intermedio y raíz) o combinarlos en uno (por ejemplo, para Nginx) en el orden:

    1. Certificado de dominio
    2. Certificado intermedio
    3. Certificado raíz

    Una forma fácil de hacerlo en un terminal SSH es escribiendo:

     cat domainfile intermediatefile rootfile > targetfile 

    Herramienta de prueba de certificados

    Si tiene más problemas o si no está seguro de si el certificado es correcto, pruebe una herramienta en línea para verificar su certificado SSL. Por ejemplo: https://www.networking4all.com/en/support/tools/site+check/

    Soporte SNI para Android 2.2 y inferior

    Tenga en cuenta que android 2.2 (y probablemente mayor) no son compatibles con SNI, lo que permite que varios certificados SSL para diferentes nombres de host funcionen sin problemas en una sola dirección IP. Gracias a @technyquist por proporcionar esa información. Por favor, revise esta pregunta sobre SNI para obtener más información sobre este problema.

    Tienes que crear un paquete CRT, entonces estará bien. Usted recibirá tres archivos crt. ¡Utilícelos todos! Si sólo usó el domain.crt entonces habrá advertencia en android pero no en PC.

    Estoy en nginx. He abierto domain_name.crt y luego abierto positivesslca2.crt, seleccionar todo y copiar al final de domain_name.crt. A continuación, abra AddTrustExternalCARoot.crt, copie al final de domain_name.crt de nuevo. A continuación, instale domain_name.crt

    Funciona bien.

    Añadir esto aquí, ya que podría ayudar a alguien. Tenía problemas con Android mostrando el error de certificado emergente y no válido.

    Tenemos un certificado Comodo Extended Validation y recibimos el archivo zip que contenía 4 archivos:

    • AddTrustExternalCARoot.crt
    • COMODORSAAddTrustCA.crt
    • COMODORSAExtendedValidationSecureServerCA.crt
    • Www_mydomain_com.crt

    Los concatené todos juntos en una línea como así:

    cat www_mydomain_com.crt COMODORSAExtendedValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >www.mydomain.com.ev-ssl-bundle.crt

    Entonces utilicé ese archivo de paquete como mi ssl_certificate_key en nginx. Eso es todo, funciona ahora.

    Inspirado en esta esencia: https://gist.github.com/ipedrazas/6d6c31144636d586dcc3

    Con Comodo PositiveSSL hemos recibido 4 archivos.

    • AddTrustExternalCARoot.crt
    • COMODORSAAddTrustCA.crt
    • COMODORESADomainValidationSecureServerCA.crt
    • Nuestro_dominio.crt

    Cuando seguimos las instrucciones en el sitio de comodo – obtendríamos un error que nuestro certificado faltaba un archivo de certificado intermedio.

    Básicamente la sintaxis es

     cat our_domain.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt > domain-ssl_bundle.crt 

    He ren recientemente en este problema con Commodo cert compré en ssls.com y he tenido 3 archivos:

    Domain-name.ca-bundle nombre-de-dominio.crt y nombre -de-dominio.p7b

    He tenido que configurarlo en Nginx y este es el comando que ejecuté:

     cat domain-name.ca-bundle domain-name.crt > commodo-ssl-bundle.crt 

    Entonces utilicé commodo-ssl-bundle.crt dentro del archivo de configuración de Nginx y funciona como un encanto.

    Tuve el mismo problema y mi problema era que el dispositivo no tenía la fecha y la hora correctas. Una vez que fijé que el certificado está siendo confiado.

    Encontré este mismo problema bajo Apache 2.2 cuando intentaba utilizar varias directivas SSLCertificateChainFile para cada cert intermedio; En su lugar necesitaba concatenar los tres en un solo archivo. Viniendo de GoDaddy donde habían hecho esto para mí como un "paquete" este paso adicional era nuevo para mí, pero una relectura de la documentación de Apache hizo esto aparente.

    Vale la pena señalar, esta directiva está obsoleto como de Apache 2.4.8 ya que ahora se puede concatenar todos los intermedios con el cert real.

    Espero no ser demasiado tarde, esta solución aquí trabajó para mí, estoy usando COMODO SSL, las soluciones anteriores parecen inválidas en el tiempo, mi sitio web lifetanstic.co.ke

    En lugar de ponerse en contacto con Comodo Support y obtener un archivo de paquete de CA Puede hacer lo siguiente:

    Cuando usted recibe su certificado SSL nuevo de Comodo (por correo) tienen un archivo zip adjunto. Necesita descomprimir el archivo zip y abrir los siguientes archivos en un editor de texto como el Bloc de notas:

     AddTrustExternalCARoot.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt 

    A continuación, copie el texto de cada archivo ".crt" y pegue los textos uno encima del otro en el campo "Certificate Authority Bundle (opcional)".

    Luego agregue el certificado SSL como de costumbre en el campo "Certificado" y haga clic en el botón "Autofil por certificado" y pulse "Instalar".

    Con los certs de Godaddy lo más probable es que tenga un domain.key , gd_bundle_something.crt y (cadena alfanumérica aleatoria) 4923hg4k23jh4.crt

    Tendrás que: cat gd_bundle_something.crt >> 4923hg4k23jh4.crt

    Y luego, en nginx, usará

     ssl on; ssl_certificate /etc/ssl/certs/4923hg4k23jh4.crt; ssl_certificate_key /etc/ssl/certs/domain.key; 

    Yo tuve el mismo problema. Otra forma de generar el archivo .crt correcto es así:

    A veces se obtiene un archivo .PEM con toda una cadena de certificados dentro. El archivo puede parecerse a esto ….

     -----BEGIN RSA PRIVATE KEY----- blablablabase64private... -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- blablablabase64CRT1... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- blablablabase64CRT2... -----END CERTIFICATE----- ... 

    Si quita toda private key sección de private key , tendrá un encadenado válido .crt

    Tuve el mismo error porque no emitió un certificado de Let's Encrypt para el www .my-domain.com, solo para my-dominio.com

    Emisión también para el www. Y configurar el vhost para cargar los certificados para www .my-domain.com antes de redirigir a https://my-domain.com hizo el truco.

    Asegúrese de que también utilice su CRT intermedio (archivo .crt con un paquete. Algunos proveedores también lo llaman paquete o certificado CA). Entonces en su ssl.conf,

     SSLCertificateFile </path/for/actual/certificate> SSLCACertificateFile </path/for/actual/intermediate_certificate> 

    Luego reinicie su servidor web: ex para apache use:

     sudo service httpd restart 

    Podría ser que le falta el certificado en su dispositivo.

    Trate de mirar esta respuesta: ¿Cómo instalar certificado de CA de confianza en el dispositivo Android? Para ver cómo instalar la CA en su propio dispositivo.

    Tuve un problema similar y escribí un artículo detallado al respecto. Si alguien tiene el mismo problema, no dude en leer mi artículo.

    https://developer-blog.net/administration/ssl-zertifikat-installieren/

    Es una descripción detallada del problema en alemán.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.