Веб-сервис iPhone вызывает службу WCF с аутентификацией сертификата

Мы являемся магазином .Net, стандартизованным в службах WCF. Мы находимся в процессе разработки приложения iPhone, которому необходимо сделать безопасные вызовы веб-сервисов для получения данных для приложения. Чтобы обеспечить безопасное общение, мы включили SSL на наших веб-серверах. Но это не гарантирует, что услуга может быть использована только авторизованными приложениями. Мы настроили наши службы для поддержки проверки подлинности сертификата x509. Можно ли даже вызвать безопасную службу WCF с аутентификацией certifcate из приложения IPhone?

Я потратил много часов на поиск в Интернете, но безрезультатно. Я смог успешно позвонить в незащищенный сервис WCF без каких-либо проблем. Я также провел много исследований по стандартам WS-Security и WS-Trust. Полагаю, я понимаю, как это должно работать. Мне просто не удается собрать шаги/объекты внутри фреймворков iPhone, которые мне нужны для выполнения этой работы.

Любые мысли и идеи по этому вопросу будут высоко оценены.

Кроме того, любые мысли по любому из следующих:

  • Как лучше всего развернуть файл сертификата P12 с приложением iPhone.
  • Как лучше всего защитить пароль для файла P12 в приложении
  • Является ли развертывание файла P12 с приложением лучшей практикой.
  • Есть ли возможности в рамках iPhone для поддержки такого безопасного взаимодействия? Если нет, то какая альтернативная рекомендация.

Ответы

Ответ 1

Для начала, я бы сказал, если вы действительно серьезно относитесь к безопасности, пожалуйста, посвятите ему надлежащее время и ресурсы и относитесь к нему как к первоклассному гражданину в списке функций. Не просто "включите SSL" и притворитесь, что все в безопасности. Я не предлагаю вам делать это или не делать этого, но я просто чувствую, что должен сказать это, прежде чем продолжить.

Тем не менее, вы, вероятно, уже знаете, что WS- * все построено поверх HTTP-запросов, и в любое время, когда вы выполняете множество HTTP-запросов, вы, вероятно, найдете ASIHTTPRequest очень полезно на iPhone. Однако, это не даст вам 100% пути.

С точки зрения iPhone у вас есть:

На компьютерах Mac вы можете использовать Secure Transport, но насколько я знаю, они не портировали это устройство, поэтому я не стал бы слишком отвлекаться на это, если вы не планируете доводить это до рабочего стола или просто в настроении узнать все:)

Если вы выполняете какую-либо защиту с помощью WCF, первое, что вы, вероятно, поняли, это то, что есть множество доступных вам вариантов, но это все сводится к этому краткому списку:

  • Безопасность транспортного уровня (https) с четкими текстовыми сообщениями (xml/json/...)
  • Защита уровня сообщений (зашифрованное тело сообщения) над открытым транспортом (http)
  • Защищенные сообщения через защищенный транспорт

В прошлый раз, когда я делал WCF (около года назад), общая рекомендация Microsoft, казалось, была защитой уровня сообщений над открытым транспортом из-за проблем с брандмауэром/доступом, возникающих при попытке защитить транспорт. Однако этот подход предполагал, что все вовлеченные стороны были .NET/WCF. Я считаю, что было бы проще потреблять на устройстве, если бы это была безопасность транспортного уровня HTTPS, с четкими XML-сообщениями или сообщениями JSON. Таким образом, вы можете использовать все вещи, запеченные в CFNetwork и NSHTTPRequest, которые Apple сделала.

Как только вы получите что-то полезное, вы захотите обратиться к Руководство по развертыванию Enterprise и, в частности, документацию по Over- Air Enrollment, чтобы вы могли установить сертификаты на устройствах. Помните, что все возможно, и не бойтесь использовать один из тех билетов Apple, которые поставляются с программой:)

EDIT:

Я полностью забыл упомянуть GenericKeychain и CryptoExcercise Примеры

ИЗМЕНИТЬ 2:

После того, как я стал без видимой причины, я перечитал свой ответ и понял, что я слишком много перепутал, не отвечая на ваш вопрос о том, как открыть файл p12 на устройстве. Вы должны иметь возможность просто [[UIApplication sharedApplication] openURL:urlToP12FileEitherLocalOrRemote]] и запустить его в ОС для процедуры установки.

Ответ 2

Вы также можете использовать аутентификацию ssl + user/pass на уровне сообщений.

Ответ 3

Как правило, если вы хотите установить сертификаты на iPhone, есть два варианта, которые я нашел (оба они из здесь):

  • Отправить сертификат получателю. Если это действительный сертификат и заголовки в письме в порядке, то это позволит получателю электронной почты установить сертификат. Конечно, проблема здесь - это атака "человек в середине".

  • Используйте настройку конфигурации iPhone iphone.

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

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

Ответ 4

Я согласен с решением Ярона Навеха, вероятно, лучше всего использовать SSL. Я считаю, что шифрование SSL/TLS лучше, чем шифрование на основе сообщений /XML в WCF.

Я думаю, что для этого, вероятно, должен быть сертификат из доверенного ЦС (центра сертификации). Из памяти у меня возникли трудности с iPhone SDK с самозаверяющими сертификатами, но это вполне могло измениться в прошлом году...

Ответ 5

iPhone должен иметь доступ к защищенному сертификатом WCF-приложению. Если вы сделаете свой сервис WCF RP Azure ACS, он должен работать с использованием OAuth среди других методов.

Взгляните на образцы здесь: http://acs.codeplex.com/