2012-04-24 2 views
3

У меня есть HTTP REST API в PHP, который используется приложением iPhone.Соответствует ли протокол HTTPS для веб-служб REST API?

Некоторые веб-службы этого API защищены аутентификацией пользователя в учетных данных HTTP-запроса, но я хочу избежать атак «человек в середине», предоставляя данные с полностью зашифрованными запросами.

Я не очень опытный в вопросах безопасности, и я не мог найти однозначный ответ на мой вопрос в любом месте:

Является ли HTTPS отношения апатрида REST API?

Из того, что я понял, HTTPS делает 2 вещи:

  • зашифровать сеанс
  • доказать клиенту, что сервер он разговаривает с прикрепленной

Таким образом, на первый взгляд не отвечает на мою потребность, которая заключается в шифровании данных между моим сервером и приложением, потому что API не использует сеансы. Но у меня все еще есть сомнения.

Может кто-нибудь разъяснить мне?

Моим другим решением было бы зашифровать данные запросов с помощью системы открытых/закрытых ключей. Будет ли это более подходящим?

Спасибо!

+0

HTTPS делает 2 вещи: - шифрует соединение - доказывает клиенту, что сервер, с которым он разговаривает, - это тот, кто говорит, что он <- исправил его для вас – PeeHaa

+1

«Мое другое решение было бы зашифровать запросы с помощью система открытых/закрытых ключей ". Звучит как хороший план. Почему бы не реализовать SSL (HTTPS) ;-) – PeeHaa

ответ

2

Да, это так. HTTPS не имеет ничего общего с приложением, это протокол туннелирования. Несмотря на то, что TLS сам по себе является протоколом с состоянием, часть HTTP, проходящая через него, не является.

Как и при использовании VPN, вы все равно можете использовать приложение на основе REST. TLS просто настраивает и автоматически разрывает туннель для каждого соединения.

Это говорит о том, что есть смысл использовать аспекты конвейерной обработки HTTP и HTTPS для повышения пропускной способности по TLS-соединениям, но это аспект настройки производительности, не связанный с самим приложением.

+0

Спасибо, Хартунг, вы точно объяснили мне, что мне непонятно. У меня возникло ощущение, что часть запроса HTTPS может быть сброшена по каждому запросу, но я не был уверен. – Bedu33

2

HTTPS очень уместен, и да, это из-за двух упомянутых вами моментов. Знаете ли вы, что OAuth 2 действительно применяет HTTPS?

Выполнение всего шифрования самостоятельно также может быть вариантом, но вы теряете часть, в которой API прост в использовании.

Большинство нападений «простые» HTTP-запросы «человек в середине» включают в себя кражу учетных данных и фальшивых запросов, но они также могут читать данные, отправленные и полученные. Если ваша проблема связана с нечитаемыми данными, используйте HTTPS. Если ложные запросы являются единственной проблемой, достаточно протокола аутентификации, такого как OAuth 1 (не 2).

+1

Не знаете, что вы подразумеваете под «Выполняете все шифрование самостоятельно», но это звучит как плохая идея. – PeeHaa

+0

@RepWhoringPeeHaa Я имел в виду ручное шифрование данных с помощью системы открытого/закрытого ключа, как упоминается в этом вопросе. –

+0

Aha. Evertime Я слышал, что кто-то предлагает попробовать сделать шифрование самостоятельно. Я, как правило, получаю триггер. И я не говорю о стартовом голосовании триггера :) – PeeHaa

0

Если вы не хотите внедрять SSL, вы можете проверить http://www.jcryption.org/ Я не знаю, будет ли он работать в среде без гражданства, но, возможно, стоит попробовать. Это в основном плагин jquery, который обрабатывает создание ассоциаций пары ключей для передаваемых данных. Может быть, только для подачи формы. Мы использовали его для шифрования учетных данных для входа в мою старую компанию.

+0

JavaScript крипто, как правило, плохая идея: http://www.matasano.com/articles/javascript-cryptography/ – Bruno

0

Определенно использовать HTTPS, если данные чувствительны - шифруется на транспортном уровне, который вы ищете. Как уже указывалось, oAuth 2.0 называет его по существу.Вы можете потенциально избегать человека посередине, используя хеширование/подпись, как в oAuth 1.0, и избегать использования SSL, но тело по-прежнему остается в ясном состоянии (вы избегали отправки учетных данных API в ясном, но не в теле).