2016-11-19 4 views
1

После дня поиска SSL и HTTPS я совершенно смущен тем, как сделать что-то очень простое. У меня есть небольшое приложение, которое не имеет никакой аутентификации пользователей. Все пользователи видят простое приложение.Защита ключа API в HTTP-запросе

Я пытаюсь использовать API для перевода Google для этого. У меня есть API-интерфейс для перевода, но я полностью забываю, как его защитить. Я хочу перевести Google прямо из приложения iOS, и в соответствии с api docs (https://cloud.google.com/translate/docs/reference/rest) apiKey предоставляется как параметр запроса «ключ». В документах API также говорится, что Google translate поддерживает SSL, но, очевидно, я не делаю никаких проверок SSL в моем приложении ios, чтобы подтвердить личность. Мой вопрос: как я могу остановить атаку MITM, которая может получить мой API-интерфейс для трансляции и оскорбить его? Я попытался использовать Чарльза, и я ясно вижу, что ключ прошел.

Каждый ресурс, который я читал в Интернете, говорит, что он использует SSL, и все хорошо. Но нет примеров использования SSL в приложениях iOS с использованием популярных сервисов, таких как Google.

Любые идеи о том, как я могу сделать этот простой запрос GET и предотвратить кражу моего ключа?

EDIT:

SSL Закрепление является излишеством для этого. Я не думаю об использовании SSL, но я понятия не имею, как это работает с iOS и сущностью, подобной Google (согласно обсуждению с @pvg ниже).

+0

Вы можете попробовать реализовать собственный SSL-пиннинг, но это полный избыток для вашего API-интерфейса для перевода.Это не так ценно, чтобы кто-нибудь украл, и его трудно заменить. – pvg

+0

Точно, внедрение SSL-закрепления - полный перебор. Мне нужно настроить собственный сервер, купить собственный SSL-сертификат и т. Д. Причина, по которой мой перевод API-ключа ценна, заключается в том, что в противном случае кто-то может легко получить ее и оскорбить ее с единственным намерением потратить мне деньги. – user1056585

+0

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

ответ

0

Вы пытаетесь использовать HTTPS, потому что вы не хотите, чтобы у людей был ваш ключ API. Вы должны знать, где будет храниться этот ключ API, если ваше приложение напрямую связано с Google Translate? :)

Вам необходимо будет распространять ключ API для Google Translate с помощью своего приложения. Почти все будут иметь это. Это может быть или не быть проблемой, я думаю, что ключи API Google обычно находятся в Javascript, отправленные клиентам браузера в любом случае, поэтому они не так уж и важны. Единственный способ защитить его от пользователей - запустить собственный сервер, который переводит ваши запросы приложений в запросы Google Translate, используя ваш ключ API, хранящийся на вашем сервере.

(Возможно, это очевидно, но обратите внимание, что HTTPS является транспортным протоколом, он защищает данные в движении, то есть когда он отправляется по сети, а не данные в состоянии покоя, т. Е. Когда он находится в вашем приложении на мобильный телефон.)

Что касается того, как удостовериться, что никто не олицетворяет серверы Google и не требуется ли получение сертификата. Сертификаты - ваша гарантия, что в большинстве сценариев это невозможно. Практически любой стандартный метод, который вы хотите установить с помощью веб-сервера https, ваша базовая инфраструктура и/или операционная система будет проверять сертификат сервера и убедиться, что нет олицетворения. Для этого нужны сертификаты. Подписание сертификата предназначено для смягчения угрозы того, что на клиенте устанавливается доверенный корневой сертификат изгоев. Например, в корпоративных сетях часто бывает, что корневой сертификат CA CA установлен как доверенный root для управляемых клиентов, и с этого момента прокси-сервер компании может заглядывать в трафик SSL-клиента, создавая ключи и сертификаты серверов. Это возможно только потому, что предустановлен корневой сертификат компании, это невозможно для злоумышленника. Подобная угроза заключается в том, что злоумышленнику удается установить свой сертификат на клиенте в качестве доверенного корня, но это не очень часто встречается. Вам может потребоваться защита от него в зависимости от вашей модели угроз, но в большинстве случаев использование стандартных веб-клиентов для общения с https API достаточно проверяет сервер, вы можете быть уверены, что когда вы загружаете что-то с https://google.com, это действительно происходит из Google .com.

+0

Спасибо за ответ Габор. Я понял, что после поиска немного, да, мой ключ API будет храниться в самом наборе приложений, и каждый может использовать служебную программу строки, чтобы получить ключ таким образом. Тогда я могу поцарапать этот метод, я думаю. Я пытался избежать необходимости создания собственного сервера, который просто отправляет запрос на перевод в Google, и только для защиты ключа API. – user1056585