2010-02-11 20 views
13

Somos una tienda .Net que se ha estandarizado en los Servicios de WCF. Estamos en el proceso de desarrollar una aplicación de iPhone que necesita realizar llamadas de servicios web seguros para obtener datos para la aplicación. Para garantizar comunicaciones seguras, hemos habilitado SSL en nuestros servidores web. Pero esto no garantiza que el servicio solo pueda ser consumido por aplicaciones autorizadas. Hemos configurado nuestros servicios para admitir la autenticación del certificado x509. ¿Es posible llamar a un servicio WCF seguro con autenticación de certificado desde una aplicación de iPhone?Llamadas de servicio web de iPhone al Servicio WCF con Autenticación de certificado

He pasado muchas horas buscando ejemplos en Internet, pero fue en vano. HE PUEDO llamar con éxito un servicio WCF no seguro sin problemas. También investigué mucho sobre los estándares de comunicaciones WS-Security y WS-Trust. Creo que entiendo cómo debería funcionar esto. Solo estoy teniendo problemas para unir los pasos/objetos dentro de los marcos de iPhone que necesito para que esto funcione.

Cualquier pensamiento e idea sobre el tema sería muy apreciado.

También, alguna idea sobre cualquiera de los siguientes:

  1. La mejor forma de implementar el archivo P12 Certifcate con la aplicación iPhone
  2. La mejor manera de asegurar la contraseña para el archivo P12 dentro de la aplicación
  3. Implementar el archivo P12 con la aplicación es una buena práctica
  4. ¿Hay facilidades dentro de los marcos de iPhone para admitir este tipo de comunicación segura? Si no, ¿cuál sería una recomendación alternativa?
+0

Esta pregunta tiene algo de información sobre el mismo: http://stackoverflow.com/questions/2244764/iphone-web-service-calls-to-wcf- service-with-certificate-authentication –

+3

Maike9, ¿ha tenido algún éxito con esto? – dredful

Respuesta

1

general, si desea instalar certificados en el iPhone, hay dos opciones que he encontrado (ambos de here):

  • correo certificado al destinatario. Si es un certificado válido y los encabezados en el correo electrónico están en orden, entonces permitirá que el destinatario del correo electrónico instale el certificado. El problema aquí, por supuesto, es un ataque de hombre en el medio.

  • Utilice la configuración de configuración de iPhone enterpirse.

Eso debería hacerte una parte del camino (instalando el certificado localmente). Debo señalar que, en general, no desea instalar un certifiate para toda la aplicación, pero tiene certificados separados para sus usuarios. Como práctica general, la autenticación de la aplicación es una cosa muy mala , mientras que usted debe ser autenticando al usuario.

Sin embargo, si ya está autenticando al usuario, entonces esto no debería ser un problema, ya que usar la autenticación básica a través de HTTPS funcionaría igual de bien (y sería más fácil de codificar).

+0

¿Podría proporcionar algún motivo/enlace para explicar por qué la autentificación de la aplicación es algo muy malo? También quiero asegurarme de que mi servicio solo pueda ser consumido por APPS autorizadas, pero por cualquier usuario que tenga estas aplicaciones instaladas en su iPhone. –

3

También puede usar la autenticación de usuario/contraseña ssl + en el nivel del mensaje.

+0

¿cómo podemos hacer eso? Soy nuevo en esto, ¿podrías explicarlo con más detalle? – smoothumut

+0

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

0

Estoy de acuerdo con la solución de Yaron Naveh también, probablemente la mejor opción es usar SSL. Creo que el cifrado SSL/TLS es mejor en cuanto al rendimiento que el cifrado basado en mensajes/XML en WCF.

Creo que el certificado probablemente debería ser de una CA de confianza (autoridad de certificación) para que esto funcione. Desde la memoria, tuve dificultades con el SDK de iPhone con certificados autofirmados, pero eso bien puede haber cambiado en el último año ...

10

Para empezar, yo diría que si realmente quiere ser serio, por favor dedique tiempo y recursos adecuados para ello y trátelo como un ciudadano de primera clase en su lista de características. No solo "active SSL" y pretenda que las cosas están seguras. No estoy sugiriendo que estés haciendo esto o que no lo hagas, pero siento que tengo que decirlo antes de continuar.

Dicho esto, probablemente ya sepa que WS- * está construido sobre las solicitudes http, y cada vez que haga un montón de solicitudes http, probablemente encuentre ASIHTTPRequest muy útil en el iPhone. Sin embargo, eso no te llevará el 100% del camino hasta allí.

Desde la perspectiva del iPhone tiene:

  1. El URL loading system, que es una API de alto nivel para tratar los recursos de la red de cualquier tipo
  2. La API CFNetwork C, que es el nivel más bajo y un permite mucho más control de los flujos de tráfico de red y el cifrado de cualquier forma que estimen conveniente
  3. el Certificate, Key, and Trust Services que haga el trabajo pesado, y más específicamente the X509 trust policies

En Macs puedes usar Secure Transport, pero hasta donde yo sé, no lo han portado al dispositivo así que no me distraigo leyendo sobre eso a menos que estés planeando llevar esto al escritorio o son sólo en el estado de ánimo de aprender todo :)

Si usted está haciendo ningún tipo de seguridad con WCF, la primera cosa que probablemente se dio cuenta es que hay many options available to you, pero todo se reduce a esta breve lista:

  1. Seguridad de la capa de transporte (https) con mensajes de texto claros (xml/json/...)
  2. Seguridad de la capa de mensajes (mensajes cifrados) ge cuerpo) durante un transporte abierto (http)
  3. mensajes garantizados más de un transporte garantizado

La última vez que estaba haciendo WCF (hace un año) la recomendación general de Microsoft parecía ser la seguridad de capa de mensajes a través un transporte abierto debido a problemas de firewall/accesibilidad introducidos al intentar asegurar el transporte. Sin embargo, este enfoque suponía que todas las partes involucradas eran capaces de .NET/WCF. Creo que sería más fácil de consumir en el dispositivo si fuera una seguridad de nivel de transporte HTTPS, con cuerpos de mensaje XML o JSON claros. De esta forma, puede aprovechar todas las cosas preparadas en CFNetwork y NSHTTPRequest que Apple ha hecho.

Una vez que obtenga algo que funcione, querrá consultar el Enterprise Deployment Guide, y específicamente la documentación en la Inscripción inalámbrica para que pueda instalar los certificados en los dispositivos.Recuerde, todo es posible, y no tenga miedo de usar uno de esos tickets de soporte de Apple que vienen con el programa :)

EDIT:

me olvidó por completo mencionar los ejemplos GenericKeychain y CryptoExcercise

EDIT 2:

Después de obtener downvoted sin razón aparente, volví a leer mi respuesta y me di cuenta de que divagué demasiado sin responder su pregunta acerca de cómo abrir un archivo p12 en el dispositivo. Debería poder simplemente [[UIApplication sharedApplication] openURL:urlToP12FileEitherLocalOrRemote]] y hacer que se lance al sistema operativo para el procedimiento de instalación.

0

Un iPhone debe poder acceder a una aplicación WCF con certificado. Si convierte su servicio WCF en RP de Azure ACS, debería funcionar usando OAuth entre otros métodos.

Echa un vistazo a las muestras aquí para obtener más: http://acs.codeplex.com/

Cuestiones relacionadas