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?
android
ssl-certificate
Alexis
fuente
fuente
Respuestas:
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:
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.
fuente
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.
fuente
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:
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 por esta esencia: https://gist.github.com/ipedrazas/6d6c31144636d586dcc3
fuente
cat *yourdomainname*.crt *yourdomainname*.ca-bundle > cert_chain.crt
Con Comodo PositiveSSL hemos recibido 4 archivos.
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
fuente
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.
fuente
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.
fuente
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.
fuente
Encontré este mismo problema en Apache 2.2 cuando intentaba usar varias
SSLCertificateChainFile
directivas 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.
fuente
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".
fuente
Con los certificados de Godaddy, lo más probable es que tenga un
domain.key
,gd_bundle_something.crt
y (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;
fuente
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 key
sección completa , tendrá un .crt encadenado válidofuente
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
fuente
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.
fuente
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 idioma alemán.
fuente