¿Qué usamos para la configuración de seguridad de red de Android N para un certificado auto-firmado?

Estoy tratando de probar todos los aspectos de la capacidad de configuración de seguridad de red de la N Developer Preview. Tengo la mayor parte del trabajo, pero estoy perplejo por el escenario de certificado autofirmado.

De acuerdo con los documentos , Android N debe estar contento con un archivo PEM o DER, como lo es para otros escenarios de validación de certificados. Sin embargo, no trabajo con los certificados auto-firmados mucho, y mis intentos para conseguir este funcionando funcionan en excepciones de la validación de la trayectoria del certificado.

Para la prueba, estoy usando thin como el servidor, corriendo en mi máquina de desarrollo, accesible por un emulador de N. El certificado autofirmado funciona para los navegadores de mi máquina de desarrollo, y si cambio a la ejecución de thin sans SSL, las aplicaciones pueden llegar al servidor muy bien. Por lo tanto, no es un problema de conectividad.

He creado el certificado autofirmado usando las instrucciones de este sitio :

 sudo openssl genrsa -out "/etc/[webserver]/ssl/example.key" 2048 sudo openssl req -new -key "/etc/[webserver]/ssl/example.key" \ -out "/etc/[webserver]/ssl/example.csr" sudo openssl x509 -req -days 365 -in "/etc/[webserver]/ssl/example.csr" \ -signkey "/etc/[webserver]/ssl/example.key" \ -out "/etc/[webserver]/ssl/example.crt" 

De acuerdo con esta respuesta de desbordamiento de pila , el archivo example.crt es un archivo PEM. En otras partes, veo instrucciones para crear un archivo "PEM combinado" . Sin embargo, he probado ambos, sin suerte.

En cuanto a la configuración de seguridad de red, he intentado tanto <domain-config> como <debug-overrides> . El último aspecto es:

 <?xml version="1.0" encoding="utf-8"?> <network-security-config> <debug-overrides> <trust-anchors> <certificates src="@raw/selfsigned"/> </trust-anchors> </debug-overrides> </network-security-config> 

Pero, obtengo el error de validación en cualquier caso.

¿Qué debemos poner exactamente como un archivo PEM o DER, como un recurso sin procesar, que hace que esto funcione?

Esto parece estar funcionando en N Developer Preview 2, utilizando el example.crt generado por los scripts de openssl mostrados en la pregunta. Por el momento, voy a asumir que hubo un cambio en N Developer Preview 2 en comparación con N Developer Preview 1 que explica el cambio.

  • Cómo resolver 'no puede encontrar una ruta de certificación válida a la meta solicitada' en Android Studio 2.3.2
  • Android - Multiple onReceivedHttpAuthRequest con WebView
  • Certificado de pinning no funciona con OkHttp en Android
  • Soporte para WebView de Android onReceivedClientCertRequest
  • Cordova App en Android usando SSL enviando multipart / form-data causes Error de la aplicación de rack: # <EOFError: cuerpo de contenido incorrecto>
  • SSLHandshakeException: Handshake falló en Android N / 7.0
  • Error de lectura: error en la biblioteca SSL, generalmente un error de protocolo
  • Cómo hacer la reanudación de sesión SSL en Android
  • HttpsUrlConnection: Ancla de confianza para ruta de certificación no encontrada en 2.3
  • OkHttp con pinzado de certificado
  • DownloadManager: entiende la política de reintentos y los códigos de error
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.