Безопасная связь между сервером django и приложением iphone - PullRequest
9 голосов
/ 13 октября 2009

Я пишу приложение для iPhone, которое должно отправлять небольшие биты информации (две строки длиной не более 128 символов в каждой, и это происходит не часто) на сервер, когда пользователи взаимодействуют с ним. Я хотел бы, чтобы эта информация оставалась конфиденциальной, поэтому я думаю о необходимости какого-либо шифрования или безопасного соединения.

Мой вопрос касается серверной стороны. Сервер, с которым должно общаться приложение iPhone, написан на django и работает на lighttpd. Каков наиболее подходящий (или стандартный) способ сделать это? Я думал о https, который я знаю на iPhone, что я могу использовать ASIHTTPRequest для выполнения запроса POST, но я не знаю, что для этого требуется на стороне сервера. Нужен ли мне сертификат? Как данные зашифрованы / защищены? Есть ли какие-нибудь модули django, чтобы помочь с этим? Нужно ли что-то делать для настройки lighttpd?

Было бы проще что-то вроде xml-rpc или json-rpc? Можно ли обезопасить такое общение? На каком уровне это произойдет?

Любая помощь будет высоко ценится.

Ответы [ 3 ]

4 голосов
/ 20 октября 2009

Использование xml-rpc или json-rpc - это всего лишь средство для инкапсуляции ваших данных в форму, которую легко транспортировать. Ваше приложение для iPhone может преобразовывать данные Objective C с помощью одного из этих форматов, а ваше серверное приложение Django может преобразовывать данные обратно в объекты Python.

Ни один из них не имеет ничего , связанного с безопасностью.

Создание HTTPS (SSL) соединения шифрует все коммуникации между клиентом (iPhone) и сервером (Django). Вам нужно будет получить сертификат на стороне сервера. Это указывает клиенту, что сервер является тем, кем он себя считает. Следующее направление ваших исследований по этому пути должно быть о том, как настроить lighttpd для обработки трафика SSL. После того, как lighttpd установит соединение SSL, ваше приложение Django будет работать так же, как и для незащищенного трафика.

Это ваш лучший выбор.

Если по какой-либо причине вы не хотите использовать SSL, вы можете найти надежные библиотеки шифрования для обоих концов связи. Приложение iPhone может шифровать данные, отправлять их через HTTP-соединение, а приложение Django может расшифровывать их. Например, в библиотеке pycrypto Python реализованы надежные шифры шифрования, такие как AES и Blowfish . Возможно, вам удастся найти реализацию одного из этих шифров, написанных в Цели C.

Вы заметили, что это становится все более сложным?

Перейти с SSL. Это способ обеспечения безопасности для связи на основе HTTP.

1 голос
/ 16 октября 2009

Если вы используете https (SSL) на стороне сервера, не должно иметь значения, используете ли вы XML-RPC или JSON-RPC. Все передаваемые вами данные будут зашифрованы и защищены.

Я могу говорить только из нашего Rails-приложения и nginx. Я купил SSL-сертификат у GoDaddy (очень дешево), и nginx настроен для шифрования контента (Rails не делает этого сам) на лету, когда отправляет его. На iPhone ASIHTTPRequest будет отвечать за расшифровку данных. Все остальные уровни не должны беспокоиться о шифровании, вы можете отправлять все что угодно.

Вы также можете использовать самозаверяющий сертификат. Мы решили использовать GoDaddy, так как мы также используем SSL-сертификат для обычных браузеров, и они показывают предупреждающее сообщение пользователю, если сталкиваются с самозаверяющим сертификатом, который явно пугает людей.

1 голос
/ 13 октября 2009

Хм, похоже, это то, что вы ищете, вы видели это?

Настройка SSL для Lighttpd / Django

Если я правильно понял, эта настройка позволяет вашему серверу отвечать на запросы https и http (?) Тогда, если все ваше приложение не будет https, есть это промежуточное ПО SSL , чтобы помочь настроить некоторые пути как ssl, а некоторые нет.

...