Estoy desarrollando una aplicación para Android que envía algunas solicitudes HTTPS a nuestro propio servidor web (Linux, Nginx, SSL zertificate de "Let's Encrypt").
Las solicitudes funcionaron bien en mis dispositivos de prueba (Android 4.2.2 & Android 6.0.1), pero en otro dispositivo (5.1.1) la solicitud arrojó la Excepción:
No se puede verificar el nombre de host [mi_dominio]
Mirando el certificado en mi navegador, parece funcionar bien, usando la siguiente conexión:
TLS 1.2 AES_128_GCM ECDHE_RSA
Después de buscar ayuda en la web, finalmente intenté aplicar un SSLSocketFactory personalizado, que obliga al cliente a usar el Cipher Suite TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (que ha sido utilizado por Mis otros dispositivos de prueba, en los que funcionó la solicitud).
En pocas palabras: la solicitud luego funcionó en cualquier dispositivo, lo que indica que es culpa del cliente que la conexión no haya sido exitosa.
Así que ahora a mis preguntas:
-
¿Por qué la verificación SSL funciona en algunos dispositivos Android, pero en otros no?
-
¿Por qué la excepción dice que nombre de host no se pudo verificar , mientras que el certificado es válido y el nombre de host indicado en el certificado es el correcto?
-
¿Es malo unir las solicitudes a un conjunto de cifrado específico? (Mirando esas listas , el conjunto de cifrado dado debe estar disponible en todos los necesarios Dispositivos Android (4.1.0 y superior))
Soy bastante nuevo en SSL y espero cualquier respuesta que pueda ayudarme a entender esto.