2010-02-11 3 views
13

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

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

Любые мысли и идеи по этому вопросу будут очень признательны.

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

  1. Как лучше развернуть файл P12: Сертификат с приложением iPhone
  2. Как лучше обеспечить пароль для файла P12 в приложении
  3. Является ли развертывание файла P12 с приложением лучшей практикой
  4. Есть ли возможности в рамках iPhone для поддержки такого безопасного взаимодействия? Если нет, то какая альтернативная рекомендация.
+0

Этот вопрос имеет некоторую информацию о нем: http://stackoverflow.com/questions/2244764/iphone-web-service-calls-to-wcf- service-with-certificate-authentication –

+3

Maike9, у вас были какие-то успехи в этом? – dredful

ответ

1

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

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

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

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

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

+0

Не могли бы вы предоставить какие-либо причины/ссылки, чтобы объяснить, почему аутентификация приложения - это очень плохо? Я также хочу, чтобы моя служба могла потребляться только авторизованным APPS, но любым пользователем, у которого эти приложения установлены на их iPhone. –

3

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

+0

как мы можем это сделать? Я новичок в этом, поэтому, пожалуйста, объясните это подробнее. – smoothumut

+0

http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2006/06/08/5848.aspx –

0

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

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

10

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

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

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

  1. URL loading system, что высокий уровень API для работы с сетевыми ресурсами любого рода
  2. CFNetwork C API, который ниже уровня и позволяет вам гораздо больше контроля шифрования потоков и сетевого трафика любым способом по своему усмотрению
  3. Certificate, Key, and Trust Services, что делать тяжелую работу, а более конкретно the X509 trust policies

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

Если вы делаете какой-либо безопасности с WCF, то первое, что вы, вероятно, поняли, что есть many options available to you, но все это сводится к тому, этот короткий список:

  1. Безопасность транспортного уровня (https) с четкими текстовыми сообщениями (xml/json/...)
  2. Безопасность на уровне сообщений (зашифрованная почта GE тело) на открытом транспорте (HTTP)
  3. Обеспеченных сообщений по защищенному транспорту

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

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

EDIT:

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

РЕДАКТИРОВАТЬ 2:

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

0

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

Посмотрите на образцы здесь больше: http://acs.codeplex.com/