2009-10-13 16 views
8

Estoy escribiendo una aplicación para iPhone que necesita enviar pequeños bits de información (dos cadenas de menos de 128 caracteres a la vez, y esto no ocurre con demasiada frecuencia) a un servidor cuando los usuarios interactúan con él. Me gustaría que esta información se mantenga confidencial, por lo que estoy pensando en algún tipo de cifrado o conexión segura sería necesaria.Comunicación segura entre el servidor django y la aplicación iphone

Mi pregunta es sobre el lado del servidor de las cosas. El servidor con el que se debe comunicar la aplicación iPhone está escrito en django y se está ejecutando en lighttpd. Cuál es la manera más apropiada (o cuál es una forma estándar) de hacer esto. Estaba pensando en https, que sé en el iPhone que puedo usar ASIHTTPRequest para hacer una solicitud POST, pero no sé lo que se requiere en el lado del servidor. ¿Necesito un certificado? ¿Cómo se cifran/aseguran los datos? ¿Hay algún módulo django para ayudar con esto? ¿Tengo que hacer algo para configurar lighttpd?

¿Algo así como xml-rpc o json-rpc sería más simple? ¿Es posible asegurar tal comunicación? ¿A qué nivel ocurriría eso?

Cualquier ayuda sería muy apreciada.

Respuesta

3

El uso de xml-rpc o json-rpc es solo un medio para encapsular sus datos en un formato que es fácil de transportar. Su aplicación de iPhone puede transformar los datos de Objective C usando uno de esos formatos y su aplicación de servidor Django puede transformar los datos nuevamente en objetos de Python.

Ninguno de estos tiene nada que ver con la seguridad.

La creación de una conexión HTTPS (SSL) encripta todas las comunicaciones entre el cliente (iPhone) y el servidor (Django). Necesitará obtener un certificado para el lado del servidor. Esto indica al cliente que el servidor es quien dice ser. La siguiente línea de investigación en esta ruta debe ser acerca de cómo configurar lighttpd para manejar el tráfico SSL. Una vez que lighttpd negocie la comunicación SSL, su aplicación Django funcionará como lo hace para el tráfico no seguro.

Esta es su mejor opción.

Si, por alguna razón, no desea utilizar SSL, entonces podría encontrar fuertes bibliotecas de cifrado para ambos extremos de la comunicación. La aplicación de iPhone podría cifrar los datos, enviarlos a través de una conexión HTTP y la aplicación Django podría descifrarlos. Por ejemplo, la biblioteca de Python pycrypto implementa cifrados fuertes como AES y Blowfish. Es posible que pueda encontrar una implementación de uno de estos sistemas de cifrado escritos en el Objetivo C.

¿Notó que esto se está volviendo cada vez más complejo?

Vaya con SSL. Es la forma en que se realiza la seguridad para la comunicación basada en HTTP.

1

Hmm, parece que esto podría ser lo que buscas, ¿lo has visto?

Setting up SSL for Lighttpd/Django

Si leo ese derecho, que la configuración permite al servidor para responder a https y peticiones http (?) Entonces, si todo tu aplicación no va a ser https hay esta SSL Middleware para ayudar a configurar algunos caminos como ssl y otros no.

1

Si usa https (SSL) en el lado del servidor, no debería importar si usa XML-RPC o JSON-RPC. Todos los datos que transfiera serán encriptados y seguros.

Solo puedo hablar desde nuestra aplicación Rails y nginx. Compré un certificado SSL de GoDaddy (muy barato) y nginx está configurado para encriptar el contenido (Rails no está haciendo esto por sí mismo) sobre la marcha cuando lo envía. En el iPhone ASIHTTPRequest será responsable de descifrar los datos. El resto de las capas no deben preocuparse por el cifrado, puede enviar lo que desee.

Es posible que también pueda utilizar un certificado autofirmado. Decidimos usar GoDaddy ya que también usamos el certificado SSL para navegadores comunes, y estos muestran un mensaje de advertencia al usuario si encuentra un certificado autofirmado, lo que obviamente asusta a la gente.

Cuestiones relacionadas