Servicio al Cliente

clientes@chileguia.cl
Categorias

Notas sobre la protección de https para aplicaciones Android / Java

1. Puede evitar los certificados del sistema por completo.

¿Porqué querrías eso?

1) Los certificados instalados en el sistema operativo pueden incluir CA raíz como, China Internet Network Information Centeretc. (ver Settings -> Security -> Trusted credentials). Eso significa que esas CA pueden realizar ataques MiTM de forma silenciosa y ver / modificar solicitudes y respuestas (a menos que use Fijar Certificado).

El sistema operativo Android tiene más de 200 CA raíz instaladas, además, los fabricantes de dispositivos pueden agregar sus propios certificados. ¿Estás seguro de que quieres confiar en todos ellos? Por ejemplo, Lenovo puso certificados de CA raíz de terceros en sus computadoras portátiles e incluso filtraron claves privadas -> MiTM,jódete Lenovo)

2) En Android, los certificados de CA raíz se actualizan solo con las actualizaciones del sistema operativo Android.

Lo primero:> como desarrollador de aplicaciones, no puede actualizar los certificados del sistema. Esto no es muy crítico porque generalmente tienen un período de vencimiento de ~ 20 años. Pero ->

Lo segundo:> Si algunas de las CA raíz serán "pirateadas" y sus claves privadas serán robadas, pueden usarse para MiTM globales / personales y no estará protegido de ellas (a menos que use Fijar Certificado).

Ok, ¿cómo puedo evitar los certificados del sistema y haber comprobado las conexiones https a servicios de terceros como Amazon S3 al mismo tiempo?

Google te ayuda aquí. Tienen el Google Internet Authority G2proyecto https://pki.google.com . Mantienen un conjunto de autoridades de certificación "buenas" que puede agrupar con su aplicación y controlar en qué CA confiará y cuáles no. Además, eso significa que incluso en sistemas operativos muy antiguos podrá tener un conjunto actualizado de CA y asegurar la conexión correctamente.

2. Piense en la fijación de certificados

En resumen: la fijación de certificados es cuando no solo confía en algunas CA sino que también tiene una regla (s) que verifica que la cadena de certificados utilizada para conectarse a algún host contenga el certificado que espera que contenga.

Debe comprender el orden de comprobación de la conexión de socket segura:

  1. Cosas del zócalo
  2. La cadena de certificados utilizada en el apretón de manos va a TrustManagerdecir que confía en esa cadena o no. "Confianza" significa que todos los certificados en la cadena fueron producidos por CA confiables conocidas o que esos certificados se instalaron directamente en el sistema operativo (puede hacerlo manualmente).
  3. Si y solo si los certificados de la cadena eran confiables TrustManager, pueden verificarse mediante un Certificate Pinningpaso opcional .

Como puede ver, sin un certificado que fije, se aceptarán todos los certificados producidos por CA "confiables", como el certificado de China Internet Network Information Center-> posible MiTM (pero no por el hombre "regular", por supuesto).

Ejemplo: desea evitar MiTM de China Internet Network Information Center/ otras CA y tiene un certificado SSL / TLS regular hecho por otras CA confiables, por ejemplo GeoTrust.

Se puede añadir una regla: certificatePinner.add("api.myhost.com", "sha256/fingerPrintOfTheCertificateThatYouTrust").

Esto asegurará que al menos un certificado en la cadena sea el que confía y la única forma de MiTM será robar la clave privada de ese certificado. Por lo general, es imposible (si es su propio certificado) o es mucho más difícil falsificar la cadena e incluir un certificado de confianza.

Tenga en cuenta que puede anclar múltiples huellas digitales en un dominio -> aumentar la seguridad.

Ahora, cuando sepa cómo funciona la fijación de certificados, debe comprender que no solo aumenta la seguridad, sino que también puede frenar las versiones antiguas de su aplicación.

Porque si usted fija contra el certificado que ha caducado y fue eliminado / reemplazado de la conexión de la cadena no se establecerá.

NO PINQUE CERTIFICADOS SIN HABLAR CON LOS ADMINISTRADORES / DEVOPS DE SU FONDO .

La mayoría de las aplicaciones no anclan los certificados solo porque no vale la pena o porque piensan que no vale la pena.

Pero para las aplicaciones que transfieren información crítica altamente confidencial / persona / negocio (clientes bancarios, por ejemplo) es mejor romper la conexión y obligar al usuario a actualizar la aplicación en lugar de permitir posibles problemas.

Decide cuidadosamente qué certificado (s) de la cadena puedes anclar. Nuevamente: HABLE CON LOS ADMINISTRADORES / DEVOLUCIONES DE SU FONDO PRIMERO.

Tenga en cuenta que puede preparar la aplicación para nuevos certificados antes de cambiar realmente a ellos en el lado del servidor, puede hacerlo mucho tiempo antes de la actualización real, simplemente agregue la huella digital del nuevo certificado CertificatePinnery libere la actualización de la aplicación.

3. ¿Qué biblioteca deberías usar para HTTPS?

1) No lo use HttpUrlConnectionni lo Apache HTTP Clientincluya especialmente en JDK. La razón de esto es porque se quedará atascado en la versión de las clases que se incluyen en JDK -> OS. De vez en cuando, los investigadores encuentran errores en dichas bibliotecas y no podrá solucionarlos actualizando la biblioteca porque viven en JDK y dependen de las actualizaciones del sistema operativo.

2) Uso OkHttp.

En primer lugar, se actualiza regularmente (incluidas las correcciones de seguridad) y puede actualizarlo sin depender de las actualizaciones del sistema operativo.

En segundo lugar, tiene todo lo que necesita para proteger las conexiones https, incluida la API, para configurarla SSLSocketFactorycon sus propios certificados de confianza y CertificatePinnerAPI (que admite comodines por cierto).

 

Últimos de Foro (0)
Publicidad
Chileguía

El directorio en línea más completo para encontrar detalles de negocios, contactos, productos, servicios y precios.

info@chileguia.cl

© Chileguia. Todos los derechos reservados.
Implementado por Chileguia