Habilitación de la autenticación de certificado de cliente para acceder a los servicios web

Puede configurar la autenticación de certificado de cliente para que las aplicaciones cliente accedan a los servicios web.

Antes de empezar

Debe completar los requisitos previos siguientes antes de habilitar la autenticación de certificado de cliente para acceder a los servicios web:
  • Genere un par de claves privada y pública autofirmadas para el proveedor.
    keytool -genkey -alias default -keystore serverKey.jks -dname "CN=myServer, O=IBM, C=CN" 
        -storepass passw0rd -keypass passw0rd -storetype jks  -validity 1000 -keyalg RSA
  • Exporte el certificado del valor predeterminado e importe el certificado al almacén de confianza.
    keytool -export -alias default -file myserver.cer -keystore serverKey.jks
        -storepass passw0rd -storetype jks
    keytool -import -file myserver.cer -alias default -keystore clientTrust.jks 
        -storepass passw0rd -keypass passw0rd -storetype jks
  • Genere dos pares de claves privada y pública autofirmadas para el cliente.
    keytool -genkey -alias user0 -keystore clientKey.jks -dname "CN=employee0, O=IBM, C=CN"
        -storepass passw0rd -keypass passw0rd -storetype jks  -validity 1000 -keyalg RSA
    keytool -genkey -alias admin0 -keystore clientKey.jks -dname "CN=manager0, O=IBM, C=CN"
        -storepass passw0rd -keypass passw0rd -storetype jks  -validity 1000 -keyalg RSA
  • Exporte los certificados de los dos alias e importe el certificado en el almacén de confianza.
    keytool -export -alias user0 -file user0.cer -keystore clientKey.jks -storepass passw0rd -storetype jks
    keytool -export -alias admin0 -file admin0.cer -keystore clientKey.jks -storepass passw0rd -storetype jks
    keytool -import -file user0.cer -alias user0 -keystore serverTrust.jks -storepass passw0rd -keypass passw0rd -storetype jks
    keytool -import -file admin0.cer -alias admin0 -keystore serverTrust.jks -storepass passw0rd -keypass passw0rd -storetype jks
  • Copie los archivos serverKey.jks, serverTrust.jks, clientKey.jks y clientTrust.jks en el directorio ${server.config.dir}/resources/security.
Nota: El programa de utilidad keytool se encuentra en el directorio de instalación de Java™.

Acerca de esta tarea

Si tiene que utilizar la aplicación cliente de servicio web con la autenticación de certificado de cliente para acceder a los recursos de servicio web protegidos, el cliente debe proporcionar el certificado válido en la solicitud y debe utilizar HTTPS para comunicarse con el proveedor de servicios.

Procedimiento

  1. Habilite las características jaxws-2.2, servlet-3.0 (o servlet-3.1) y appSecurity-2.0 en el archivo server.xml.
    <featureManager>
      <feature>jaxws-2.2</feature>
      <feature>servlet-3.0</feature>
      <feature>appSecurity-2.0</feature>
    </featureManager>
  2. Configure el elemento SSL y el elemento SSL personalizado del cliente en el archivo server.xml.
    <!-- Configuración SSL de servidor -->
    <ssl id="defaultSSLConfig" keyStoreRef="serverKeyStore" trustStoreRef="serverTrustStore" 
    	clientAuthenticationSupported="true" /> 
    <keyStore id="serverKeyStore" location="serverKey.jks" type="JKS" password="passw0rd" /> 
    <keyStore id="serverTrustStore" location="serverTrust.jks" type="JKS" password="passw0rd" /> 
    
    <!-- personalizar la configuración SSL -->
    <ssl id="customizeSSLConfig" keyStoreRef="clientKeyStore" trustStoreRef="clientTrustStore" /> 
    <keyStore id="clientKeyStore" location="clientKey.jks" type="JKS" password="passw0rd" /> 
    <keyStore id="clientTrustStore" location="clientTrust.jks" type="JKS" password="passw0rd" />
  3. Configure el reino de inicio de sesión en el archivo server.xml y enlace el reino al proveedor de servicios.
    <application id="TransportSecurityProvider" name="TransportSecurityProvider"
                 location="TransportSecurityProvider.war" type="ear">
            <application-bnd>
                <security-role name="Employee">
                    <user name="employee0" />
                    <group name="employeeGroup" />
                </security-role>        
                <security-role name="Manager">
                    <user name="manager0" />
                </security-role>
                <security-role name="AllAuthenticated">
                    <special-subject type="ALL_AUTHENTICATED_USERS"/>
                </security-role>
            </application-bnd>
        </application>
        
        <basicRegistry id="basic" realm="BasicRealm">
            <user name="employee0" password="emp0pwd" />
            <user name="employee1" password="emp1pwd" />
            <user name="manager0" password="mgr0pwd" />
            <group name="employeeGroup">
                <member name="employee0" />
                <member name="employee1" />
            </group>
        </basicRegistry>  
  4. Configure el proveedor de servicios.
    1. Cree los servicios web.
      @WebService(serviceName = "SayHelloPojoService",
                  portName = "SayHelloPojoPort")
      public class SayHelloPojoService implements SayHelloService {
      	...
      }
      
      @WebService(serviceName = "SayHelloStatelessService",
                  portName = "SayHelloStatelessPort",
                  endpointInterface = "com.ibm.ws.jaxws.transport.server.security.SayHelloService")
      @Stateless(name = "SayHelloSessionBean")
      public class SayHelloStatelessService implements SayHelloLocal {
      	...
      }
    2. Configure el archivo ibm-ws-bnd.xml del proveedor de servicios.
      <?xml version="1.0" encoding="UTF-8"?>
      <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" 
      		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      		xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd "  
      		version="1.0">
      
      	<http-publishing>
      		<webservice-security> 
      			<security-constraint>
      				<web-resource-collection>
      					<web-resource-name>Only Managers</web-resource-name>
      					<url-pattern>/manager/*</url-pattern>
      					<http-method>GET</http-method>
      					<http-method>POST</http-method>
      				</web-resource-collection>
      				<auth-constraint id="AuthConstraint_manager">
      					<role-name>Manager</role-name>
      				</auth-constraint>
      				<user-data-constraint>
      					<transport-guarantee>CONFIDENTIAL</transport-guarantee>
      				</user-data-constraint>
      			</security-constraint>
      			<security-constraint>
      				<web-resource-collection>
      					<web-resource-name>Employees</web-resource-name>
      					<url-pattern>/employee/*</url-pattern>
      					<http-method>GET</http-method>
      					<http-method>POST</http-method>
      				</web-resource-collection>
      				<auth-constraint id="AuthConstraint_employee">
      					<role-name>Employee</role-name>
      				</auth-constraint>
      				<user-data-constraint>
      					<transport-guarantee>CONFIDENTIAL</transport-guarantee>
      				</user-data-constraint>
      			</security-constraint>
      			<!-- SECURITY ROLES -->
      			<security-role id="Staff">
      				<role-name>Employee</role-name>
      				<role-name>Manager</role-name>
      			</security-role>
      			<!-- AUTHENTICATION METHOD: client-cert authentication -->
      			<!-- configuración del inicio de sesión -->
      			<login-config id="LoginConfig">
      				<auth-method>CLIENT-CERT</auth-method>
      				<realm-name>Authentication</realm-name>
      			</login-config>                   
      		</webservice-security>
      	</http-publishing>
      </webservices-bnd>
      Nota:
      • El archivo ibm-ws-bnd.xml debe estar en el directorio /WEB-INF de aplicaciones web o en el directorio /META-INF de aplicaciones de servicio web basadas en EJB (archivado JAR).
      • El elemento login-config del archivo ibm-ws-bnd.xml surte efecto solo en una aplicación de servicio web basada en EJB (archivado JAR). Para las aplicación web, se pasa por alto el elemento login-config y se utiliza el valor del mismo elemento del archivo web.xml.
      .
  5. Configure el cliente de servicio especificando los puntos finales de servicio web. Por ejemplo, la aplicación cliente es una aplicación web denominada TransportSecurityClient.war.
    1. Configure la aplicación cliente en el archivo server.xml.
      <application id="TransportSecurityClient" name="TransportSecurityClient" 
      		location="TransportSecurityClient.war"
      		context-root="TransportSecurityClient" type="war" />
    2. Configure el archivo ibm-ws-bnd.xml para la aplicación cliente.
      <?xml version="1.0" encoding="UTF-8"?>
      <webservices-bnd xmlns="http://websphere.ibm.com/xml/ns/javaee" 
      		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      		xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-ws-bnd_1_0.xsd "
      		version="1.0">
      	<!-- enlace de referencia de servicio POJO-->
      	<service-ref name="service/SayHelloPojoService">
      		<port name="SayHelloPojoPort" 
      				namespace="http://ibm.com/ws/jaxws/transport/security/"
      				ssl-ref="customizeSSLConfig"
      				key-alias="user0"/>
          <properties http.conduit.tlsClientParameters.disableCNCheck="true" />
      	</service-ref>
      	<!-- enlace de referencia de servicio Sin estado-->
      	<service-ref name="service/SayHelloStatelessService">
      		<port name="SayHelloStatelessPort" 
      				namespace="http://ibm.com/ws/jaxws/transport/security/"
      				ssl-ref="customizeSSLConfig"
      				key-alias="user0"/>
          <properties http.conduit.tlsClientParameters.disableCNCheck="true" />
      	</service-ref>
      </webservices-bnd>
      Nota:
      • El archivo ibm-ws-bnd.xml debe estar en el directorio /WEB-INF de la aplicación web cliente.
      • El atributo key-alias especifica el certificado de cliente válido en el almacén de claves del cliente definido en el archivo server.xml. En este ejemplo, se define el almacén de claves de cliente como se indica a continuación:
        <keyStore id="clientKeyStore" location="clientKey.jks" type="JKS" password="passw0rd" />
      • El atributo ssl-ref del archivo ibm-ws-bnd.xml debe coincidir con el atributo id correcto del elemento ssl del archivo server.xml. En este ejemplo, se define el elemento ssl como se indica a continuación:
        <ssl id="customizeSSLConfig" keyStoreRef="clientKeyStore" trustStoreRef="clientTrustStore" />
      • El valor del atributo key-alias puede alterar temporalmente también el valor del atributo clientKeyAlias del elemento ssl del archivo server.xml.
    3. Genere los apéndices de cliente mediante la ubicación WSDL.
      @WebServiceClient(name = "SayHelloPojoService",
          targetNamespace = "http://ibm.com/ws/jaxws/transport/security/",
          wsdlLocation = "https://localhost:8020/TransportSecurityProvider/unauthorized/employPojoService?wsdl")
      public class SayHelloPojoService
                      extends Service
      {...}
      
      @WebServiceClient(name = "SayHelloStatelessService",
          targetNamespace = "http://ibm.com/ws/jaxws/transport/security/",
          wsdlLocation = "https://localhost:8020/TransportSecurityProvider/unauthorized/EmployStatelessService?wsdl")
      public class SayHelloStatelessService
                      extends Service
      {...}
    4. Utilice la anotación @WebServiceRef para introducir el servicio web en el servlet. Por ejemplo, TestJaxWsTransportSecurityServlet.
      @WebServiceRef(name = "service/SayHelloPojoService")
      SayHelloPojoService pojoService;
      
      @WebServiceRef(name = "service/SayHelloStatelessService")
      SayHelloStatelessService statelessService;

Icono que indica el tipo de tema Tema de tarea



Icono de indicación de fecha y hora Última actualización: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_sec_ws_clientcert
Nombre de archivo:twlp_sec_ws_clientcert.html