Pregunta sobre x509certificate, ssl, ssl-certificate, android – Error: Nombre no mecanizado para certificados SSL autofirmados en Android

2

Estoy tratando de acceder a mi aplicación web protegida por SSL desde un Android 2.3.4 usando el navegador integrado.

El certificado del servidor es un certificado autofirmado que creé usandoMAKECERT e instalado en el servidor. Cuando intento acceder a la página, recibo un mensaje de error del navegador que indicaThe name of the site does not match name on the certificate.

He verificado y la dirección del servidor es exactamente el nombre común de mi certificado (en realidad es solo una dirección IP).

El mensaje no aparece cuando intento acceder, en el dispositivo Android, a otros sitios web protegidos con certificados no autofirmados.

Si accedo a la misma página utilizando IE o Chrome en un escritorio, aparte del mensaje de autoridad de firma, no recibo advertencias y, una vez que instalé el certificado en la CA raíz de confianza, el navegador lo acepta sin problemas.

¿Debo entender que el mensaje es en realidad un rechazo del certificado autofirmado por Android?

Estoy un poco confundido por esto.

Intenté instalar el certificado en el Almacenamiento de credenciales, pero eso no mejora la situación. y ahora no tengo ni idea de lo que podría intentar a continuación.

Las preguntas son: ¿Hay alguna cosa en particular que deba seguir para crear un certificado autofirmado aceptable para Android? ¿Alguien ha logrado que los certificados autofirmados sean aceptados por Android sin esta advertencia?

¿Qué más podría intentar?

-ACTUALIZAR- La respuesta de Bruno me guió en la dirección correcta, así que logré dar un paso adelante: rehice el certificado agregando SAN (tuve que abandonarMAKECERT paraOpenSSLsiguiendo ainstrucciones de Andy Arismendi).

Ahora el mensaje se ha ido, pero estoy bloqueado en el problema de 'certificación de autoridad no confiable' ya discutidoen esta publicación SO, por lo que todavía estoy trabajando para encontrar una solución definitiva a mi problema: no aparece ninguna advertencia en el navegador de Android.

Tu respuesta

3   la respuesta
4

ún de mi certificado (en realidad es solo una dirección IP).

El verificador del nombre de host de Android es más estrictamente compatible conRFC 2818 que algunos navegadores De acuerdo con la especificación, si se usa una dirección IP, debe estar en una entrada de Nombre alternativo del sujeto dedirección IP tipo: no en una entrada SAN de tipo DNS o en la CN:

Si una extensión subjectAltName de tipo dNSName está presente, DEBE usarse como la identidad. De lo contrario, DEBE usarse el campo Nombre común (más específico) en el campo Asunto del certificado. Aunque el uso del Nombre común es una práctica existente, está en desuso y se recomienda a las Autoridades de certificación que usen el nombreDNS.

[...]

En algunos casos, el URI se especifica como una dirección IP en lugar de un nombre de host. En este caso, iPAddress subjectAltName debe estar presente en el certificado y debe coincidir exactamente con la IP en el URI.

Lo más fácil sería usar un nombre de host. (El uso de direcciones IP en certificados nunca es realmente práctico). Alternativamente, genere un certificado con una entrada de dirección IP SAN. (Usted puede estar interesado enesta.)

sabes que esta siendo usado porcom.android.browser? ¿Es el RFC anterior o los documentos de los foros de CA / Browser? (Requisitos básicos para la emisión y gestión de certificados de confianza pública yPautas para el certificado SSL con EV) jww
@noloader, los documentos CA / Browser y RFC 2818/6125 no se excluyen mutuamente. (La documentación de CA / Browser es más acerca de los procedimientos para emitir y verificar un certificado, mientras que esta parte de RFC 2818 está más limitada a la coincidencia de nombres, desde un punto de vista técnico). AFAIK, el requisito de línea de base de CA / navegador simplemente hace que la SAN sea más estrictamente necesaria para los certificados EV. No estoy seguro decom.android.browser, pero probablemente también acepte certificados que no sean de EV (en cuyo caso no tienen que cumplir con las especificaciones de CA / Browser), aunque los certificados de EV verifican que ciertamente deben cumplir (y, por lo tanto, tienen una SAN). Bruno
0

tiva a mi problema: no aparece ninguna advertencia en el navegador de Android

Nikolay Elenkov le explicó por qué no puede guardar un certificado en la tienda de confianza de Android. Eso ha cambiado recientemente, pero no ayuda con los clientes de Android más antiguos. Para una breve historia de Keychain y Keystore de Android, vea¿Hay algún almacenamiento de certificados del sistema en Android? (Se refiere a dos posts de Nikolay).

Debido a que está trabajando en el navegador de Android, necesita usar una CA que ya esté presente en la tienda de Android. Para obtener un certificado de servidor de una CA que ya es de confianza, intenteStartCom. StartCom ofrece certificados de clase 1 gratuitos y su raíz es confiable en la mayoría de los navegadores móviles y de escritorio. (Tenga en cuenta que cobran por la revocación, si es necesario).

Para completar, si escribiera el cliente usted mismo, entonces proporcionaría unaX509TrustManager y anularcheckServerTrusted para aceptar su certificado. No requeriría ninguna interacción con un almacén de claves, llavero o CA externas. Pero no tienes esa opción porque no escribiste el navegador.

1

el almacenamiento de credenciales en Android 2.x es solo para las aplicaciones VPN y WiFi, el navegador no lo ve. No puede instalar su propio certificado en el almacén de certificados de confianza (a menos que tenga un dispositivo rooteado).

¿Está nuestra aplicación web en una dirección IP pública o local a la que está accediendo a través de WiFi? Es posible que desee ver la salida logcat, puede haber algunas advertencias que le darán una pista allí. También intente desde otro dispositivo y / o el emulador (versión diferente de Android si es posible) y compare mensajes / comportamiento.

Preguntas relacionadas