Windows Phone 7 – Tutorial XXX–Seguridad IV – Seguridad en la red

Si tu aplicación accede a datos sensibles a través de la conexión de datos debemos asegurarnos en implementar mecanismos de autenticación como certificados  y  SSL para la encriptación de datos.

Conexiones Seguras con SSL

El protocolo SSL es el mas sofisticado a la hora de securizar conexiones entre el cliente (nuestro teléfono) y el servicio, utiliza el concepto de criptografia asimétrica y certificación. Cuando Windows Phone inicia una conexión aun servicio remoto se chequea el certificado y la autoridad que emitió el certificado, una vez que el CA es conocido Windows Phone 7 chequea si esta en su lista de entidades certificadoras. Si la encuentra inicia la conexión segura, en caso contario nos mostrará un error y no se conectará al servicio entendiendo que no es de confianza.

Windows Phone 7 viene con algunas entidades certificadoras instaladas, en esta entrada http://msdn.microsoft.com/en-us/library/gg521150(v=VS.92).aspx tenéis la lista completa.

Si queremos testear y abrir una conexión SSL por ejemplo con PayPal vamos a seguir los siguientes pasos.

 

El camino mas rápido para testear una conexión SSL es utilizar el navegador del emulador, abrimos internet explorer en el emulador y ponemos la dirección https://www.paypal.com deberíamos de ver la página de PayPal correctamente

 

image   

 

Vamos a crear una pequeña aplicación para conectarnos a PayPal a través de SSL, lo que nos serviría como ejemplo de conexión a cualquier servicio que sea expuesto a través de SSL siempre que este en la lista de entidades certificadoras que viene en Windows Phone 7 el certificado que utilice.

Creamos la aplicación SSLConnection

 

image

En la pantalla arrastramos un control WebBrowser quedándonos el XAML

 

1 <Grid x:Name="LayoutRoot" Background="Transparent"> 2 <Grid.RowDefinitions> 3 <RowDefinition Height="Auto"/> 4 <RowDefinition Height="*"/> 5 </Grid.RowDefinitions> 6 7 <!--TitlePanel contains the name of the application and page title--> 8 <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> 9 <TextBlock x:Name="SSLConection" Text="SSLConection" Style="{StaticResource PhoneTextNormalStyle}"/> 10 <TextBlock x:Name="PayPal" Text="PayPal" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/> 11 </StackPanel> 12 13 <!--ContentPanel - place additional content here--> 14 <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 15 <phone:WebBrowser HorizontalAlignment="Left" Margin="6,6,0,0" Name="webBrowser1" VerticalAlignment="Top" Height="595" Width="450" /> 16 </Grid> 17 </Grid>

 

Ahora en code-behind en el constructor añadimos el código

 

1 WebClient client = new WebClient(); 2 client.OpenReadCompleted += new 3 OpenReadCompletedEventHandler(HandleResponse); 4 client.OpenReadAsync(new Uri("https://www.paypal.com"));

Y en el manejador del evento

1 void HandleResponse(object sender, OpenReadCompletedEventArgs e) 2 { 3 StreamReader reader = new StreamReader(e.Result); 4 string res = reader.ReadToEnd(); 5 webBrowser1.NavigateToString(res); 6 }

El resultado de ejecutarlas es

 

image

 

Como podéis ver en este tonto ejemplo al ser una entidad certificadora que ya viene instalada en el teléfono no tenemos que hacer nada especial, pero que pasa si quiero usar mi propio certificado ya que utilizar el de estas entidades certificadoras me sale caro, en este caso deberemos de realizar los siguientes pasos

Crear mi propio certificado

Con ISS 7 puedo crear mis propios certificados y además habilitar SSL usando estos certificados de una manera sencilla con estos pasos que explicamos a continuación

 

Abrimos el IIS Manager  Start –> Control Panel –> Administrative Tools –>Internet Information Services (IIS) Manager. Una vez abierto creamos un nuevo sitio Web y le llamamos WP7Server con las propiedades de la imagen

 

image

El siguiente paso es crear nuestro propio certificado, para ello seleccionamos el nodo raíz y nos aparece Certificados del servidor

image

 

Lo seleccionamos y en el menú de la derecha seleccionamos Crear Certificado Autofirmado y le damos el nombre de wp7cert.

 

image

Ahora debemos de habilitar SSL en el sitio web para ello seleccionamos el sitio Web y en el menú de la derecha hacemos click en Enlaces

image

Agregamos uno y en la pantalla seleccionamos https y al pedir el certificado seleccionamos el que hemos creado

image

Ahora necesitamos crear contenido en nuestro sitio web, para este ejemplo crearemos una sencilla pagina html con este código

 

1 <html> 2 <h1>Hola, Windows Phone 7</h1> 3 </html>

Al archivo lo llamaremos index.html, ahora si abrimos internet explorer con la url https://localhost/WP7Server obtendremos la siguiente pantalla

 

image

Si diésemos a continuar accederíamos al sitio web ya que indicamos que confiamos en el certificado, pero esto no es deseable en nuestros desarrollos ya que deberíamos instalar  el certificado en nuestros dispositivos para que no salga la pantalla de advertencia. Para ello seguiremos los siguientes pasos

Primero exportar el certificado para ello desde Internet Explorer pulsamos en Tools y en la pestaña Content pulsamos en certificados

imageimage

Dentro de la lista seleccionamos el que hemos creado y le damos a exportar

image

 

Seleccionamos No exportar la clase privada

image

Seleccionamos DER binario codificado X.509 y el siguiente paso es darle el nombre del fichero, para instalarlo en nuestro dispositivo o emulador lo haremos a través del correo, en el coreo lo seleccionaremos y lo instalaremos de manera que cuando utilicemos este certificado nuestro dispositivo lo reconocerá, para instalarlo en el emulador lo podemos enviar a una cuenta de hotmail y desde el navegador acceder al mensaje.

En el ejemplo hemos visto como acceder a una pagina web nuestra con SSL, este mismo ejemplo de instalación nos valdría para la comunicación entre servicios WCF, por ejemplo si tenemos un servicio con transporte sobre SSL

 

 

1 < system.serviceModel > 2 < services > 3 < service behaviorConfiguration=”SSLServiceBehaviors” 4 name=”WebAuthSample.SSLService” > 5 < endpoint binding=”basicHttpBinding” 6 bindingConfiguration=”securedWithSSL” 7 contract=”WebAuthSample.ISSLService” / > 8 < /service > 9 < /services > 10 < bindings > 11 < basicHttpBinding > 12 <binding name=”securedWithSSL” > 13 <security mode=”Transport” /> 14 </binding> 15 </basicHttpBinding> 16 </bindings> 17 <behaviors> 18 <serviceBehaviors> 19 <behavior name=”SSLServiceBehaviors”> 20 <serviceDebug includeExceptionDetailInFaults=”false” /> 21 </behavior> 22 </serviceBehaviors> 23 </behaviors> 24 </system.serviceModel>

 

 

Las líneas importantes son :

<binding name=”securedWithSSL” >

    <security mode=”Transport” />

</binding>

 

En el cliente, en nuestra aplicación de teléfono

 

1 < system.serviceModel > 2 < bindings > 3 < basicHttpBinding > 4 < binding name=”BasicHttpBinding_ISSLService” maxBufferSize=”2147483647” 5 maxReceivedMessageSize=”2147483647” > 6 <security mode=”Transport” /> 7 </binding> 8 </basicHttpBinding> 9 </bindings> 10 <client> 11 <endpoint address=”https://developmentserver/WebAuthSample/SSLService.svc” 12 binding=”basicHttpBinding” 13 bindingConfiguration=”BasicHttpBinding_ISSLService” 14 contract=”SecuredService.ISSLService” 15 name=”BasicHttpBinding_ISSLService” /> 16 </client> 17 </system.serviceModel>

Con esta configuración podemos invocar un servicio WCF sobre SSL , simplemente indicando el endpoint seguro es decir que la dirección comience por https

Un comentario sobre “Windows Phone 7 – Tutorial XXX–Seguridad IV – Seguridad en la red”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *