Веб-служба iPhone вызывает сервис WCF с проверкой подлинности сертификата - PullRequest
13 голосов
/ 11 февраля 2010

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

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

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

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

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

Ответы [ 5 ]

10 голосов
/ 22 июня 2010

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

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

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

  1. Система загрузки URL , которая является высокоуровневым API для работы с любыми сетевыми ресурсами
  2. API-интерфейс CFNetwork C, являющийся низкоуровневым и позволяющий значительно лучше контролировать потоки шифрования и сетевой трафик любым удобным для вас способом
  3. Службы сертификатов, ключей и доверия , которые выполняют тяжелую работу, а более конкретно политики доверия X509

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

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

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

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

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

EDIT:

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

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

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

3 голосов
/ 20 февраля 2010

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

1 голос
/ 16 февраля 2010

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

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

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

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

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

0 голосов
/ 14 апреля 2011

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

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

0 голосов
/ 10 марта 2010

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

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

...