2009-10-13 11 views
8

Sto scrivendo un'applicazione per iPhone che ha bisogno di inviare piccole informazioni (due stringhe di meno di 128 caratteri ciascuna alla volta, e questo non accade troppo spesso) ad un server quando gli utenti interagiscono con esso. Vorrei che queste informazioni restassero riservate, quindi sto pensando a una sorta di crittografia o connessione sicura sarebbe necessaria.Comunicazione sicura tra il server django e l'app per iphone

La mia domanda riguarda il lato server delle cose. Il server con cui l'app iPhone deve comunicare è scritto in django ed è in esecuzione su lighttpd. Qual è il modo più appropriato (o quello che è un modo standard) di farlo. Stavo pensando a https, che so su iPhone, posso usare ASIHTTPRequest per fare una richiesta POST, ma non so cosa richieda sul lato server. Ho bisogno di un certificato? Come vengono crittografati/protetti i dati? Ci sono dei moduli Django per aiutarti? Devo fare qualcosa per configurare lighttpd?

Qualcosa come xml-rpc o json-rpc sarebbe più semplice? È possibile garantire tale comunicazione? A che livello si verificherebbe?

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

3

L'uso di xml-rpc o json-rpc è solo un mezzo per incapsulare i dati in un modulo che è facile da trasportare. La tua app per iPhone può trasformare i dati dell'Obiettivo C utilizzando uno di questi formati e la tua app del server Django può trasformare i dati in oggetti Python.

Nessuno di questi ha nulla da fare da fare con la sicurezza.

Creazione di una connessione HTTPS (SSL) crittografa tutte le comunicazioni tra il client (iPhone) e il server (Django). Dovrai ottenere un certificato per il lato server. Ciò indica al client che il server è chi dichiara di essere. La tua prossima linea di ricerca su questo percorso dovrebbe essere su come configurare lighttpd per gestire il traffico SSL. Una volta lighttpd negozia la comunicazione SSL, la tua app Django funzionerà come per il traffico non protetto.

Questa è la scelta migliore.

Se, per qualsiasi motivo, non si desidera utilizzare SSL, è possibile trovare librerie di crittografia avanzate per entrambe le estremità della comunicazione. L'app per iPhone potrebbe crittografare i dati, inviarli tramite una connessione HTTP e l'app Django potrebbe decrittografarli. Ad esempio, la libreria Python pycrypto implementa crittografie crittografiche avanzate come AES e Blowfish. Potresti riuscire a trovare un'implementazione di uno di questi codici scritti nell'obiettivo C.

Hai notato che questo sta diventando sempre più complesso?

Vai con SSL. È il modo in cui la sicurezza viene eseguita per le comunicazioni basate su HTTP.

1

Hmm sembra che questo potrebbe essere quello che cerchi, l'hai visto?

Setting up SSL for Lighttpd/Django

Se ho letto bene, che l'installazione consente al server di rispondere HTTPS e le richieste HTTP (?) Poi, se tutta la vostra applicazione non sta per essere https c'è questa SSL Middleware per aiutare configurare alcuni percorsi come ssl e altri no.

1

Se si utilizza https (SSL) sul lato server, non importa se si utilizza XML-RPC o JSON-RPC. Tutti i dati trasferiti saranno crittografati e sicuri.

Posso solo parlare dalla nostra applicazione Rails e nginx. Ho acquistato un certificato SSL da GoDaddy (molto economico) e nginx è configurato per crittografare il contenuto (Rails non lo sta facendo) al volo quando lo invia. Sull'iPhone ASIHTTPRequest sarà responsabile della decrittografia dei dati. Tutti gli altri livelli non dovrebbero preoccuparsi della crittografia, è possibile inviare tutto ciò che si desidera.

Potrebbe anche essere possibile utilizzare un certificato autofirmato. Abbiamo deciso di utilizzare GoDaddy poiché utilizziamo anche il certificato SSL per i browser standard e quelli mostrano un messaggio di avviso all'utente se incontrano un certificato autofirmato, che ovviamente spaventa le persone.

Problemi correlati