Мы - магазин .NET, который стандартизировал на WCF Services. Мы находимся в процессе разработки приложения для iPhone, которое должно выполнить вызовы защищенных веб-сервис для получения данных для приложения. Для обеспечения безопасного communiations, мы включили SSL на наших веб-серверах. Но это не гарантирует, что сервис может только быть использован разрешенными приложениями. Мы настроили наши сервисы поддерживать x509 аутентификацию сертификата. Даже возможно назвать безопасные услуги WCF с certifcate аутентификацией из Приложения для iPhone?
Я провел много часов, ища Интернет примеры, но напрасно. Я был в состоянии успешно назвать небезопасный сервис WCF без проблем. Я также провел большое исследование в области безопасности WS и коммуникационных стандартов WS-Trust. Я полагаю, что понимаю, как это должно работать. Я просто испытываю затруднения, соединяющие шаги/объекты в платформах iPhone, я должен сделать эту работу.
Любые мысли и идеи о предмете значительно ценились бы.
Кроме того, любые мысли о любом следующем:
Обычно, если вы хотите установить сертификаты на iPhone, я нашел два варианта (оба из здесь ) :
Отправьте сертификат получателю по электронной почте. Если это действующий сертификат и заголовки в электронном письме в порядке, то получатель электронного письма сможет установить сертификат. Проблема здесь, конечно, в атаке «человек посередине».
Используйте служебную программу настройки iPhone.
Это должно помочь вам в этом (установка сертификата локально). Я должен отметить, что, как правило, вы не хотите устанавливать один сертификат для всего приложения, а иметь отдельные сертификаты для своих пользователей.Как правило, аутентификация приложения - это очень плохая вещь , тогда как вы должны аутентифицировать пользователя .
Однако, если вы уже аутентифицируете пользователя, это не должно быть проблемой, поскольку использование базовой аутентификации через HTTPS будет работать так же хорошо (и его легче кодировать).
Вы также можете использовать ssl + аутентификацию пользователь/пасс на уровне сообщений.
Я тоже согласен с решением Ярона Навеха, наверное, лучше всего использовать SSL. Я считаю, что шифрование SSL / TLS лучше с точки зрения производительности, чем шифрование на основе сообщений / XML в WCF.
Я думаю, что сертификат, вероятно, должен быть от доверенного центра сертификации ( центр сертификации ), чтобы это работало. По памяти, у меня были проблемы с iPhone SDK с самозаверяющими сертификатами, но это могло измениться за последний год ...
Для начала, я бы сказал, что если вы действительно серьезно относитесь к безопасности, пожалуйста, уделите этому должное время и ресурсы и рассматривайте это как гражданина первого класса в вашем списке функций. Не надо просто "включать SSL" и делать вид, что все безопасно. Я не говорю, что вы делаете это или не делаете, но я просто чувствую, что должен сказать это, прежде чем продолжить.
Итак, вы, вероятно, уже знаете, что WS-* построен на основе http-запросов, и в любое время, когда вы делаете много http-запросов, вы, вероятно, найдете ASIHTTPRequest очень полезным на iPhone. Однако это не даст вам 100% результата.
С точки зрения iPhone у вас есть:
На Mac вы можете использовать Secure Transport, но, насколько я знаю, они не перенесли его на устройство, так что я бы не стал отвлекаться на чтение этой информации, если только вы не планируете перенести это на настольный компьютер или просто в настроении изучить все: )
Если вы делаете любую безопасность с WCF, первая вещь, которую вы, вероятно, поняли, является то, что есть много вариантов, доступных вам, но все это сводится к этому короткому списку:
В последний раз, когда я делал WCF (около года назад), общая рекомендация от Microsoft, казалось, была безопасностью уровня сообщений через открытый транспорт из-за проблем брандмауэра / доступности, представленных при попытке защитить транспорт. Однако, этот подход предполагал, что все вовлеченные стороны были .NET / WCF способны. Я считаю, что было бы проще потреблять на устройстве, если бы это была безопасность транспортного уровня HTTPS, с понятными телами сообщений XML или JSON. Таким образом, вы сможете воспользоваться всеми преимуществами CFNetwork и NSHTTPRequest, которые сделала Apple.
Как только вы получите что-то работающее, вам нужно обратиться к Enterprise Deployment Guide, и особенно к документации по Over-the-Air Enrollment, чтобы вы могли установить сертификаты на устройства. Помните, все возможно, и не бойтесь использовать один из тех тикетов поддержки Apple, которые поставляются вместе с программой :)
EDIT:
Я совсем забыл упомянуть примеры GenericKeychain и CryptoExcercise
EDIT 2:
После того, как меня без видимых причин понизили в голосовании, я перечитал свой ответ и понял, что слишком много бредил, не ответив на ваш вопрос о том, как открыть файл p12 на устройстве. Вы должны быть в состоянии просто [[UIApplication sharedApplication] openURL:urlToP12FileEitherLocalOrRemote]]
и заставить его выкинуть в ОС для процедуры установки.