El certificado es de confianza para PC pero no para Android


82

Desde esta mañana, mi certificado ya no es confiable en Android y luego mi aplicación ya no puede conectarse:

 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 lo intento en Google Chrome (en PC), no hay problema y el certificado es confiable, pero si lo intento en el navegador Chrome en Android, me dice que el certificado no es confiable. ¿Que puedo hacer?


¿Se está comunicando con un servidor seguro, es decir, (Https)?
Mohsin Naeem

sí, de hecho, solo prueba el enlace, verás el certificado
Alexis

Respuestas:


93

Es posible que le falte un certificado intermedio en su archivo de certificado. Si ya ha visitado otro sitio web que tiene el mismo vendedor de certificados, el certificado intermedio se recuerda en su navegador. Esto podría no ser así, o mejor aún, no será el caso de todos los visitantes de su sitio web. Para solucionar un certificado intermedio faltante 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 es siempre su proveedor de certificados): http://support.godaddy.com/help/article/868/what-is-an-intermediate-certificate

Una vez tuve este problema de un certificado intermedio (con Commodo también) y tuve que combinar mi propio archivo de certificado con las CA intermedias para que funcionara. Una vez hecho esto, ya no se produjeron errores.

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

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

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 hacer esto en una terminal SSH es escribiendo:

cat domainfile intermediatefile rootfile > targetfile

Herramienta de prueba de certificados

Si encuentra más problemas o no está seguro de si el certificado es correcto, pruebe una herramienta en línea para verificar su certificado SSL. Por ejemplo: networking4all.com/en/ssl+certificates/quickscan

Soporte SNI para Android 2.2 y versiones inferiores

Tenga en cuenta que Android 2.2 (y probablemente más antiguo) no es compatible 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. Revise esta pregunta de SO sobre SNI para obtener más información sobre este tema.


+1, esto funcionó para mi problema con los dispositivos 2.3.X, ya que parecen tener un problema con el orden de verificación encadenada (soy bastante novato cuando se trata de certificados) y al tener este nuevo paquete con el orden correcto (a través de una combinación como sugirió @Luceos) funcionó de maravilla. Gracias
Armando

De nada, también lo usamos de forma regular. Especialmente porque valida más que un certificado intermedio. Feliz de poder ser de ayuda.
Luceos

el enlace para comodo está muerto
gfaceless

1
Gracias por la explicación. Tengo un certificado Thawte y tuve que iniciar sesión en su sitio web, hacer clic en "Ver información del pedido". El correo electrónico enviado contiene un enlace donde se puede descargar el certificado intermedio en "Certificados adicionales".
Guillaume Renoult

1
Esto funcionó para mi NAS OpenMediaVault y mi teléfono con Marshmallow. Edité el certificado en el servidor, agregué los certificados intermedios, lo guardé y reinicié la interfaz web, y Chrome en mi teléfono pasó de "emisor no confiable" a estar gordo y feliz con el certificado. ¡Gracias!
Doktor J

19

Tienes que crear un paquete crt, entonces estará bien. Recibirá tres archivos crt. ¡Úsalos todos! Si solo utilizó domain.crt, habrá una advertencia en Android pero no en la PC.

Estoy en nginx. Abrí domain_name.crt y luego abrí positivesslca2.crt, seleccioné todo y lo copié al final de domain_name.crt. Luego, abra AddTrustExternalCARoot.crt, copie al final de domain_name.crt nuevamente. Luego instale el nombre_dominio.crt

funciona bien.


Esta parece la solución que estoy buscando, pero todavía no me funciona. También estoy en nginx con un certificado de godaddy. godaddy tiene 3 certificados: dominio.crt, intermedio.crt y bundle.crt. ¿Sabes cuál es el orden correcto según tu respuesta? es decir, dominio> intermedio> paquete o dominio> paquete> intermedio? por alguna razón, ninguno funciona para mí.
isapir

Aparentemente bundle.crt es el [intermedio.crt + root.crt] concatenado de modo que parece ser el orden correcto. Pero todavía no puedo hacer que funcione. ¿Algunas ideas? Gracias.
isapir

No necesita la raíz, que ya está incluida en el sistema operativo. Solo necesitas la cadena intermedia. El pedido debe ser tuyo + intermedio.
dalore

9

Agregando esto aquí, ya que podría ayudar a alguien. Estaba teniendo problemas con Android mostrando la ventana emergente y el error de certificado no válido.

Tenemos un certificado de Validación Extendida de Comodo 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 así:

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

Luego usé ese archivo de paquete como mi ssl_certificate_keyen nginx. Eso es todo, funciona ahora.

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


1
Probé todos los demás pasos sugeridos. Esto funcionó para mí. ¡Gracias!
ericbae

1
Buen trabajo, he estado buscando en Google como loco y esto lo arregló.
Olafur Tryggvason

Gracias, y si alguien más está usando Namecheap, asegúrese de que esté en este formato: cat *yourdomainname*.crt *yourdomainname*.ca-bundle > cert_chain.crt
Harry

1

Con Comodo PositiveSSL hemos recibido 4 archivos.

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt
  • COMODORSADomainValidationSecureServerCA.crt
  • our_domain.crt

Cuando seguimos las instrucciones en el sitio de comodo, recibíamos un error de que a nuestro certificado le 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

1

Recientemente me encontré con este problema con el certificado Commodo que compré en ssls.com y tenía 3 archivos:

nombre-dominio.ca-paquete nombre-dominio.crt y nombre -dominio.p7b

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

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

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


1

Tuve el mismo problema y mi problema fue que el dispositivo no tenía la fecha y hora correctas. Una vez que arreglé que se confiaba en el certificado.


1

Tuve el mismo error porque no emití un certificado Let's Encrypt para www .my-domain.com, solo para my-domain.com

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


0

Encontré este mismo problema en Apache 2.2 cuando intentaba usar varias SSLCertificateChainFiledirectivas para cada certificado intermedio; en su lugar, necesitaba concatenar los tres en un solo archivo. Viniendo de GoDaddy, donde habían hecho esto por mí como un "paquete", este paso adicional era nuevo para mí, pero una relectura de la documentación de Apache lo hizo evidente.

Cabe señalar que esta directiva está obsoleta a partir de Apache 2.4.8 ya que ahora puede concatenar todos los intermedios con el certificado real.


0

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

En lugar de ponerse en contacto con el soporte de Comodo y obtener un archivo de paquete de CA, puede hacer lo siguiente:

Cuando obtiene su nuevo certificado SSL 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

Luego, copie el texto de cada archivo ".crt" y pegue los textos uno encima del otro en el campo "Paquete de autoridad de certificación (opcional)".

Después de eso, simplemente agregue el certificado SSL como de costumbre en el campo "Certificado" y haga clic en el botón "Autorrelleno por certificado" y presione "Instalar".


0

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

Necesitarás: 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;

0

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

A veces, obtiene un archivo .PEM con una cadena de certificados completa en su interior. El archivo puede tener este aspecto ...

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

Si elimina la private keysección completa , tendrá un .crt encadenado válido


0

Asegúrese de utilizar también su crt intermedio (archivo .crt con un paquete ... algunos proveedores también lo llaman paquete o certificado ca). luego en su ssl.conf,

SSLCertificateFile </path/for/actual/certificate>

SSLCACertificateFile </path/for/actual/intermediate_certificate>

luego reinicie su servidor web: ex para uso de apache:

sudo service httpd restart

-1

podría ser que le falte el certificado en su dispositivo.

intente mirar esta respuesta: ¿Cómo instalar un certificado CA confiable en un dispositivo Android? para ver cómo instalar la CA en su propio dispositivo.


Mi certificado es emitido por PositiveSSL CA / Comodo CA Limited y en mis credenciales de confianza en mi teléfono puedo ver 3 Comodo CA Limited (Autoridad de certificación AAA, Autoridad de certificación COMODO y Autoridad de certificación COMODO ECC)
Alexis

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.