alexis
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 pruebo en Google Chrome (en PC), no hay problema y el certificado es de confianza, pero si pruebo en el navegador Chrome en Android, me dice que el certificado no es de confianza. ¿Que puedo hacer?
Luceos
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 con todos los visitantes de su sitio web. Para resolver la falta de un certificado intermedio 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/que-es-un-certificado-intermedio
Una vez tuve este problema de un certificado intermedio (también con Commodo) y tuve que combinar mi propio archivo de certificado con las CA intermedias para que funcionara. Una vez hecho, 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 Commodo:
https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make-my-own-bundle-file-from-crt-files
Según el 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:
- certificado de dominio
- certificado intermedio
- certificado raíz
Una manera fácil de hacer esto en una terminal SSH es escribiendo:
cat domainfile intermediatefile rootfile > targetfile
Herramienta de prueba de certificado
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 anteriores
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 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 la verificación encadenada (soy bastante novato cuando se trata de certificados) y al tener este nuevo paquete con el orden correcto (mediante una combinación como sugirió @Luceos) funcionó a las mil maravillas. Gracias
– Armando
16 de enero de 2014 a las 17:06
-
De nada, también lo usamos regularmente. Sobre todo porque valida algo más que un certificado intermedio. Feliz de haber podido ser de ayuda.
– Luceos
23 de septiembre de 2014 a las 7:20
-
el link de comodo esta caido
– gsin rostro
30 de junio de 2015 a las 8:24
-
Gracias por la explicación. Tengo un certificado de 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
23 de noviembre de 2015 a las 6:14
-
Esto funcionó para mi OpenMediaVault NAS 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 ser “emisor no confiable” a estar satisfecho con el certificado. ¡Gracias!
– Doctor J
8 de abril de 2016 a las 4:21
dallas
Tienes que crear un paquete crt, entonces estará bien. Recibirá tres archivos crt. ¡Úsalos todos! Si solo usó el dominio.crt, habrá una advertencia en Android pero no en la PC.
Estoy en nginx. Abrí nombre_dominio.crt y luego abrí positivesslca2.crt, seleccioné todo y copié hasta el final de nombre_dominio.crt. Luego abra AddTrustExternalCARoot.crt, cópielo al final de nombre_dominio.crt nuevamente. Luego instale el dominio_name.crt
funciona bien
-
Esta parece ser la solución que estoy buscando, pero todavía no funciona para mí. También estoy en nginx con un certificado de Godaddy. Godaddy tiene 3 certificados: dominio.crt, intermedio.crt y paquete.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 de los dos funciona para mí.
– isapir
6 de enero de 2014 a las 8:13
-
Aparentemente bundle.crt es el [intermediate.crt + root.crt] concatenados para que parezca ser el orden correcto. Pero todavía no puedo hacer que funcione. ¿Algunas ideas? Gracias.
– isapir
6 de enero de 2014 a las 9:18
-
No necesita la raíz, ya está incluida en el sistema operativo. Solo necesitas la cadena intermedia. El pedido debe ser tuyo + intermedio.
– valentía
20 de agosto de 2014 a las 10:49
Agregar esto aquí ya que podría ayudar a alguien. Estaba teniendo problemas con Android que mostraba 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_midominio_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_key
en nginx. Eso es todo, funciona ahora.
Inspirado en esta esencia: https://gist.github.com/ipedrazas/6d6c31144636d586dcc3
-
He intentado todos los otros pasos sugeridos. Esto funcionó para mí. ¡Gracias!
– ericbae
12 de agosto de 2015 a las 0:01
-
Buen trabajo, estuve buscando en Google como loco y esto lo arregló.
–Olafur Tryggvason
17/09/2015 a las 17:13
-
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
7 oct 2019 a las 11:36
Tuve el mismo problema y mi problema era que el dispositivo no tenía la fecha y la hora correctas. Una vez que arreglé que el certificado es de confianza.
Con Comodo PositiveSSL hemos recibido 4 archivos.
- AddTrustExternalCARoot.crt
- COMODORSAAddTrustCA.crt
- COMODORSADomainValidationSecureServerCA.crt
- nuestro_dominio.crt
Cuando seguíamos 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
somecallitblues
Recientemente me encontré con este problema con el certificado de Commodo que compré en ssls.com y tuve 3 archivos:
nombre-de-dominio.ca-paquete nombre-de-dominio.crt y nombre-de-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 de maravilla.
Adrián Onú
Tuve el mismo error porque no emití un certificado de Let’s Encrypt para el www.mi-dominio.com, solo para mi-dominio.com
Emitiendo también para el www. y configurar el host virtual para cargar certificados para www.mi-dominio.com antes de redirigir a https://mi-dominio.com Hizo el truco.
¿Se está comunicando con un servidor seguro, es decir (Https)?
– Mohsin Naeem
5 de julio de 2012 a las 8:16
sí, prueba el enlace, verás el certificado
– alexis
5 de julio de 2012 a las 8:19