Descargue tareas de seguridad de servicios web WebSphere para Dispositivos IBM WebSphere DataPower SOA: Parte 5: Configurando un proxy de servicio web para que interactúe con cliente WCF .NET usando tokens Kerberos con o sin conversación segura

WebSphere DataPower SOA Appliance firmware 3.8.0 interactúa con la infraestructura WCF .NET 3.5 y soporta varios enlaces de sistema WCF. Este artículo describe la interoperabilidad de WCF-DataPower usando tokens Kerberos. Es la parte 5 de la serie "Descarga de Políticas de Seguridad de servicios Web WCF hacia el Dispositivo IBM WebSphere DataPower".

Krithika Prakash, Advisory Software Engineer, IBM  

Krithika es Ingeniera de Software con un total de siete años de experiencia en la industria de las TI. Se especializa en desarrollo de software en las áreas de redes, seguridad, seguridad de servicios web y tecnologías XML/XSLT. Después de haber trabajado para Novell Inc. por 4 años, Krithika se unió a IBM como especialista L3 para WebSphere DataPower. Actualmente está trabajando como desarrolladora en el equipo de seguridad de WebSphere DataPower.



Fred (Xiangfu) Chen, Engineer, IBM

Fred (Xiangfu) Chen es ingeniero en el grupo IBM WebSphere DataPower Security para el Dispositivo de seguridad DataPower con seguridad de nivel de mensaje y control de acceso. Él trabaja en recursos para autenticación de usuario, autorización, y en auditoría y contabilidad; los recursos de seguridad XML o de servicios web como son especificados por diferentes cuerpos de estándares como OASIS WS-Security, XACML, SAML, WS-SX (WS-SecureConversation, WS-Trust y WS-SecurityPolicy), WS-I BSP y LDAP. Él también asume el liderazgo en la implementación, para asegurarse de que la seguridad de mensajes Datapower sea interoperable con otros productos, como MS WCF y WebSphere. Antes de unirse a DataPower, Fred trabajó para SiteMinder de CA y JDK de Sun.



Allis Kuo, Developer, IBM

Allis Kuo es desarrollador y trabaja en DataPower en el IBM China Development Lab en Taipei. Antes de desarrollar en DataPower, Allis también trabajó en desarrollo DataPower SQA y WPS y se interesa en temas relacionados con integración SOA y middleware.



30-01-2012

Introducción

Este artículo describe la interoperabilidad de WCF-DataPower usando tokens Kerberos. Es la parte 5 de la serie "Descarga de Políticas de Seguridad de servicios Web WCF hacia el Dispositivo IBM WebSphere DataPower".Me gustaría reconocer la contribución de Shiu F. Poon en la revisión de este artículo y por suministrar valiosa retroalimentación.


Escenario básico

Usando la infraestructura WCF .NET 3.5, necesitamos configurar el cliente de servicios web para que use autenticación Windows y seguridad de mensajes usando tokens Kerberos e interactuando con DataPower el cual hace proxy de un servicio web. La Figura 1 bosqueja el escenario básico.

Figura 1. Escenario básico
Escenario básico

Requisitos

  • WebSphere DataPower 3.8.0 o superior
  • Windows 2003 Server con Active Directory
  • Computadora Windows Client la cual es parte del dominio Active Directory
  • Infraestructura Microsoft .NET 3.5
  • Visual Studio 2008 (Opcional. Pero facilita las cosas)

Pasos de configuración

Observemos en detalle las siguientes tres áreas principales de configuración:

  1. Creación de Principals y Keytabs en Active Directory
  2. Configuración del WCF Client
  3. Configuración del Dispositivo DataPower

Creando Principals y Keytabs en Active Directory

Configurando Active Directory e IIS

Si usted ya tiene Active Directory e IIS activos y funcionando en su configuración, sáltese esta sección y pase a la siguiente sección Configuración del WCF Client.

  • Instale Active Directory (Controlador de dominio)
    Aprenda más sobre [InstallActiveDirectory] o [InstallActiveDirectoryDNS] para instalar y configurar el controlador de dominio de la sección recursos.
  • Instale IIS (Servidor de aplicaciones)
    Aprenda más sobre [InstallIIS] en la sección de recursos. Esto le ayudará con la instalación de IIS. Consulte también la sección de solución de problemas para problemas como “IIS hosted service fails”.

Cree un SPN para representar el servicio al que hace proxy mediante el WebSphere DataPower en Active Directory

Para que el cliente obtenga un tiquete Kerberos para generar el token Kerberos, usted necesita crear un SPN (Nombre Principal de Servicio) para el objetivo. Usted necesitará acceso a la consola Active Directory Users and Computers y a la herramienta "setspn.exe" (para Windows 2003 usted puede descargar esto de Microsoft o encontrarlo en el CD de herramientas de Windows 2003).

  1. Cree un pseudo usuario AD el cual se utilizará para correlacionar el SPN. Para este ejemplo, cree un usuario AD "wcfservice".
  2. Cree un SPN correlacionado con el usuario "wcfservice" creado arriba:
    setspn –a dpbox/wcfservice wcfservice
    donde "dpbox" es un prefijo arbitrario y "wcfservice" es el nombre usado para representar el dispositivo WebSphere DataPower.
    NOTA: El SPN es una cadena de caracteres y usted puede seleccionar cualquier nombre o formato. Por ej. El SPN podría ser "HOST/hostname:port" o "HOST/hosname", etc,..
  3. Revise para asegurarse que el SPN haya sido registrado correctamente:
    setspn -l wcfservice
    Usted debe ver el SPN listado.

Genere una Keytab Kerberos para el SPN

Para que Kerberos funcione, usted necesitará correlacionar el SPN con el usuario y crear una keytab Kerberos que se utilizará más adelante con WebSphere DataPower. Para hacer esto, usted utiliza el recurso "ktpass". Aprenda más sobre [InstallKTPass] en la sección recursos, para instalarlo.

Para el usuario de muestra 'wcfservice' y el dominio de muestra "WPS.CSUPPORT.COM", el comando ktpass debe verse como sigue:

ktpass -out c:\temp\wcfservice.keytab -princ dpbox/wcfservice@WPS.CSUPPORT.COM -mapUser wcfservice -mapOp set -pass <passwordforuser> -crypto RC4-HMAC-NT [–ptype KRB5_NT_PRINCIPAL] [ –kvno <kvno>]

NOTA:

  1. Es importante especificar que la opción -crypto sea RC4-HMAC-NT para que esto funcione. (DES es más débil y tal vez no interactúe con WebSphere DataPower).
  2. –ptype KRB5_NT_PRINCIPAL es opcional.
  3. –kvno <kvno> solo es requerida cuando usted desea sobrescribir el número de versión de clave por un valor específico, digamos, "-kvno 1". Un problema bastante común que se ve en el keytab generado es "kvno mismatch error". Consulte la sección de solución de problemas sobre problemas relacionados y cuáles mensajes de error esperar de WebSphere DataPower cuando hay una no coincidencia kvno.

Usted tendrá que copiar este archivo keytab "c:\temp\wcfservice.keytab" en DataPower. Vea la sección Configuración del Dispositivo DataPower.


Configurando el WCF Client

Descargue las muestras WCF

En este artículo intentaremos demostrar la interoperabilidad de las muestras WCF y el WebSphere DataPower configurados para usar autenticación Windows y seguridad de mensaje usando tokens Kerberos. Como primer paso, necesitamos asegurarnos que tenemos un cliente y servicios de muestra WCF funcionales (sin incluir todavía a WebSphere DataPower en el contexto). Si usted ya tiene un cliente WCF, sáltese esta sección y pase a la siguiente Modificación del archivo app.config.

  1. Instale las muestras WCF [WCFSamples]. Asegúrese de no recibir ningún mensaje de error ni de advertencia.
    Nota: Usted debe haber instalado Active Directory e IIS como se explicó en la sección Configurando Active Directory e IIS.
  2. Vamos a usar el proyecto "WCF_SAMPLES\WCF\Basic\Binding\WS\Http" para construir la solución en Visual Studio 2008.
  3. Verifique que el servicio esté funcionando navegando hacia http://localhost/servicemodelsamples/service.svc?wsdl

Modificación del archivo app.config

  1. Desactive el uso de tokens SPNEGO predeterminados.

En cuanto usted tiene un cliente y un servicio WCF funcionales, puede proceder a modificar app.config, para desactivar el uso predeterminado de tokens SPNEGO y activar en su lugar el uso de tokens Kerberos. (Para poder interactuar con DataPower, el cliente WCF debe estar usando tokens Kerberos para firmar y cifrar las solicitudes). Esto se puede hacer configurandonegotiateServiceCredential="false" en app.config

Listado 1. Desactive el uso de tokens SPNEGO predeterminados
<security mode="Message">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
                            realm="" />
    <message clientCredentialType="Windows" negotiateServiceCredential="false"
                            algorithmSuite="Basic128" establishSecurityContext="false" />
</security>
Listado 2. Modifique algorithmSuite por Basic128
<security mode="Message">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
                            realm="" />
    <message clientCredentialType="Windows" negotiateServiceCredential="false"
                            algorithmSuite="Basic128" establishSecurityContext="false" />
</security>

En el paso anterior desactivamos negotiateServiceCredential. Esto da como resultado la modificación de algorithmSuite por Basic128, en lugar del predeterminado Basic256. Esto es requerido debido al hecho de que los tiquetes Kerberos con emitidos con claves de 128 por diseño del Active Directory. Si está interesado(a) en los detalles, consulte la sección de Solución de Problemas.

Usted puede activar o desactivar la conversación segura con el parámetro "establishSecurityContext". Configurarlo en "false", desactiva la conversación segura. Configurarlo en "verdadero", la activa.

Listado 3. Active/Desactive la conversación segura
<security mode="Message">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
                            realm="" />
    <message clientCredentialType="Windows" negotiateServiceCredential="false"
                            algorithmSuite="Basic128" establishSecurityContext="false" />
</security>

Cuando se activa la conversación segura, el cliente SCF envía una solicitud inicial "RequestSecurityToken", junto con tokens Kerberos. Al recibir esta solicitud WebSphere DataPower validará los tokens Kerberos y generará un SCT (Security Context Token) y lo enviará al cliente. Todas las transacciones adicionales entre WebSphere DataPower y el Cliente serán firmadas/cifradas usando este SCT.

Note que si usted habilita la conversación segura en el cliente WCF, tendrá que configurar DataPower para que maneje las solicitudes iniciales de conversación segura. Consulte la sección Para manejar la Conversación Segura.

Luego, incluya un elemento 'identidad' con el nombre de servicio principal creado arriba. (Tanto en la configuración del cliente como en la del servicio).

Listado 4. Desactivar/Activar la conversación segura
<identity>
    <servicePrincipalName value="dpbox/wcfservice@WPS.CSUPPORT.COM"/>        
</identity>

Note que el principal de servicio especificado aquí debe ser el mismo especificado en el comando ktpass descrito en la sección Genere una Keytab Kerberos para el SPN.

A continuación usted configurará el Manejador de Primer Plano HTTP WebSphere DataPower para manejar todas las solicitudes entrantes del cliente WCF. Modifique app.config para que apunte al nombre host y puerto WebSphere DataPower. Asegúrese de tener el URI adecuado.

Además, antes de modificar el punto final, usted puede intentar volver a ejecutar el cliente y el servicio WCF (sin tener en cuenta WebSphere DataPower todavía) para asegurar que usted tiene una configuración de cliente/servicio WCF funcional que use tokens Kerberos en lugar de los tokens Spnego predeterminados.

Su app.config modificado se debe ver como el mostrado en el Listado 5.

Listado 5. WCF Client App.config
<?xml version="1.0 encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <ws2007HttpBinding>
                <binding name=WS2007HttpBinding_ICalculator" closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00"
                    sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" 
                                hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                                maxArrayLength="16384"
                        maxBytesPerRead="4096" maxTableCharCount="16384"/>
                    <reliableSession ordered="true" inactivityTimeout="00:10:00" 
                                enabled="false"/>
                    <security mode="Message">
                        <transport clientCredentialType="Windows" 
                                proxyCredentialType="None" realm=""/>
                        <message clientCredentialType="Windows" 
                                negotiateServiceCredential="false" 
                                    algorithmSuite="Basic128" 
                                    establishSecurityContext="true"
                    </security>
               </binding>
           </ws2007HttpBinding>
        </bindings>
        <client>
        <!-- endpoint DNS name "datapower" must be configured within local hosts file -->
            <endpoint address="http://datapower:8009/WS2007HttpKrbSC/service.svc"
                binding="ws2007HttpBinding"
                bindingConfiguration="WS2007HttpBinding_ICalculator"
                contract="ICalculator" name="WS2007HttpBinding_ICalculator_DP">
                <identity>
                <servicePrincipalName value="dpbox/wcfservice@WPS.CSUPPORT.COM"/>
                </identity>
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

Configurando WebSphere DataPower

Configure un WS-Proxy

Se debe configurar un proxy de servicios web, de manera que imponga las políticas requeridas por wsHttpBinding/ws2007HttpBinding y que requiera que las transacciones sean firmadas/cifradas usando tokens Kerberos. Es necesario completar lo siguiente:

  1. Añadir el wsdl de servicio
  2. Añadir la Política WS-Security requerida
  3. Anexar el 'Policy Parameter Set' requerido
  4. Configurar la pestaña 'Proxy Settings' para descifrado

Este artículo supone que usted está familiarizado con la configuración básica del proxy de los servicios web – añadiendo un wsdl, configurando el manejador de primer plano http, proporcionando el URI adecuado y configurando el servicio de segundo plano. Note que la configuración WebSphere DataPower del anexo incluye todas estas configuraciones para un número de WS-Proxies de muestra.

1. Añadir el wsdl de servicio

El wsdl para el servicio de calculadora de muestra (para w2007HttpBinding) puede obtenerse navegando hacia http://localhost/servicemodelsamples/service.svc?wsdl en el servicio .NET donde usted tiene instaladas las muestras WCF. Si usted está planeando importar este wsdl hacia WebSphere DataPower, es posible que tenga que copiar archivos de esquema adicionales en DataPower y también modifica r el URI de importación wsdl, como se muestra:

<wsdl:import namespace = "http://Microsoft.ServiceModel.Samples" location =
        "local:///CalculatorServiceDefinition.wsdl"/>

Asegúrese también de remover los elementos de política del archivo wsdl. Usted estará añadiendo las políticas de plantilla proporcionadas por el WebSphere DataPower como elementos de referencia, como se explicó en las secciones anteriores.

Figura 2. Añadiendo el wsdl de servicio
Añadiendo el wsdl de servicio

En este ejemplo, el segundo plano es un firewall XML de bucle de retorno que captura un archivo AddResponse.xml. Normalmente esto es reemplazado por un servidor web de segundo plano.

El URI Local debe coincidir con lo que está especificado en el punto final del app.config del cliente.

2. Añada la Política WS-Security requerida

WebSphere DataPower ha proporcionado numerosos archivos de plantilla en el directorio "store://policies/templates/dotnet" . Debería escogerse el archivo de plantilla adecuado y el wsu:id adecuado dentro de este y añadirlo al wsdl. Vamos a ver cómo elegir el archivo de plantilla 'correcto' y el wsu:id.

En este ejemplo, el cliente WCF es configurado para que use ws2007HttpBinding con tokens Kerberos y tiene desactivada la conversación segura. Note también AlgorithmSuite en el archivo app.config en el archivo del cliente. Es te está configurado como Basic128. Por lo tanto, los siguientes son los parámetros que debemos considerar cuando estemos seleccionando el archivo de plantilla en el directorio 'store://policies/templates/dotnet' .

Template file: wsp-sp-1-2-ws2007HttpBinding.xml
Binding: symmetric
Token: Kerberos
AlgorithmSuite: Basic128 
Secure Conversation: No

Por lo tanto, el elemento de referencia de política debe ser como:

<wsp:PolicyReference URI="store:///policies/templates/dotnet/wsp-sp-1-2-ws2007HttpBinding.xml#symmetric-kerberos-basic128"/>.

Las políticas de entrada y salida deben añadirse como se muestra en el Listado 6.

Listado 6. Añadiendo PolicyReference a un wsdl de servicio
<wsdl:import namespace = "http://Microsoft.ServiceModel.Samples" location =
"local:///CalculatorServiceDefinition.wsdl"/>
<wsdl:types/>
<wsdl:binding name = "WS2007HttpBinding_ICalculator" type = "i0:ICalculator">
    <wsp:PolicyReference
URI="store:///policies/templates/dotnet/wsp-sp-1-2-ws2007HttpBinding.xml
                                            #symmetric-kerberos-basic128"/>
    <soap12:binding transport = "http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="Add">
        <soap12:operation soapAction =
"http://Microsoft.ServiceModel.Samples/ICalculator/Add" style = "document"/>
        <wsdl:input>
            <wsp:PolicyReference
URI="store:///policis/templates/dotnet/wsp-sp-1-2-ws2007HttpBinding.xml#input"/>
            <soap12:bosy use = "literal"/>
        </wsdl:input>
        <wsdl:output>
            <wsp:PolicyReference
URI="store:///policies/templates/donet/wsp-sp-1-2/ws2007HttpBinding.xml#output"/>
            <soap:12body use = "literal"/>
        </wsdl:output>
    </wsdl:operation>       
</wsdl:binding>
<wsdl:service name = "CalculatorService">
    <wsdl:port name = "WS2007HttpBinding_ICalculator" binding =
"tns:WS2007HttpBinding_ICalculator">
        <soap12:address location = "http://wcfnet/ServiceModelSamples/service.svc"/>
        <wsa10:EndpointReference>
            <wsa10:Address>http://wcfnet/ServiceModuleSamples/service.svc</wsa10:Address>
            <Identity xmlns =
"http://schemas.xmlsoap.org/ws/2006/02/addressingidentitiy">
                <Spn>HOST/wcfnet</Spn>
            </Identity>
        </wsa10:EndpointReference>
    </wsdl:port>
</wsdl:service>

Asegúrese también de activar "WSDL-Embedded Policy References" en la pestaña de política, como se muestra en la figura a continuación.

Figura 3. Active Referencias de Política WSDL Incorporada
Active Referencias de Política WSDL Incorporada

Note que en lugar de modificar el wsdl usted puede retener el wsdl de servicio original y anexar las referencias de política de la pestaña "policy" de la webgui como se muestra en la Figura 4. pero hay una limitación. Usted no puede usar la webgui para acoplar la política al 'Message Policy Subject'. Por lo tanto en este ejemplo, además de lo que se muestra en la Figura 4, usted aún necesita añadir las referencias de política de entrada y salida en el wsdl de servicio:

<wsdl:input>
    <wsp:PolicyReference URI=
"store:///policies/templates/dotnet/wsp-sp-1-2-ws2007HttpBinding.xml
                           #input"/>   
    <soap12:body use = "literal"/>
</wsdl:input>
<wsdl:output>
    <wsp:PolicyReference URI=
"store:///policies/templates/dotnet/wsp-sp-1-2-ws2007HttpBinding.xml
                            #output"/>  
    <soap12:body use = "literal"/>
</wsdl:output>
Figura 4. Anexe política a wsdl de servicio usando WebGUI
Anexe política a wsdl de servicio usando WebGUI

3. Anexar el ‘Policy Parameter Set' requerido

En Policy Parameter Set, configure los parámetros para un Token Kerberos mostrado en la Figura 5.

Kerberos Server Principal - este será el SPN creado antes en Genere una Keytab Kerberos para el SPN. p. ej. dpbox/wcfservice@WPS.CSUPPORT.COM

Kerberos Client Principal – El nombre principal de aquel que firmó la solicitud de mensaje. En nuestro ejemplo, este es wcfclient@WPS.CSUPPORT.COM. Este es el nombre principal del usuario que está en sesión activa en la máquina cliente WCF y que invocó el programa cliente. Note que el “Kerberos Client Principal” realmente no se usa, a menos que usted active el parámetro "Enforce Kerberos Client Principal".

Kerberos Keytab – Este es el keytab del principal de servidor. Si todavía no está creado, cree un "Kerberos keytab object" subiendo el archivo keytab creado usando el comando ktpass. Vea la sección Creando Principals y Keytabs en Active Directory.

Interoperable with Microsoft: Usted necesita añadir este parámetro siempre que necesite que WebSphere DataPower interactúe con cualquiera de los enlaces soportados por Microsoft.

Note que el dominio de política debe coincidir con lo que está especificado en el archivo de plantilla. En este ejemplo, usted puede confirmar revisando en el archivo de pantalla "store:///policies/templates/dotnet/wsp-sp-1-2-ws2007HttpBinding.xml" donde se especifica que el espacio de nombre de política de seguridad es"xmlns:sp = http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702". Así que usted tendrá que añadir los parámetros de política a este nombre de espacio.

Figura 5. Añada 'Policy Parameter Set' al wsdl de servicio
Añada 'Policy Parameter Set' al wsdl de servicio

4. Configure la pestaña Proxy Settings para descifrado

Cuando esté usando wsHttpBinding/ws2007HttpBinding los mensajes son firmados y cifrados usando tokens Kerberos. P ara descifrar el mensaje entrante, las credenciales de descifrado deben estar especificadas en la pestaña 'proxy settings' del proxy de servicios web mostrado en la Figura 6. El nombre Server Principal debe ser el mismo especificado en el comando ktpass y el keytab debe ser el creado usando el comando ktpass descrito en Genere una Keytab Kerberos para el SPN. El nombre principal de cliente aquí es opcional.

Figura 6. Credenciales de descifrado en la pestaña Proxy Settings
Credenciales de descifrado en la pestaña Proxy Settings

Conversación segura

Si el cliente WCF está configurado para permitir una conversación segura (establishSecurityContext="true"), entonces WebSphere DataPower debe estar configurado para manejar eso. Este involucra los siguientes pasos, adicionalmente a los pasos explicados en las secciones anteriores.

  1. Añadir el wsdl STS para manejar solicitudes de conversación segura iniciales
  2. Añadir la Política WS-Security requerida para el wsdl STS
  3. Anexar el 'Policy Parameter Set' requerido para el wsdl STS
  4. Desactivar la validación de esquema

1. Añadir el wsdl STS para manejar solicitudes de conversación segura iniciales

Para manejar solicitudes de conversación segura iniciales (RequestSecurityToken), necesitamos añadir un wsdl STS al proxy de servicios web. Vea la Figura 7 a continuación. Note el manejador de punto final local y el URI. Este debe coincidir con lo que está configurado para el wsdl de servicio.

Figura 7. Añada wsdl STS para manejar la conversación segura
Añada wsdl STS para manejar la conversación segura

2. Añadir la Política WS-Security requerida para el wsdl STS

El archivo de plantilla junto con el wsu:id correcto también deben añadirse al wsdl sts. Note que como la conversación segura está activada, el elemento de referencia de política debe ser <wsp:PolicyReference URI="store:///policies/templates/dotnet/wsp-sp-1-2-ws2007HttpBinding.xml #symmetric-kerberos-sc-basic128"/> tanto para el wsdl STS como para el wsdl de servicio. El Listado 7 muestra un wsdl STS.

Listado 7. Añadiendo PolicyReference al wsdl STS
<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions targetNamespace="http://schemas.xmlsoap.org/ws/2005/02/trust"
    xmlns:tns="http://schemas.xmlsoap.org/ws/2005/02/trust"
    xmlns:sp="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200512"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:echo="http://com/ibm/was/wassample/sei/echo/"
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
    xmlns:wsp="http://www.w3.org/2006/07/ws-policy"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:wsu=http://docs.oasis-open.org/wss/2004/01/
oasis-200401-wss-security-utility-1.0.xsd"/>

<wsdl:types>
    <xs:schema targetNamespace="http://schemas.xmlsoap.org/ws/2005/02/trust"
blockDefault="#all" elementFormDefault="qualified">
        <xs:element name="RequestSecurityToken">
            <xs:complexType>
                <xs:sequence>
                    <xs:any namespace="##any" maxOccurs="unbounded"/>
                </xs:sequence>
                <xs:anyAttribute namespace="##any" processContents="lax"/>
            </xs:complexType>                
        </xs:element>
        <xs:element name="RequestSecurityTokenResponse">
            <xs:complexType>      
                <xs:sequence> 
                    <xs:any namespace="##any"/>        
                </xs:sequence> 
            </xs:complexType>
        </xs:element>
    </xs:schema>
</wsdl:types>

<!--Message part definitions for the bootstrap request/response.-->
<wsdl:message name ="RequestSecurityToken">
    <wsdl:part name="Body" element="tns:RequestSecurityToken"/>

<!--Endpoint/operation definition for bootstrap messages Policy
        attach here must include -->

<wsdl:portType name="Test">
    <wsdl:operation name="RequestSecurityToken">
        <wsp:PolicyReference URI=
"store:///policies/templates/dotnet/
wsp-sp-1-2-ws2007HttpBinding.xml#symmetric-kerberos-sc-basic128"/>
        <wsdl:input message="tns:RequestSecurityToken"/>
        <wsdl:output message="tns:RequestSecurityTokenResponse"/>
    </wsdl:operation>
<wsdl:portType>

<wsdl:binding name="T1Binding" type="tns:Test">
    <soap12:binding style="document"
transport="http://schemas/xmlsoap.org/soap/http"/>
    <wsdl:operation name="RequestSecurityToken">
<!-- 
    <soap12:operation
soapAction="http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT"/>
    <soap12:operation
soapAction="http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT/Cancel"/>
-->
<!-- attach the application binding to the wsdl:input and wsdl:output, so
    the policy framework can figure out how to deal with other traffic, others
    than the Issue
-->
    <wsdl:input>  
        <wsp:PolicyReference
URI="store:///policies/templates/dotnet/wsp-sp-1-2-ws2007HttpBinding.xml#input"/>
        <soap12:body use="literal"/>
    </wsdl:input>   
    <wsdl:output>
        <wsp:PolicyReference
URI="store:///policies/templates/dotnet/wsp-sp-1-2-ws2007HttpBinding.xml#output"/>
         <soap12:body use="literal"/>
    </wsdl:output>
</wsdl:operation>
</wsdl:binding>

<wsdl:service name="Test">
    <wsdl:port name="BootstrapPort" binding="tns:T1Binding">
        <soap12:address location="https://www.soaphub.org/RequestSecurityToken"/>
    </wsdl:port>
</wsdl:service>
</wsdl:definitions>

3. Anexar el 'Policy Parameter Set' requerido al wsdl STS

Anexe el mismo parámetro de política descrito en Anexar el 'Policy Parameter Set' requerido al punto final wsdl STS mostrado también en la Figura 8.

Figura 8. Anexe el 'Policy Parameter Set' al wsdl STS
Anexe el 'Policy Parameter Set' al wsdl STS

4. Desactivar la validación de esquema

La respuesta del ‘RequestSecurityToken’ está firmada y cifrada. El esquema de validación debe estar desactivado para los mensajes tanto de solicitud como de respuesta para el wsdl STS, y debe ser desactivado para el mensaje de respuesta para el servicio wsdl como se muestra en la Figura 9.

Figura 9. Desactivar la validación de esquema
Desactivar la validación de esquema

Diferencias entre wsHttpBinding y ws2007HttpBinding

Tal vez haya notado que los ejemplos a lo largo de este artículo usaron ws2007HttpBinding. ¿Qué sucedería si usted desea usar wsHttpBinding? La siguiente es una lista de las diferencias:

  1. Mientras configura el cliente WCF, use <wsHttpBinding> (en lugar de ws2007HttpBinding) en el app.config. Un ejemplo se muestra en el Listado 8.
Listado 8. app.config de muestra para wsHttpBinding
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsHttpBinding>
                <binding name="WSHttpBinding_ICalculator" 
closeTimeout="00:01:00"
                    openTimeout="00:01:00" receiveTimeout="00:10:00" 
sendTimeout="00:01:00"
                    bypassProxyOnLocal="false" transactionFlow="false" 
                                hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" 
useDefaultWebProxy="true"
                    allowCookies="false">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" 
                                maxArrayLength="16384"
                        maxBytesPerRead="4096" maxTableCharCount="16384"/>
                    <reliableSession ordered="true" 
inactivityTimeout="00:10:00" 
                                enabled="false"/>
                    <security mode="Message">
                        <transport clientCredentialType="Windows" 
                                proxyCredentialType="None" realm=""/>
                        <message clientCredentialType="Windows" 
                                negotiateServiceCredential="false" 
                                    algorithmSuite="Basic128" 
                                    establishSecurityContext="true"
                    </security>
               </binding>
           </wsHttpBinding>
        </bindings>
        <client>
            <!-- endpoint DNS name "datapower" 
must be configured within local hosts
                    file-->
               <endpoint address="http://datapower:8007/WSHttpKrb/service.svc"
                    binding="wsHttpBinding" 
bindingConfiguration="WSHttpBinding_ICalculator"
                    contract="ICalculator" name="WSHttpBinding_ICalculator_DP">
                    <identity>
                        <servicePrincipalName
                            value="dpbox/wcfservice@WPS.CSUPPORT.COM"/>
                    </identity>
                </endpoint>
        </client>
    </system.serviceModel>
</configuration>
  1. Mientras configura el archivo DataPower wsdl y anexa la Política WS-Security, asegúrese de seleccionar el archivo de plantilla correcto correspondiente a wsHttpBinding, cuando añada las referencias de política. Por ejemplo, este debe ser <wsp:PolicyReference URI="store:///policies/templates/dotnet/wsp-sp-1-1-wsHttpBinding.xml#symmetric-kerberos-sc-basic128"/>
  2. Mientras configura el conjunto de parámetros DataPower Policy, asegúrese de tener asignados todos los parámetros de política hacia el dominio de política correspondiente a wsHttpBinding. Por ejemplo, este debe ser http://schemas.xmlsoap.org/ws/2005/07/securitypolicy

Si usted está en este punto, ya cuenta con la configuración requerida. Ejecute el programa de cliente y vea como procesa la respuesta desde WebSphere DataPower.


Solución de problemas

El servicio IIS hospedado falla

De forma predeterminada, cuando se configura IIS, el ASP.NET usa versión 1.0. Usted necesita registrar la 2.0 usando aspnet_regiis.exe -i en
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727

Si el paso anterior no está, entonces no podremos implementar el servicio de muestra (descrito en este artículo) IIS.

Mensaje "Cannot parse file for Kerberos Keytab" o "Bad checksum on Kerberos AP-REQ"

Si usted ve este error en DataPower, lo más probable es que haya dado con el famoso error de no coincidencia kvno o con un error de no coincidencia de algoritmo. Desafortunadamente, los mensajes de error/registro en WebSphere DataPower no pueden señalar los detalles exactos de la no coincidencia o para ese caso, si realmente es un error de no coincidencia. (Posiblemente puede ser un archivo keytab corrupto).

Un error de no coincidencia de algoritmo puede suceder cuando el algoritmo de cifrado usado en el token AP-REQ es diferente al especificado en la keytab. Es posible que usted vea el mensaje de error "Bad checksum on Kerberos AP-REQ". Asegúrese de haber usado RC4-HMAC-NT en el comando ktpass.

Un error de no coincidencia kvno puede presentarse cuando el kvno en la keytab usada por DataPower es diferente d le kvno que está usando el KDC. Usted puede encontrar el número de versión de clave ejecutando el comando [ldifde] en KDC:

ldifde -f c:\spn.txt -d "DC=<yourdomain>,DC=com" -l *,msDS-KeyVersionNumber -r 
                "(serviceprincipalname=<yourspn>*)" -p subtree

Para el ejemplo dado en este artículo, sería:

ldifde -f c:\spn.txt -d "DC=wps,DC=csupport,DC=com" -l *,msDS-K
eyVersionNumber -r "(serviceprincipalname=dpbox/wcfservice*)" -p subtree

Ahora verifique el "msDS-KeyVersionNumber". Este es el kvno que el KDC está usando para este particular SPN.

Por otro lado, usted puede encontrar el kvno usado en el archivo keytab ejecutando el comando kt_util en una máquina Linux:

/usr/kerberos/sbin/ktutil:
read_kt <keytabfileName>

Si no coinciden, regenere el archivo keytab usando el comando ktpass con el parámetro "–kvno" con el valor que está usando el KDC.

Si todavía obtiene el error, es posible que las cosas se hayan desorganizado por múltiples modificaciones al SPN o su usuario. Elimine el usuario spn (setspn –d), e inicie desde cero creando el usuario, creando un SPN, creando el keytab usando el comando ktpass y copiándolo en DataPower. Asegúrese de que los nombres principal sean consistentes y que distingan mayúsculas de minúsculas, y además el nombre del dominio debe estar en mayúsculas.

algorithmSuite=Basic256 does not work

Cuando usted desactiva NegotiateServiceCrendential, entonces el algorithmSuite=Basic256 no funciona. La razón (según lo informado por el soporte Microsoft) es la siguiente:

  1. Los tiquetes Kerberos son emitidos con claves de 128 bit por diseño. Por lo tanto, estos no funcionarán con ningún algoritmo de 256 claves usado por la suite de algoritmo 'Basic256'. La solución en este caso es usar 'Basic128', que WCF de forma predeterminada cuando usa autenticación directa Kerberos p. ej. cuando negotiateServiceCredentials está configurado en 'false'.
  2. La misma configuración funciona cuando negotiateServiceCredentails=true. Esto es porque con negotiateServiceCredentails=true, usamos SspiNegotiation (multi) en lugar de Kerberos direct (uno solo). Con SspiNegotiation, WCF genera una clave criptográfica de tamaño adaptable después de negociar detalles de seguridad y de verificar compatibilidad en ambos extremos. No obstante, tal libertad no existe en el caso de la modalidad directa de Kerberos. El cliente genera claves Kerberos de 128 bit que flaquean en el extremo del servicio.

Observando la sonda en WebSphere DataPower

Si usted tiene Probe activado en DataPower, podrá ver los mensajes de solicitud y respuesta que pueden ser útiles para depuración.

Si usted ha configurado para conversación segura, podrá ver tres solicitudes mostradas en la figura a continuación.

  1. Solicitud de token Security Context.
  2. Solicitud de servicio real para añadir dos números.
  3. Solicitud para cancelar el token Security Context.
Figura 10. Observando la sonda
Observando la sonda

Qué hay de nuevo en 3.8.0

Esta sección lista los nuevos contenidos en 3.8.0.

Parámetro de política 'Disable SSL Cipher Suite Check'

Este es un parámetro de política que le permitirá desactivar la verificación ssl cipher por parte del proxy de servicios web. Esto puede ser útil cuando usted ha configurado un manejador de primer plano https y tiene errores desde el proxy de servicios web como "Execution of 'store:///dp/transport-check.xsl' aborted: Invalid SSL bulk encryption key length".

En cuanto usted desactiva "Disable SSL Cipher Suite check" como en la Figura 11, el proxy de servicios web no llevará a cabo ninguna validación en la suite SSL cipher que ya esté negociada por el manejador de primer plano https.

Figura 11. Parámetro de política 'Disable SSL Cipher Suite Check'
Parámetro de política 'Disable SSL Cipher Suite Check'

Note que usted también puede trabajar en torno al error "Invalid SSL bulk encryption key length" , configurando su perfil críptico de manejador de primer plano https para que use el algoritmo que ordena el proxy de servicios web. Pero eso significaría que usted estaría restringiendo a una gran cantidad de clientes que no soportan ese algoritmo en el reconocimiento SSL.

Parámetro de política 'Enforce Kerberos Client Principal'

El parámetro "Kerberos client principal" realmente no se utiliza sino hasta que se habilita el parámetro "Enforce Kerberos Client Principal". En cuanto se activa, (Figura 12) las acciones de verificación generadas por la política de seguridad comparan el valor de "Kerberos client principal" con el del signatario del mensaje en el mensaje de solicitud entrante. Si no coincide, entonces el mensaje es rechazado.

Figura 12. Parámetro de política 'Enforce Kerberos Client Principal'
Parámetro de política 'Enforce Kerberos Client Principal'

Enlaces WCF y tokens soportados

Nosotros soportamos los siguientes enlaces y los archivos de muestra adjuntos contienen el proxy de servicios web configurado para cada uno de estos enlaces, como muestra la Figura 13.

  • BasicHttpBinding - SSL activado y SSL activado con requerimiento de cert. de cliente
  • wsHttpBinding/ ws2007HttpBinding – Tokens Kerberos y X509 con y sin conversación segura.
  • wsFederationBinding y ws2007Federation Binding – tokens SAML1 y SAML2.
Figura 13. Proxy de servicios web para cada enlace soportado
Proxy de servicios web para cada enlace soportado

Se han agregado otros archivos de plantilla adicionales al directorio store://policies/templates/dotnet como se muestra en la Figura 14.

Figura 14. Archivos de plantilla
Archivos de plantilla

Cada uno de estos archivos de plantilla contiene múltiples wsu:ids. Consulte en los recursos para aprender más sobre cómo anexar la Política WS-Security requerida y al decidir cómo seleccionar el archivo de plantilla adecuado y el wsu:id contenido, con base en el enlace y en el token usado en la configuración del cliente WCF.

La Figura 15 muestra algunos archivos de plantilla de muestra junto con el wsu:id definido en ellos. Por ejemplo, como usted puede ver los archivos de plantilla son llamados wsp-sp-<version>-<BindingSupported>.xml.

El wsu:ids dentro de cada archivo también sigue una convención de nombres. Por ejemplo, el wsp-sp-1-2-ws2007HttpBinding.xml tiene la convención como <binding>-<token>-<is_sc_enabled>-<algorithmSuite>

Figura 15. Archivos de plantilla y los wsu:ids contenidos
Archivos de plantilla y los wsu:ids contenidos

Conclusión

Este artículo describió un escenario básico donde DataPower y los clientes WCF .NET pueden interactuar usando tokens Kerberos que usen WSHttpBinding/WS2007HttpBinding. Este explicó cómo se puede usar WebSphere DataPower para descargar las tareas de seguridad desde un servidor web. Este artículo tiene tres secciones principales donde se detalló a) cómo preparar el entorno Kerberos, b) cómo configurar el cliente .NET WCF, y finalmente c) cómo configurar el dispositivo Websphere DataPower. También explicó cómo se puede activar la conversación segura tanto en el cliente como en el dispositivo DataPower. La sección de Solución de Problemas de este artículo explicó los 'trucos' y proporcionó soluciones para varios problemas que se podrían encontrar mientras se configura el Windows Client o el dispositivo DataPower. Finalmente, el artículo resaltó el nuevo contenido añadido en el release 3.8.0 del WebSphere DataPower.


Descargar

DescripciónNombretamaño
Examplesattachment.zip18MB

Recursos

Aprender

Obtener los productos y tecnologías

Comentar

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=SOA y servicios web , WebSphere
ArticleID=788836
ArticleTitle=Descargue tareas de seguridad de servicios web WebSphere para Dispositivos IBM WebSphere DataPower SOA: Parte 5: Configurando un proxy de servicio web para que interactúe con cliente WCF .NET usando tokens Kerberos con o sin conversación segura
publish-date=01302012