2011-05-17 16 views
6

Tenemos una aplicación de iOS que interactúa con varios servicios web en el back-end. El back-end, sin embargo, quiere validar que la solicitud provenga de nuestra aplicación iOS válida y no de un ataque de repetición o un ataque de "hombre en el medio". Finalmente vamos a hacer que todas nuestras llamadas cambien a https. Sin embargo, ¿hay alguna forma en que el servidor pueda validar que la solicitud proviene de nuestra aplicación legítima? Estábamos pensando en utilizar el lenguaje criptográfico con cada solicitud, pero seguiría siendo propenso al ataque de "hombre en el medio". ¿Hay algún intercambio de certificados que se pueda usar entre la aplicación de iOS y el servidor?Validar una aplicación de iOS

Respuesta

3

¿qué ocurre con el uso de un esquema de clave privada/pública para que la aplicación iOS pueda firmar cada solicitud que envía?

si esquema de clave privada/pública puede sonar aterrador, la misma idea de la "firma" sus peticiones se pueden implementar fácilmente por su hash criptográfico nonce utilizando sha1, sha2 u otros algoritmos hash criptográficas. esto sería bastante fácil de implementar (la implementación está disponible), rápido y garantizaría un mayor nivel de seguridad.

1

Yo sugeriría utilizar OAuth. Es bien conocido y entendido y bastante seguro, y en el caso de que alguien obtenga su token, puede emitir uno nuevo con una actualización de la aplicación y revocar el anterior.

3

TLS y SSL admiten client authentication mediante certificados. NSStream podría ser compatible con la autenticación del lado del cliente, pero no he podido encontrar la manera de hacerlo sin dejar de utilizar OpenSSL para la implementación real.

Adición:
ASIHTTPRequest apoya client certificates desde la versión 1.8, por lo que sin problemas en su aplicación.

+0

Implementé (probablemente de manera medio rota) esto para una escuela [proyecto] (https: // github.com/paxswill/SecureGateway) el último semestre. Las principales partes de interés serían [PXConnection] (https://github.com/paxswill/SecureGateway/blob/master/SStore/Source/PXConnection.h) y [PXClient] (https://github.com/paxswill) /SecureGateway/blob/master/AppGate/Source/PXClient.m) clases. –

1

Este es un problema general de http, no solo un problema de iOS. De hecho, es el problema que https está diseñado para resolver, o al menos mitigar. Puede firmar la solicitud, usar HMAC para autenticar el mensaje, usar la autenticación resumida, y demás, pero siempre que use http, un ataque de hombre en el medio no se puede detectar fácilmente. Dedique su tiempo a moverse a https tan rápido como pueda.

0

Este problema no es posible de resolver del todo. Cualquier cosa que ponga en su esquema se puede romper rompiendo el teléfono y ejecutando el cliente en un depurador. Por supuesto, eso no significa que no pueda hacer que sea más difícil suplantar a su cliente usando certificados de clientes y otras cosas, y debería hacerlo. Pero si, por ejemplo, la seguridad de las transacciones financieras depende de que su aplicación no sea falsificable, eso sería malo ...

Cuestiones relacionadas