iphone: есть ли безопасный способ установить двухсторонний SSL из приложения - PullRequest
4 голосов
/ 05 мая 2010

Мне необходимо установить двустороннее SSL-соединение HTTPS от приложения iPhone к серверу клиента. Однако я не вижу безопасного способа доставки клиентских сертификатов в приложение (это приложение для электронного банкинга, поэтому проблема безопасности действительно существует). Из того, что я нашел до сих пор, единственный способ, которым приложение сможет получить доступ к сертификату, - это предоставить его предварительно заполненным самим приложением или предоставить URL-адрес, с которого его можно получить ( приложение IPhone с SSL клиентские сертификаты ).

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

Весь протокол безопасности должен выглядеть следующим образом:
- HTTPS 2-way SSL для аутентификации приложения
- Регистрация пользователя на основе OTP (токена) (пара ключей на стороне клиента, сгенерированная на этом шаге)
- XML-подпись SOAP / WSS (запросы, подписанные сгенерированными ранее ключами)

Есть идеи, как установить первый уровень безопасности (HTTPS)?

Ответы [ 2 ]

2 голосов
/ 07 мая 2010

Хорошо, чтобы ответить на мой собственный вопрос ...

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

В моей ситуации речь идет о системе электронного банкинга, но с несколько низкими месячными лимитами (пара тысяч долларов США). Как я уже упоминал в своем вопросе, над HTTPS будет еще один уровень безопасности, который будет содержать XML-подписи WSS. Процесс регистрации пользователя и принятия его открытого ключа также выполняется в несколько этапов. На первом этапе пользователь отправляет свой номер телефона вместе с треской, полученной каким-либо образом от моего клиента. Затем пользователю отправляется SMS с кодом подтверждения. Пользователь вводит код подтверждения в OTP-калькулятор, который будет генерировать OTP-код, который будет идентифицировать пользователя. Затем открытый ключ отправляется на сервер вместе с кодом OTP. С этого момента каждый запрос будет подписан частным аналогом открытого ключа, отправленного на сервер ранее.

Таким образом, самым большим недостатком всего процесса является то, что кто-то перепроектирует приложение и извлекает сертификат клиента, используемый для SLL. Единственная проблема, возникающая из-за этого, заключается в том, что кто-то может наблюдать за транзакциями пользователей. Однако для осуществления транзакции ему понадобится закрытый ключ пользователя, который генерируется, шифруется и сохраняется в цепочке ключей. И цена за торможение этого уровня безопасности ОЧЕНЬ ВЫСОКАЯ.

Мы дополнительно подумаем над тем, как защитить данные пользователей на более высоком уровне (например, с помощью шифрования WSS), но для начала, я думаю, мы хороши с текущим решением.

Есть мнение?

С уважением

0 голосов
/ 05 мая 2010

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

Если вы используете для этого классы Apple (iPhone), они будут принимать только «хорошие» сертификаты. Я имею в виду то, что Apple считает приемлемым. Если вы их не используете (в SDK есть альтернативы), вы не сможете подключиться (за исключением, может быть, случая, когда у вас есть лицензия разработчика 'Enterprise' '- но я не могу сказать, что с 100% уверенность, так как я не достаточно посмотрел на эту лицензию, чтобы быть уверенным)

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

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

[править]

Отметьте в этом сообщении - возможно, есть дополнительная информация о том, что вы просите сделать

[/ править]

[edit2]

Обратите внимание, что запрос - это iphone, а не OSX - проблема с утверждением магазина приложений

[/ edit2]

...