Sichere Kommunikation zwischen Django Server und iPhone App

8

Ich schreibe eine iPhone-Anwendung, die kleine Informationen (zwei Zeichenfolgen mit jeweils unter 128 Zeichen) an einen Server senden muss, wenn Benutzer damit interagieren. Ich möchte, dass diese Informationen vertraulich bleiben, daher denke ich an eine Verschlüsselung oder eine sichere Verbindung.

Meine Frage betrifft die Serverseite. Der Server, mit dem die iPhone App kommunizieren soll, ist in django geschrieben und läuft auf lighttpd. Was ist der geeignetste Weg (oder was ist ein Standardweg) dies zu tun? Ich dachte https, die ich auf dem iPhone kenne Ich kann ASIHTTPRequest verwenden, um eine POST-Anfrage zu machen, aber ich weiß nicht, was es auf der Serverseite erfordert. Brauche ich ein Zertifikat? Wie werden die Daten verschlüsselt / gesichert? Gibt es Django-Module, die dabei helfen? Muss ich etwas tun, um lighttpd zu konfigurieren?

Wäre etwas wie xml-rpc oder json-rpc einfacher? Ist es möglich, eine solche Kommunikation zu sichern? Auf welcher Ebene würde das passieren?

Jede Hilfe wäre sehr willkommen.

    
Andres 13.10.2009, 04:38
quelle

3 Antworten

3

Die Verwendung von xml-rpc oder json-rpc ist nur eine Möglichkeit, Ihre Daten in ein Formular zu kapseln, das einfach zu transportieren ist. Ihre iPhone-App kann die Objective-C-Daten mit einem dieser Formate transformieren und Ihre Django-Server-App kann die Daten zurück in Python-Objekte transformieren.

Keines davon hat irgendetwas mit Sicherheit zu tun.

Durch das Erstellen einer HTTPS-Verbindung (SSL) wird die gesamte Kommunikation zwischen dem Client (iPhone) und dem Server (Django) verschlüsselt. Sie müssen ein Zertifikat für die Serverseite erhalten. Dies zeigt dem Client an, dass der Server derjenige ist, für den er sich ausgibt. Ihre nächste Forschungsrichtung auf diesem Pfad sollte sein, wie man lighttpd für die Verarbeitung von SSL-Datenverkehr konfiguriert. Sobald lighttpd die SSL-Kommunikation aushandelt, funktioniert Ihre Django-App wie für nicht gesicherten Datenverkehr.

Dies ist Ihre beste Wahl.

Wenn Sie aus irgendeinem Grund kein SSL verwenden möchten, finden Sie starke Verschlüsselungsbibliotheken für beide Enden der Kommunikation. Die iPhone App könnte die Daten verschlüsseln, über eine HTTP-Verbindung senden und die Django-App könnte sie entschlüsseln. Zum Beispiel implementiert die pycrypto Python-Bibliothek starke Verschlüsselungscodes wie AES und Blowfish . Sie können möglicherweise eine Implementierung eines dieser in Objective C geschriebenen Chiffren finden.

Haben Sie bemerkt, dass dies immer komplexer wird?

Gehen Sie mit SSL. So wird die Sicherheit für die HTTP-basierte Kommunikation gewährleistet.

    
Doug Harris 19.10.2009, 21:18
quelle
1

Hmm, es sieht so aus, als ob Sie das suchen. Haben Sie es gesehen?

SSL für Lighttpd / Django einrichten

Wenn ich das richtig gelesen habe, erlaubt das Setup Ihrem Server, https und http Anfragen (?) zu beantworten Dann, wenn Ihre ganze App nicht https sein wird, gibt es diese SSL Middleware , um einige Pfade als ssl und einige zu konfigurieren nicht.

    
Purrell 13.10.2009 05:50
quelle
1

Wenn Sie https (SSL) auf der Serverseite verwenden, ist es egal, ob Sie XML-RPC oder JSON-RPC verwenden. Alle Daten, die Sie übertragen, sind verschlüsselt und sicher.

Ich kann nur von unserer Rails-Anwendung und nginx sprechen. Ich kaufte ein SSL-Zertifikat von GoDaddy (sehr billig) und Nginx ist eingerichtet, um den Inhalt zu verschlüsseln (Rails tut dies nicht selbst), während es es sendet. Auf dem iPhone wird ASIHTTPRequest dafür verantwortlich sein, die Daten zu entschlüsseln. Alle anderen Schichten sollten sich nicht um die Verschlüsselung kümmern, Sie können alles senden, was Sie wollen.

Möglicherweise können Sie auch ein selbstsigniertes Zertifikat verwenden. Wir haben uns dafür entschieden, GoDaddy zu verwenden, da wir das SSL-Zertifikat auch für normale Browser verwenden und diese eine Warnmeldung für den Benutzer anzeigen, wenn sie auf ein selbstsigniertes Zertifikat stoßen, das offensichtlich Leute abschreckt.

    
Sascha Konietzke 16.10.2009 09:48
quelle