You are on page 1of 11

Seguridad de ACT3

Implementacin de seguridad en servicios WCF de Licensing y Check Cashing

16-2-2013

Actividades realizadas para implementacin de seguridad en los servicios de Licensing y Check Cashing se describen a continuacin:

Generacin e instalacin de certificados de confianza x509 para entornos de desarrollo.

Los certificados de confianza de base 64 o tambin conocidos como certificados x509 son utilizados en nuestro caso para establecer un canal de comunicacin entre el servicio WCF y el cliente que consumir el servicio. Para la creacin de estos archivos en entornos de desarrollo se hizo uso del comando makecert proporcionado por Visual Studio.

makecert -n "CN=MiEntidadCertificadora" -r -sv MiEntidadCertificadora.pvk MiEntidadCertificadora.cer

En el parmetro -n indicaremos el nombre del certificado. El comando nos pedir las contraseas para las claves privada y pblica del certificado, y generar dos ficheros, uno con la clave privada (extensin .pvk) y otro con el certificado (extensin .cer).

A continuacin tendremos que instalar el certificado generado. Abrimos una consola de administracin (Inicio - Ejecutar - MMC) y realizamos los siguientes pasos:
1. Men File -> Add/Remove Snap-in. Click en Add 2. Seleccionar Certificates y hacer click en Add 3. Seleccionar la opcin de "Computer account", para que el certificado est disponible para todos los usuarios, y pulsar Next 4. Dejar seleccionado "Local computer: (the computer this console is running on)" y pulsar Finish. Cerrar los dilogos que queden abiertos 5. En el panel de la izquierda, expandir el nodo Certificates (Local Computer) y dentro de l la carpeta "Trusted Root Certification Authorities" 6. Click derecho sobre la subcarpeta Certificates -> All Tasks -> Import 7. En la pantalla de "File to Import", click en Browse y abrir el fichero .cer que habamos generado 8. En la pantalla "Certificate Store" dejar seleccionado el valor predeterminado

Antes de continuar cabe destacar que es necesario habilitar los permisos de lectura, escritura al certificado desde la consola MMC en el directorio Personal.

Una vez hecho lo anterior procedemos a instalar el certificado usando otra vez la consola de Visual Studio y ejecutando la siguiente instruccin:

makecert -sk <<Nombre nico del certificado>> -iv MiEntidadCertificadora.pvk -n "CN=<<Nombre de la mquina>>" -ic MiEntidadCertificadora.cer -sr localmachine -ss my -sky exchange pe

Se nos pedir la contrasea de la clave privada que habamos introducido previamente al generar el certificado de la entidad certificadora raz. Con este comando aadiremos al almacn de certificados de la mquina un certificado que nos servir para cifrar la comunicacin de nuestro servicio. En este caso no necesitamos instalar este certificado en los clientes ya que obtendremos una copia codificada en base64 durante la generacin del proxy.

Los certificados se estn guardando en el directorio App_Data del directorio del proyecto WCF Service Application.

Creacin de clase para verificar que los usuarios existan en la base de datos correspondiente.

Esta clase deriva de la clase UsernamePasswordValidator ubicada en el espacio de nombres System.IdentityModel.Selectors.

Se implementa un mtodo que recibe el usuario y contrasea del usuario e invoca a un mtodo en la lgica de negocios que verifica que existan en la base de datos el usuario y contrasea correspondiente.

Configuracin del archivo web.config del WCF Service Application para habilitar el uso de certificados de confianza y la autenticacin personalizada usando la clase creada anteriormente.

Adems de lo que dice el encabezado de esta actividad, se tiene que definir el servicio que consumir.

<service name="LicensingSL.LicensingService" behaviorConfiguration="WSSecurityBehavior"> <endpoint address="LicensingSL" binding="wsHttpBinding" contract="LicensingSL.ILicensingService" bindingConfiguration="WSSecurityBinding"/> <endpoint binding="wsHttpBinding" name="mex" contract="IMetadataExchange" /> <host> <baseAddresses> <add baseAddress="http://localhost:8080"/> <add baseAddress="net.tcp://localhost:8080"/> </baseAddresses> </host> </service>

A continuacin definimos dentro del serviceBehaviors las credenciales del servicio, aqu se indica que vamos a utilizar un certificado y el tipo de autenticacin.

<serviceBehaviors> <behavior name="WSSecurityBehavior"> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/>

<serviceCredentials> <serviceCertificate findValue="iQuelo" storeLocation="LocalMachine" storeName="My" <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="LicensingSL.LicUsernamePasswordVa lidator, LicensingSL"/> </serviceCredentials> </behavior> </serviceBehaviors> x509FindType="FindBySubjectName"/>

Por ultimo indicamos que el tipo de binding es wsHttpBinding, el cual es ideal para entornos Internet y especificamos que el modo de la seguridad es por mensaje y que las credenciales de dicho mensaje son por usuario.

bindings> <wsHttpBinding> <binding name="WSSecurityBinding"> <reliableSession enabled="true" ordered="true" /> <security mode="Message"> <message clientCredentialType="UserName"/> </security> </binding> </wsHttpBinding> </bindings>

Registrar sesin del usuario.

Cuando el servicio ha determinado que las credenciales proporcionadas son vlidas entonces se registra automticamente la nueva sesin activa de determinado usuario en la tabla sessions de la base de datos.

************************************************************************************* *************************************************************************************

A continuacin se describen las operaciones y configuracin realizadas en el lado del cliente para los proyectos Licensing y Check Cashing (consumidor del servicio)

Actualizar referencia del servicio.

Una vez realizada la configuracin de seguridad del lado del cliente procedemos a actualizar la referencia del servicio para que el proyecto cliente detecte los cambios del WSDL generado.

Client > ViewModel > Service Reference > ACT3LicensingService Click derecho > Actualizar referencia del servicio

Interfaz genrica para autenticacin por usuario y contrasea del cliente.

Se cre una interfaz llamada ISecurityService en la cual se exponen los siguientes mtodos y eventos:

- ValidateUser: funcin para validar las credenciales de usuario y contrasea proporcionada por el cliente, recibe como parmetro el usuario y contrasea como campos de cadena de texto.

- ValidationSuccessful: evento que sirve para avisar a la vista que la llamada a la funcin ValidateUser se concluy con xito y los datos proporcionados son correctos.

- ValidationFailed: evento que sirve para avisar a la vista que la llamada a la funcin ValidateUser tuvo un error o una excepcin en el peor de los casos, recibe como parmetro un mensaje que proporciona un descripcin breve del error producido. Implementacin de la interfaz ISecurityService.

Se cre una clase llamada SecurityService la cual implementa la interfaz ISecurityService la cual extiende su comportamiento para poder establecer y validar la autenticacin del servicio ACTLicensingService.

Al hacer la llamada al mtodo ValidateUser primero se establecen las credenciales proporcionadas a las siguientes variables de la instancia del servicio:

<nombre instancia del servicio>.ChannelFactory.Credentials.UserName.UserName <nombre instancia del servicio>.ChannelFactory.Credentials.UserName.Password

Respectivamente, hecho esto se llama al mtodo de servicio CreateSession con los parmetros de usuario y contrasea proporcionada, para poder crear una sesin dentro del servidor.

Nota: El cliente del servicio debe de llamar al mtodo de servicio CreateSession antes de cualquier otro mtodo, esto por motivo de seguridad el cual asegura que si llama otro mtodo antes lanza una excepcin SOAP, al finalizar la sesin se debe de llamar al mtodo de servicio CloseSession para cerrar la sesin actual en el servidor.

Formulario de Inicio de sesin.

Dentro del proyecto de interfaz grfica se encuentra un formulario de inicio de sesin este aparece antes que cualquier otra presentacin, contiene dos textbox para proporcionar usuario y contrasea y un botn para validar dichas credenciales.

Al presionar el botn Login se llama al mtodo ValidateUser de la interfaz ISecurityService para validar las credenciales proporcionadas, mediante a la suscripcin de los eventos de dicha interfaz se informa al cliente del proceso de validacin.

Una vez autenticado el usuario el formulario de login redirige al marco de trabajo.

Workflow.

You might also like