Faqs - Librerias Scsp J2EE

37
Manual de Configuración y FAQs Proyecto: Librerías SCSP v3.x.x.x J2EE Tïtulo: Librerías SCSP Revisión: 1.9 Fecha: Octubre 2012

description

6

Transcript of Faqs - Librerias Scsp J2EE

Page 1: Faqs - Librerias Scsp J2EE

Manual de Configuración y FAQs

Proyecto: Librerías SCSP v3.x.x.x J2EE Tïtulo: Librerías SCSP Revisión: 1.9 Fecha: Octubre 2012

Page 2: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 2 de 37

Ficha del documento Fecha Revisión Autor Verificado por

Mayo 2011 1.0 Eduardo Blázquez Castiñeira

Mayo 2011 1.1 Daniel de Castro Portillo

Mayo 2011 1.2 Daniel de Castro Portillo

Agosto 2011 1.3 Daniel de Castro Portillo

Octubre 2011 1.4 Daniel de Castro Portillo

Noviembre 2011 1.5 Daniel de Castro Portillo

Diciembre 2011 1.6 Daniel de Castro Portillo

Documentos relacionados Fecha Revisión Titulo Ruta

Lista de distribución del documento

Fecha Nombre Empresa Teléfono

Control de versiones Fecha Revisión Descripción del cambio

03/05/2011 1.1 Se añade la descripción del parámetro “want” de configuración

de tomcat

05/05/2011 1.2 Se añade un comentario sobre la configuración de SSL y las

librerías ARP

10/08/2011 1.3 Se añade comentario sobre el charset de la Base de Datos

Page 3: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 3 de 37

MySQL

27/10/2011 1.4 Se añade información sobre el encoding necesario

17/11/2011 1.5 Se añade información acerca del driver a utilizar con una BBDD

Oracle 9i

09/12/2011 1.6 Se añade información acerca de la instalación del

Recubrimiento WS en JBOSS 5.1

30/03/2012 1.7

Se añade la configuración para ciertas versiones de Firefox al

entrar a las aplicaciones de Cliente Ligero y Web de

Administración

19/06/2012 1.8 Se añade información acerca de una mejora de visibilidad de la

aplicación de administración en Internet Explorer 8 y 9

08/10/2012 1.9 Se añade información acerca de la configuración de apache por

delante de tomcat para el Cliente Ligero.

Aprobación del documento Documento validado por las partes en fecha: [Fecha]

Por el cliente Por la empresa suministradora

2012 Ministerio de Hacienda y Administraciones Públicas

Reservados todos los derechos. Quedan rigurosamente prohibidas, sin el permiso escrito de los titulares del copyright, la reproducción o la transmisión total o parcial de esta obra por cualquier procedimiento mecánico o electrónico, incluyendo la reprografía y el tratamiento informático, y la distribución de ejemplares mediante alquiler o préstamos públicos.

This work is protected by copyright. All rights reserved for reproduction or copying of this document or parts thereof. This also applies to its translations. No parts of this work may, in any form whatsoever, (print, photocopy, microfilm or any other procedures), including for training purpose, be reproduced or electronically processed, duplicated or disseminated without the written permission of the copyright owner.

Page 4: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 4 de 37

Contenido

FICHA DEL DOCUMENTO 2

DOCUMENTOS RELACIONADOS 2

LISTA DE DISTRIBUCIÓN DEL DOCUMENTO 2

CONTROL DE VERSIONES 2

APROBACIÓN DEL DOCUMENTO 3

1 INTRODUCCIÓN 6

1.1 Propósito 6

1.2 Alcance 6

1.3 Resumen 6

2 CONFIGURACIÓN SERVIDOR APLICACIONES. CONECTOR HTTPS. 6

2.1 Configuración Tomcat / JBoss 6 2.1.1 Configuración librerías APR 8 2.1.2 Configuración JBOSS 5.1 9

2.2 Ejemplos de certificados de servidor. 12

2.3 Ejemplo de autenticación certificado cliente. 20

3 CONFIGURACIÓN APACHE HTTP 23

3.1 Configuración Tomcat. 23

3.2 Configuración Apache 23 3.2.1 Configuración httpd.conf 23 3.2.1.1 JK como módulo 23 3.2.1.2 JK compilado 24 3.2.1.3 Configuración archivos de configuración 24 3.2.1.4 Configuración SSL 24 3.2.2 Configuración JK 24 3.2.3 Configuración SSL 25 3.2.4 Configuracion worker.properties 26

4 ERRORES CONFIGURACIÓN CLIENTE LIGERO. 26

4.1 Error accediendo por https. 26 4.1.1 Ssl_error_bad_cert_alert 26 4.1.1 ssl_error_renegotiation_not_allowed 32

4.2 Error con el encoding 34 4.2.1 Configuración en el sistema operativo 34 4.2.2 Configuración en tomcat 34

Page 5: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 5 de 37

4.2.2.1 Configuración en el conector 34 4.2.2.2 Configuración en el arranque 35

5 INSTALACIÓN SOBRE UNA BASE DE DATOS MYSQL 35

5.1 Charset Base de Datos 35

6 INSTALACIÓN SOBRE UNA BASE DE DATOS ORACLE 35

6.1 Oracle 9i 35

7 MEJORA VISUALIZACIÓN ADMINISTRADOR WEB 36

7.1 Compatibilidad con navegadores 36

8 PERSONAL INVOLUCRADO EN EL PROYECTO 36

9 DEFINICIONES, ACRÓNIMOS Y ABREVIATURAS 37

10 APÉNDICES 37

Page 6: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 6 de 37

1 Introducción Este documento describe los problemas comunes que suelen encontrarse los administradores que instalan y configuran la aplicación Web del cliente ligero correspondiente a las librerías Java. Junto al problema descrito se facilitan los pasos necesarios para solventarlo. En principio, los problemas planteados en este documento no corresponden a ninguna versión en concreto de las librerías ni cliente ligero sino que son problemas comunes. También pueden encontrarse referencias a alguna versión específica de servidor de aplicaciones j2ee o gestor de base de datos.

1.1 Propósito Explicar problemas frecuentes en la configuración de las librerías SCSP v3.2.1 Java Propósito del documento.

1.2 Alcance Para hacer este documento lo más general posible se incluirán todos los problemas y soluciones relacionados con los siguientes productos:

[Servidor-j2ee] Servidores de aplicaciones J2ee.

[cliente-ligero] Aplicación Web cliente ligero Java.

[BD] Configuración Base de Datos de las librerías SCSP y Aplicación Web cliente ligero.

1.3 Resumen Se irán añadiendo nuevas entradas según se identifiquen nuevos problemas.

2 Configuración servidor aplicaciones. Conector https.

2.1 Configuración Tomcat / JBoss Para acceder a la aplicación Web /cliente-ligero hay que autenticarse mediante un certificado personal X.509 ya que la aplicación Web usa este certificado para extraer el NIF y comprobar si el usuario está dado de alta en el sistema. Por ello es necesario que el servidor de aplicaciones tenga configurado el conector para el protocolo seguro https. Las librerías soportan varios servidores de aplicaciones. En este ejemplo se explica la configuración específica para el servidor Tomcat 6 aunque también serviría por ejemplo para JBoss. Más información sobre Tomcat puede ser encontrada en el siguiente link: http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html El conector https puede tener configurado varias propiedades. Para saber más acerca de ellas se puede consultar este link: http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#SSL_Support Ejemplos de configuración del conector seguro para Tomcat 6 (fichero server.xml):

<-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->

Page 7: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 7 de 37

<!--

<Connector

port="8443" maxThreads="200"

scheme="https" secure="true" SSLEnabled="true"

keystoreFile="${user.home}/.keystore"

keystorePass="changeit"

clientAuth="false" sslProtocol="TLS"/>

-->

Otro ejemplo diferente: <Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true"

maxThreads="150" scheme="https" secure="true"

clientAuth="true" sslProtocol="TLS"

keystoreFile="/usr/local/apache-tomcat-

6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"

keystoreType="pkcs12"

keystorePass="xxx"

truststoreFile="/usr/local/apache-tomcat-

6.0.29/certificados/truststoreWS.jks"

truststoreType="jks"

truststorePass="xxx"

/>

Otro ejemplo diferente: <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true"

clientAuth="true" sslProtocol="TLS"

keystoreFile="C:\MPR\Certificados\Servidor\server.jks"

keystorePass="xxx"

/>

Otro ejemplo diferente: <Connector

port="443"

protocol="HTTP/1.1"

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"

clientAuth="want"

sslProtocol="TLS"

keystoreFile="/usr/local/apache-tomcat-

6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"

keystoreType="pkcs12"

keystorePass="xxx"

truststoreFile="/usr/local/apache-tomcat-

6.0.29/certificados/truststoreWS.jks"

truststoreType="jks"

truststorePass="xxx"

/>

He resaltado en colores 2 propiedades importantes:

clientAuth=Puede recibir el valor true, false o want (por defecto es false). Cuando vale true, la conexión de cliente necesita presentar un certificado válido. Si bajo el mismo servidor vamos a instalar dos aplicaciones, una uq encesite autenticación de cliente (Cliente Ligero) y otra que no lo necesita (Web Services SCSP) utilizaremos la opción want, esto hará que si se presenta un certificado por parte del cliente, nos

Page 8: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 8 de 37

autenticaremos como tal, y si no se presenta este certificado, no nos autenticaremos, y ya dependerá de la aplicación el que podamos acceder o no.

keystoreFile=Especifica la ruta al fichero del almacén de claves. Este fichero contiene las claves privadas y públicas del servidor en forma de certificado. KeystoreFile toma por defecto el valor .keystore en el directorio home del usuario. El directorio home varía según el sistema operativo.

En este almacén se encuentra el certificado que usará el servidor para autenticarse, es decir, será el certificado que se envíe al cliente para que este pueda comprobar sus credenciales y verificar su validez.

2.1.1 Configuración librerías APR En el archivo conf/server.xml se especifica la configuración de las librerías nativas de tomcat APR, estas librerías no son necesarias para el buen uso de las aplicaciones y librerías SCSP, por lo que se pueden comentar para no hacer uso de ellas.

<!--APR library loader. Documentation at /docs/apr.html --> <!--Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /-->

Si no comentamos el uso de estas librerías al arrancar tomcat tendremos errores como lo siguientes. GRAVE: Error inicializando punto final (endpoint) java.lang.Exception: No Certificate file specified or invalid file format at org.apache.tomcat.jni.SSLContext.setCertificate(Native Method) at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:723) at org.apache.coyote.http11.Http11AprProtocol.init(Http11AprProtocol.java:107) at org.apache.catalina.connector.Connector.initialize(Connector.java:1022) at org.apache.catalina.core.StandardService.initialize(StandardService.java:703) at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:838) at org.apache.catalina.startup.Catalina.load(Catalina.java:538) at org.apache.catalina.startup.Catalina.load(Catalina.java:562) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 09-may-2011 9:04:59 org.apache.catalina.core.StandardService initialize

GRAVE: Failed to initialize connector [Connector[HTTP/1.1-8443]] LifecycleException: Falló la inicialización del manejador de protocolo: java.lang.Exception: No Certificate file specified or invalid file format at org.apache.catalina.connector.Connector.initialize(Connector.java:1024) at org.apache.catalina.core.StandardService.initialize(StandardService.java:703) at org.apache.catalina.core.StandardServer.initialize(StandardServer.java:838) at org.apache.catalina.startup.Catalina.load(Catalina.java:538) at org.apache.catalina.startup.Catalina.load(Catalina.java:562) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:261) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 09-may-2011 9:04:59 org.apache.coyote.ajp.AjpAprProtocol init

GRAVE: Error arrancando punto final (endpoint) java.lang.Exception: Ligado de conector falló: [730048] Sólo se permite un uso de cada dirección de socket (protocolo/dirección de red/puerto) at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:649)

Page 9: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 9 de 37

at org.apache.tomcat.util.net.AprEndpoint.start(AprEndpoint.java:756) at org.apache.coyote.http11.Http11AprProtocol.start(Http11AprProtocol.java:137) at org.apache.catalina.connector.Connector.start(Connector.java:1095) at org.apache.catalina.core.StandardService.start(StandardService.java:540) at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 09-may-2011 9:05:20 org.apache.catalina.core.StandardService start

GRAVE: Failed to start connector [Connector[HTTP/1.1-8443]] LifecycleException: service.getName(): "Catalina"; Falló el arranque del manejador de protocolo: java.lang.Exception: Ligado de conector falló: [730048] Sólo se permite un uso de cada dirección de socket (protocolo/dirección de red/puerto) at org.apache.catalina.connector.Connector.start(Connector.java:1102) at org.apache.catalina.core.StandardService.start(StandardService.java:540) at org.apache.catalina.core.StandardServer.start(StandardServer.java:754) at org.apache.catalina.startup.Catalina.start(Catalina.java:595) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414) 09-may-2011 9:05:20 org.apache.coyote.ajp.AjpAprProtocol start INFO: Arrancando Coyote AJP/1.3 en ajp-8009

2.1.2 Configuración JBOSS 5.1

Se ha detectado que en una instalación del Recubrimiento WS con una versión 5.1 de JBOSS y una JDK 1.5.X ocurre el siguiente error. 2011-11-25 14:03:39 [org.springframework.ws.server.MessageTracing.sent] DEBUG - Sent response [AxiomSoapMessage {http://schemas.xmlsoap.org/soap/envelope/}Fault [^] [^]] for request [AxiomSoapMessage {http://intermediacion.redsara.es/scsp/esquemas/ws/peticion}PeticionSincrona [^] [^]] 2011-11-25 14:03:39 [httpclient.wire.header] DEBUG - << "HTTP/1.1 500 Error Interno del Servidor[\r][\n]" 2011-11-25 14:03:39 [org.springframework.ws.transport.http.MessageDispatcherServlet] DEBUG - Successfully completed request 2011-11-25 14:03:39 [httpclient.wire.header] DEBUG - << "Server: Apache-Coyote/1.1[\r][\n]" 2011-11-25 14:03:39 [httpclient.wire.header] DEBUG - << "X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1[\r][\n]" 2011-11-25 14:03:39 [httpclient.wire.header] DEBUG - << "SOAPAction: ""[\r][\n]" 2011-11-25 14:03:39 [httpclient.wire.header] DEBUG - << "Accept: text/xml[\r][\n]" 2011-11-25 14:03:39 [httpclient.wire.header] DEBUG - << "Content-Type: text/xml;charset=UTF-8[\r][\n]" 2011-11-25 14:03:39 [httpclient.wire.header] DEBUG - << "Transfer-Encoding: chunked[\r][\n]" 2011-11-25 14:03:39 [httpclient.wire.header] DEBUG - << "Date: Fri, 25 Nov 2011 13:03:39 GMT[\r][\n]" 2011-11-25 14:03:39 [httpclient.wire.header] DEBUG - << "Connection: close[\r][\n]" 2011-11-25 14:03:39 [org.springframework.beans.factory.support.DefaultListableBeanFactory] DEBUG - Returning cached instance of singleton bean 'pollingTask' 2011-11-25 14:03:39 [httpclient.wire.content] DEBUG - << "1" 2011-11-25 14:03:39 [httpclient.wire.content] DEBUG - << "1" 2011-11-25 14:03:39 [httpclient.wire.content] DEBUG - << "1" 2011-11-25 14:03:39 [httpclient.wire.content] DEBUG - << "[\r]" 2011-11-25 14:03:39 [httpclient.wire.content] DEBUG - << "[\n]" 2011-11-25 14:03:39 [httpclient.wire.content] DEBUG - << "<?xm" 2011-11-25 14:03:39 [httpclient.wire.content] DEBUG - << "l version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><soapenv:Fault><faultcode>soapenv:Server</faultcode><faultstring [^] [^] xml:lang="en">-1</faultstring></soapenv:Fault></soapenv:Body></soapenv:Envelope>" 2011-11-25 14:03:39 [es.navarra.SVCD.services.SVCD] ERROR - Se ha producido una excepción al realizar la llamada al servicio Web del MAP: org.apache.axis2.AxisFault: -1 at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:486) at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:343) at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:389) at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)

Page 10: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 10 de 37

at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163) at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:528) at org.apache.axis2.client.ServiceClient.sendReceive(ServiceClient.java:508) at es.navarra.SVCD.services.SVCD.realizarPeticionSincrona(SVCD.java:240) at es.navarra.SVCD.services.SVCD.ConsultaDatosIdentidad(SVCD.java:72) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111) at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69) at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73) at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72) at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_23794987.invoke(InvocationContextInterceptor_z_fillMethod_23794987.java) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88) at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_23794987.invoke(InvocationContextInterceptor_z_setup_23794987.java) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79) at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:306) at org.jboss.ejb3.stateless.StatelessContainer.invokeEndpoint(StatelessContainer.java:662) at org.jboss.wsf.container.jboss50.invocation.InvocationHandlerEJB3.invoke(InvocationHandlerEJB3.java:96) at org.jboss.ws.core.server.ServiceEndpointInvoker.invoke(ServiceEndpointInvoker.java:222) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.processRequest(RequestHandlerImpl.java:474) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleRequest(RequestHandlerImpl.java:295) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.doPost(RequestHandlerImpl.java:205) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:131) at org.jboss.wsf.common.servlet.AbstractEndpointServlet.service(AbstractEndpointServlet.java:85) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235)

Page 11: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 11 de 37

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:595) 2011-11-25 14:03:39 [com.microsoft.sqlserver.jdbc.SQLServerConnection] FINE - ConnectionID:14 TransactionID:0x0000000000000000 Network packet size is 8000 bytes 2011-11-25 14:03:40 [org.jboss.ejb3.stateless.StatelessBeanContext] WARN - EJBTHREE-1337: do not get WebServiceContext property from stateless bean context, it should already have been injected 2011-11-25 14:03:40 [org.jboss.ws.core.jaxws.handler.MessageContextJAXWS] DEBUG - Begin response processing 2011-11-25 14:03:40 [org.jboss.ws.core.soap.MessageContextAssociation] DEBUG - popMessageContext: org.jboss.ws.core.jaxws.handler.SOAPMessageContextJAXWS@c5153e (Thread http-127.0.0.1-8080-3) 2011-11-25 14:03:40 [org.jboss.ws.core.soap.MessageContextAssociation] DEBUG - pushMessageContext: org.jboss.ws.core.jaxws.handler.SOAPMessageContextJAXWS@118617f (Thread http-127.0.0.1-8080-3) 2011-11-25 14:03:40 [org.jboss.ws.core.jaxws.SOAPFaultHelperJAXWS] ERROR - SOAP request exception javax.xml.soap.SOAPException: Error en el servicio Web: Se ha producido una excepción al realizar la llamada al servicio Web del MAP: -1 at es.navarra.SVCD.services.SVCD.ConsultaDatosIdentidad(SVCD.java:96) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.aop.joinpoint.MethodInvocation.invokeTarget(MethodInvocation.java:122) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:111) at org.jboss.ejb3.EJBContainerInvocationWrapper.invokeNext(EJBContainerInvocationWrapper.java:69) at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.invoke(InterceptorSequencer.java:73) at org.jboss.ejb3.interceptors.aop.InterceptorSequencer.aroundInvoke(InterceptorSequencer.java:59) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.jboss.aop.advice.PerJoinpointAdvice.invoke(PerJoinpointAdvice.java:174) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.fillMethod(InvocationContextInterceptor.java:72) at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_fillMethod_23794987.invoke(InvocationContextInterceptor_z_fillMethod_23794987.java) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor.setup(InvocationContextInterceptor.java:88) at org.jboss.aop.advice.org.jboss.ejb3.interceptors.aop.InvocationContextInterceptor_z_setup_23794987.invoke(InvocationContextInterceptor_z_setup_23794987.java) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.connectionmanager.CachedConnectionInterceptor.invoke(CachedConnectionInterceptor.java:62) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.entity.TransactionScopedEntityManagerInterceptor.invoke(TransactionScopedEntityManagerInterceptor.java:56) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.AllowedOperationsInterceptor.invoke(AllowedOperationsInterceptor.java:47) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.stateless.StatelessInstanceInterceptor.invoke(StatelessInstanceInterceptor.java:68) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:79) at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)

Page 12: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 12 de 37

at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67) at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) at org.jboss.ejb3.stateless.StatelessContainer.localInvoke(StatelessContainer.java:306) at org.jboss.ejb3.stateless.StatelessContainer.invokeEndpoint(StatelessContainer.java:662) at org.jboss.wsf.container.jboss50.invocation.InvocationHandlerEJB3.invoke(InvocationHandlerEJB3.java:96) at org.jboss.ws.core.server.ServiceEndpointInvoker.invoke(ServiceEndpointInvoker.java:222) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.processRequest(RequestHandlerImpl.java:474) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleRequest(RequestHandlerImpl.java:295) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.doPost(RequestHandlerImpl.java:205) at org.jboss.wsf.stack.jbws.RequestHandlerImpl.handleHttpRequest(RequestHandlerImpl.java:131) at org.jboss.wsf.common.servlet.AbstractEndpointServlet.service(AbstractEndpointServlet.java:85) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:235) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:190) at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126) at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:595)

El error, es debido a un bug con las librerías de Spring WS que utiliza el Recubrimiento WS (https://jira.springsource.org/browse/SWS-517), este error está resuelto en la versión 1.5.8 de las librerías, pero no está propagado hacia arriba, y debido a esto y a que el Recubrimiento usa la versión 2.0.0 Milestone 1 ocurre este error. Hay dos posibles soluciones

Actualizar la JDK a una versión 1.6.x

Sustituir los jars de Spring WS 2.0.0.0 por la versión 1.5.8 los cuales se han comprobado que funcionan correctamente.

2.2 Ejemplos de certificados de servidor.

Con estas dos propiedades configuradas el servidor envía su certificado al cliente y el cliente envía su certificado al servidor. El cliente puede validar el certificado del servidor a través de los certificados de entidades emisoras instalados en su navegador. Aún cuando el certificado del servidor no sea de confianza siempre existe la posibilidad de aceptar este riesgo y continuar con la conexión hacía esa página Web. Normalmente las aplicaciones Webs serias tienen configurados certificados cuya entidad emisora es mundialmente conocida (Verisign, Thawte, etc…). El navegador del cliente es el encargado de verificar el certificado del servidor. Pongamos algunos ejemplos:

Page 13: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 13 de 37

Ejemplo correcto de certificado servidor: https://www.gmail.com

El CN del certificado coincide con el nombre de la página (mail.google.com). También tiene como entidad certificadora a Thawte que es una entidad certificadora que normalmente viene incluida en los navegadores actuales (se puede comprobar en las opciones del navegador). Ejemplo correcto de certificado de servidor: https://cambiodomicilio.060.gob.es/cambioDomicilio

Page 14: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 14 de 37

También se puede comprobar que el CN corresponde con el nombre del dominio (*.060.gob.es sirve para cambiodomicilio.060.gob.es). Su entidad certificadora es AC CAMERFIRMA que también es una de las entidades de certificación intermedias que están incluidas en el navegador. Ejemplo de aviso de certificado de servidor: https://10.253.114.137/scsp

Page 15: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 15 de 37

En este caso el navegador nos avisa que el certificado del servidor no es válido. La razón es porque su CN no se corresponde con el nombre del dominio al que estamos accediendo. Este ejemplo corresponde a siguiente configuración en el servidor de la máquina: <Connector

port="443"

protocol="HTTP/1.1"

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"

clientAuth="want"

sslProtocol="TLS"

keystoreFile="/usr/local/apache-tomcat-

6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"

keystoreType="pkcs12"

keystorePass="xxx"

truststoreFile="/usr/local/apache-tomcat-

6.0.29/certificados/truststoreWS.jks"

truststoreType="jks"

truststorePass="xxx"

/>

Si abrimos el certicado DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx se puede ver la información del certificado.

Page 16: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 16 de 37

Esto también lo podemos verificar obteniendo los detalles del certificado mediante la opción “I Understand the Risks” que aparece en el navegador. Si añadimos la excepción podremos entrar sin problemas a la Web indicada.

Page 17: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 17 de 37

También puede darse el caso que la entidad emisora del certificado de servidor no sea una de las que tenemos incluidas en nuestro navegador. Un ejemplo es la creación de un certificado autofirmado que hemos creado de prueba mediante la herramienta keytool.

C:\MPR\Certificados\Servidor>keytool -genkey -alias tomcat -keyalg RSA -keystore server.jks Escriba la contraseña del almacén de claves: Volver a escribir la contraseña nueva: +Cuales son su nombre y su apellido? [Unknown]: localhost +Cual es el nombre de su unidad de organización? [Unknown]: Servidor Tomcat +Cual es el nombre de su organización? [Unknown]: MPTAP +Cual es el nombre de su ciudad o localidad? [Unknown]: Madrid +Cual es el nombre de su estado o provincia? [Unknown]: ES +Cual es el codigo de pais de dos letras de la unidad? [Unknown]: ES +Es correcto CN=localhost, OU=Servidor Tomcat, O=MPTAP, L=Madrid, ST=ES, C=ES? [no]: si Escriba la contraseña clave para <tomcat> (INTRO si es la misma contraseña que la del almacen de claves): C:\MPR\Certificados\Servidor>

Podemos configurar el servidor para que el conector seguro use este certificado:

Page 18: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 18 de 37

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="C:\MPR\Certificados\Servidor\server.jks" keystorePass="xxx" />

Así que cuando accedamos a la aplicación obtendremos este mensaje de aviso.

Page 19: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 19 de 37

En realidad estos avisos no comprometen la seguridad de la conexión https, solo nos advierten que el certificado de servidor no es válido. En estos casos el cliente tiene la opción de aceptar este riesgo y establecer la conexión segura. Hay algunos ejemplos reales donde sucede esto y tenemos que añadir el certificado dentro de las excepciones.

Page 20: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 20 de 37

2.3 Ejemplo de autenticación certificado cliente. Cuando el servidor envía su certificado al cliente, también envía una lista de entidades certificadoras. El servidor espera que el certificado usado por el cliente tenga como emisor alguna de las entidades aparecen en esa lista. Si usamos un analizador de paquetes podemos ver un ejemplo de esto. Las siguientes imágenes corresponden al handshake entre cliente-servidor de la aplicación https://10.253.114.137/scsp.

Si analizamos el paquete donde se envía el certificado de servidor al cliente podemos ver varias cosas:

Page 21: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 21 de 37

El certificado que aparece señalado en azul corresponde con el certificado .PFX definido en la propiedad keystoreFile del conector https: keystoreFile="/usr/local/apache-tomcat-

6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"

Y también se pueden ver las entidades de certificación emisoras que acepta el servidor.

Page 22: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 22 de 37

Esta lista de certificados corresponde con todos los certificados que están en el almacén y que fue configurado para el conector seguro. En el siguiente ejemplo correspondiente al almacén trusstoreWS.jks señalado en azul. <Connector

port="443"

protocol="HTTP/1.1"

SSLEnabled="true"

maxThreads="150"

scheme="https"

secure="true"

clientAuth="want"

sslProtocol="TLS"

keystoreFile="/usr/local/apache-tomcat-

6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"

keystoreType="pkcs12"

keystorePass="xxx"

truststoreFile="/usr/local/apache-tomcat-

6.0.29/certificados/truststoreWS.jks"

truststoreType="jks"

truststorePass="xxx"

/>

Este detalle es importante a la hora de configurar el servidor de aplicaciones que contenga la aplicación del cliente ligero ya que todos los usuarios deben autenticarse mediante alguno de los certificados soportados por @firma.

Page 23: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 23 de 37

3 Configuración Apache HTTP Las librerías permiten configurar un servidor web apache por delante del servidor de aplicaciones, a continuación se describe como realizar una configuración sencilla con el cliente ligero. Esta configuración se hace con mod_ajp montado sobre apache, para comunicar apache con tomcat

3.1 Configuración Tomcat. En primer lugar se debe de añadir un conector nuevo que nos proporcionará la conexión entre apache y tomcat. Este conecto se especifica en el fichero server.xml de tomcat. Un ejemplo de configuración sería el siguiente.

<Connector port="9009" protocol="AJP/1.3" maxThreads="300" redirectPort="9443" />

Dónde: 9009 Es el puerto que comunicará apache con tomcat 9443 Es nuestro puerto dedicado a https en tomcat Esta es la única configuración que debemso hacer en tomcat

3.2 Configuración Apache En apache debemos tener el módulo jk_module instalado en apache, o bien como módulo o bien como compilado con el propio apache. Con el comando ./apachectl -t -D DUMP_MODULES podemos ver si lo tenemos. jk_module (shared) o jk_module (static) Shared indica que estará como modulo, static que está compilado junto apache.

3.2.1 Configuración httpd.conf

A continuación cofioguraremos el fichero httpd.conf de apache

3.2.1.1 JK como módulo Si tenemos el módulo como módulo debemos enlazarlo con apache, esto se realiza indicandolo en el fochero httpd.conf con la siguiente línea.

LoadModule jk_module modules/mod_jk.so

Page 24: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 24 de 37

3.2.1.2 JK compilado

Si tenemos el módulo compilado junto a apache, no será necesario realizar esta configuración

3.2.1.3 Configuración archivos de configuración

En el caso de la configuración de los modulos ssl y jk, esta configuración la haremos desde ficheros de configuración propios, pero se debe indicar en el fichero global (httpd.conf) dónde se encuentra esta configuración. Esto lo haremos con las siguientes líneas

# Configuracion del modulo mod_jk Include conf/extra/mod-jk.conf # Configuracion del modulo mod_ssl Include conf/extra/mod-ssl.conf

Se deben de indicar las rutas relativas a estos ficheros

3.2.1.4 Configuración SSL

Para terminar con el archivo httpd.conf, se debe configurar el acceso vía https, para ello usaremos el mod_ssl el cual debe tener la siguiente configuración.

SSLProxyEngine on <IfModule ssl_module>

SSLRandomSeed startup builtin SSLRandomSeed connect builtin SSLSessionCache none

</IfModule>

Vemos que se le indica que las sesiones no sean cacheadas, esto es debido a que con el cliente ligero presenta incompatibilidades, y la visualización puede no ser correcta.

3.2.2 Configuración JK

Para la configuración de el enlace entre apache y tomcat, utilizaremos el fichero de configuración anteriormente indicado en el fichero de configuración global, en este ejemplo mod-jk.conf En este fichero deberemos configurar el fichero de configuración worker.properties que indicará los datos de tomcat con los que vamos a conectarnos desde apache a el.

JkWorkersFile conf/workers.properties

Page 25: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 25 de 37

También configuraremos otros aspectos como logs, formato, ficheros de memoria etc etc

SetEnvIf Request_URI "server\-status$" no-jk # Ubicacion del fichero de log del modulo jk JkLogFile logs/mod_jk.log # Nivel de log del modulo jk [debug/error/info] JkLogLevel error # Formato de log JkLogStampFormat "[%a %b %d %H:%S:%Y]" # JkOptions indicates to send SSK KEY SIZE # Note: Changed for +ForwardURICompat. # See http://tomcat.apache.org/security-jk.html JkOptions +ForwardKeySize +ForwardURICompatUnparsed -ForwardDirectories # JkRequestLogFormat JkRequestLogFormat "%w %V %T" # Directorio para el fichero de memoria compartida JkShmFile run/jk.shm

Y por último mapearemos la aplicación a la que vamos a acceder desde apache a tomcat JkMount /cliente-ligero* nodo1scsp Mediante esta línea indicaremos que el contexto cliente-ligero (Coincidencte con el contexto desplegado en tomcat) se enlazará con el nodo1scsp, veremos que significa nodo1scsp cuando configuremos el worker.properties posteriormente

3.2.3 Configuración SSL

La configuración anterior nos sirve para la configuración vía http, a continuación en el fichero mod-ssl se especifica como configurar la conexión vía https.

<VirtualHost *:443> ServerName nombreServer ServerSignature On SSLEngine on SSLCertificateFile /opt/certificados/cert_apache/ ssl.public.cer SSLCertificateKeyFile /opt/certificados/cert_apache/ ssl.private.key JkMount /cliente-ligero* nodo1scsp

SSLOptions +StdEnvVars +ExportCertData SSLVerifyClient none SSLVerifyDepth 10 <Location /cliente-ligero> SSLVerifyClient optional_no_ca SSLVerifyDepth 10 #SSLSessionCache none </Location> </VirtualHost>

Page 26: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 26 de 37

Como vemos creamos un virtualhost para aplicar las propiedades a todo lo que venga por el puerto 443 de apache. Las priopiedades específicas de la configuración vemos que son similares a lo anteriormente configurado, se mapea la aplicación, y posteriormente se añade configuración especifica con el tag <location> como ya habñíamos deshabilitado la cache globalmente, no haría falta hacerlo aquí, de ahí que lo veamos comentado. También vemos como se especifica que al entrar a la aplicación se solicite el certificado.

SSLVerifyClient optional_no_ca

Globalmente esto está desactivado en líneas superiores.

3.2.4 Configuracion worker.properties

En este fichero vamso a configurar los datos de acceso que utilizará mod_jk para acceder a tomcat. La configuración será la siguiente.

worker.list=nodo1scsp #TOMCAT SCSP worker.nodo1scsp.port=9009 worker.nodo1scsp.host=localhost worker.nodo1scsp.type=ajp13 worker.nodo1scsp.lbfactor=1 worker.nodo1scsp.socket_keepalive=True worker.nodo1scsp.connect_timeout=10000 worker.nodo1scsp.prepost_timeout=1000

Vemos que nodo1scsp es el nombre del worker que especificamos en los mapeos. En esta configuración vemos como se especifica el puerto, el host (localhost es debido a que apache y tomcat están en la misma máquina, pero podrían no estarlo) el typo de conexión (ajp13) y diversos factores de timeout etc

4 Errores configuración cliente ligero.

4.1 Error accediendo por https.

4.1.1 Ssl_error_bad_cert_alert

Page 27: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 27 de 37

Este error se produce al conectarse a alguna página residente en el servidor de aplicaciones mediante el conector https. Un ejemplo sería:

Un error frecuente es configurar el conector https sin especificar la propiedad truststoreFile.

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="C:\MPR\Certificados\Servidor\server.jks" keystorePass="xxx" />

Al no especificar esta propiedad el servidor Tomcat usa el almacén de certificados del entorno de ejecución Java con el que ha arrancado el servidor. Normalmente este almacén se llama “cacerts” y se encuentra en el directorio \ jre\lib\security del entorno Java. Para acceder a la aplicación cliente ligero es necesario autenticarse mediante un certificado soportado por @firma, que son:

DNIe

FNMT Ceres

CATCERT

ACCV

IZENPE

ANF

CAMERFIRMA

ACA

ANCERT

FIRMAPROFESIONAL

BANESTO

SCR

Page 28: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 28 de 37

Ministerio de Defensa

HEALTHSIGN

EDICOM

BANCO SANTANDER

MTIN

GISS Si se está usando el almacén cacerts, puede darse el caso que este almacén no haya sido modificado (por ejemplo cuando se parte de un nuevo equipo y se le instala una versión de Java). Aunque se haya importado un certificado personal admitido por @firma en el navegador desde el cual queremos acceder a la aplicación cliente-ligero no será suficiente para establecer la conexión https. Un ejemplo sería por ejemplo usando un certificado emitido por la FNMT y que es usado ampliamente por los Españoles.

Este certificado ha sido emitido por la FNMT por lo que el servidor Tomcat solo puede verificar la validez del certificado personal si dispone de la parte pública del certificado que ha emitido el certificado personal

Page 29: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 29 de 37

Es por ello que cuando Tomcat envía su certificado de servidor también envía una lista de entidades emisoras de certificados con las que puede validar el certificado que envía el cliente. Esta lista de certificados corresponde a los certificados públicos que están en el almacén

configurado en la propiedad truststoreFile del conector https.

El almacén cacerts del entorno de ejecución Java no trae por defecto el certificado público de la FNMT por lo que si se usa este almacén como truststoreFile obtendremos este error. La solución es configurar la propiedad truststoreFile para que use un almacén con los certificados públicos que se quiera o bien añadir el certificado público de la FNMT (en este caso) para que se pueda establecer la conexión https. El ejemplo de configurar la propiedad truststoreFile se puede ver en el punto 2.1. Para añadir el certificado público de la entidad emisora de nuestro certificado personal se haría de la siguiente manera:

Examinamos nuestro certificado personal a través del Navegador Web. Seleccionamos el certificado emisor de nuestro certificado personal. Exportamos el certificado público emisor.

Page 30: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 30 de 37

Usando la herramienta keytool importamos este certificado en el almacén (en este ejemplo lo añado al cacerts). keytool -importcert -trustcacerts -alias fnmt_ca -file c:\fnmt_ca.crt -keystore cacerts C:\Sun\jdk1.6.0_20\jre\lib\security>keytool -importcert -trustcacerts -alias fnmt_ca -file c:\fnmt_ca.crt -keystore cacerts Escriba la contraseña del almaen de claves: Propietario: OU=FNMT Clase 2 CA, O=FNMT, C=ES Emisor: OU=FNMT Clase 2 CA, O=FNMT, C=ES N·mero de serie: 36f11b19 Valido desde: Thu Mar 18 15:56:19 CET 1999 hasta: Mon Mar 18 16:26:19 CET 2019 Huellas digitales del certificado: MD5: 25:9D:CF:5E:B3:25:9D:95:B9:3F:00:86:5F:47:94:3D SHA1: 43:F9:B1:10:D5:BA:FD:48:22:52:31:B0:D0:08:2B:37:2F:EF:9A:54 Nombre del algoritmo de firma: SHA1withRSA Versi¾n: 3 Extensiones: #1: ObjectId: 2.5.29.16 Criticality=false PrivateKeyUsage: [ From: Thu Mar 18 15:56:19 CET 1999, To: Mon Mar 18 15:56:19 CET 2019] #2: ObjectId: 2.5.29.15 Criticality=false KeyUsage [ Key_CertSign Crl_Sign ] #3: ObjectId: 2.5.29.14 Criticality=false

Page 31: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 31 de 37

SubjectKeyIdentifier [ KeyIdentifier [ 0000: 40 9A 76 44 97 74 07 C4 AC 14 CB 1E 8D 4F 3A 45 @.vD.t.......O:E 0010: 7C 30 D7 61 .0.a ] ] #4: ObjectId: 1.2.840.113533.7.65.0 Criticality=false #5: ObjectId: 2.5.29.31 Criticality=false CRLDistributionPoints [ [DistributionPoint: [CN=CRL1, OU=FNMT Clase 2 CA, O=FNMT, C=ES] ]] #6: ObjectId: 2.5.29.19 Criticality=false BasicConstraints:[ CA:true PathLen:2147483647 ] #7: ObjectId: 2.16.840.1.113730.1.1 Criticality=false NetscapeCertType [ SSL CA S/MIME CA Object Signing CA] #8: ObjectId: 2.5.29.35 Criticality=false AuthorityKeyIdentifier [ KeyIdentifier [ 0000: 40 9A 76 44 97 74 07 C4 AC 14 CB 1E 8D 4F 3A 45 @.vD.t.......O:E 0010: 7C 30 D7 61 .0.a ] ] +Confiar en este certificado? [no]: si Se ha añadido el certificado al almacen de claves C:\Sun\jdk1.6.0_20\jre\lib\security>

Una vez realizado este cambio reiniciamos el servidor Tomcat. Cuando volvamos a acceder veremos como ya sí podemos seleccionar el certificado personal emitido por la FNMT. NOTA: he tenido que limpiar la cache del navegador.

Page 32: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 32 de 37

4.1.1 ssl_error_renegotiation_not_allowed

En ciertas versiones de Firefox (4.x en adelante) en ciertas ocasiones se ha obtenido el siguiente error al acceder a las aplicaciones de Cliente Ligero y Web de Administración.

Page 33: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 33 de 37

Este error es debido a que el navegador no permite una renegociación con el servidor, los pasos para solucionar esto son los siguientes.

1. Entrar en la gestión de la configuración de Firefox, esto lo realizaremos poniendo en la barra de navegación “about:config”.

2. Aceptamos la advertencia que nos hace el navegador y veremos la siguiente pantalla.

3. Buscamos la siguiente cadena mediante el filtro.

security.ssl.allow_unrestricted_renego_everywhere__temporarily_available_pref

Page 34: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 34 de 37

4. Ponemos su valor a true dando doble click sobre el false

Con esto solucionamos el error que nos da el navegador

4.2 Error con el encoding Para que no existan problemas con caracteres especiales tales como ñÑ tildes etc … es necesario configurar el enconding es_ES.ISO8859-1 Se puede configurar de diferentes maneras.

4.2.1 Configuración en el sistema operativo

Si se trata de un sistema operativo UNIX, podemos cambiar el encoding de la variable de entorno LANG en el profile del usuario que levanta tomcat, esto se hace en el archivo $HOME/.bash_profile añadiendo las siguientes líneas.

LANG=es_ES.ISO8859-1 export LANG

4.2.2 Configuración en tomcat

Podemos configurar el encoding en tomcat, en vez de en el sistema operativo, lo podemos hacer de dos maneras, en el conector utilizado por el Cliente Ligero o en el arranque de tomcat, especificándolo en el archivo catalina.sh. La diferencia entre ambas es que si lo configuramos en el arranque afectará a todas las aplicaciones, y si lo configuramos en el conector, afectará a las aplicaciones que se accedan por ese conector.

4.2.2.1 Configuración en el conector

Un ejemplo de configuración en el conector del puerto 8080 sería el siguiente. <Connector port="8080"

maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="es_ES.ISO8859-1"/>

Esta configuración únicamente afecta a las peticiones por el Puerto 8080

Page 35: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 35 de 37

4.2.2.2 Configuración en el arranque

Un ejemplo de configuración en el arranque de tomcat es el siguiente.

Windows (catalina.bat) set CATALINA_OPTS=-Dfile.encoding="es_ES.ISO8859-1" set JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding="es_ES.ISO8859-1"

Linux (catalina.sh)

export CATALINA_OPTS=-Dfile.encoding="es_ES.ISO8859-1"

export JAVA_OPTS=%JAVA_OPTS% -Dfile.encoding="es_ES.ISO8859-1"

5 Instalación sobre una Base de Datos MySQL

5.1 Charset Base de Datos Se recomienda que el charset de la Base de Datos, de las tablas y de los campos sea latin1, y que el collation de la misma sea latin1_swedish_ci, parámetros por defecto. Se han comprobado errores en la creación de las tablas cuando el charset es UTF-8

6 Instalación sobre una Base de Datos Oracle

6.1 Oracle 9i Se recomienda que el driver utilizado para conectar la aplicación con la Base de datos, sea el driver de la versión 10g si la Base de Datos es una 9i. Esto es debido a un bug del driver de la 9i cuando se intenta insertar un BLOB mediante hibérnate. El error que nos mostrará la aplicación es el siguiente. 011-11-08 16:22:01 [org.hibernate.util.JDBCExceptionReporter] WARN - SQL Error: 17090, SQLState: null 2011-11-08 16:22:01 [org.hibernate.util.JDBCExceptionReporter] ERROR - operation not allowed: streams type cannot be used in batching 2011-11-08 16:22:02 [org.hibernate.event.def.AbstractFlushingEventListener] ERROR - Could not synchronize database state with session org.hibernate.exception.GenericJDBCException: could not insert: [es.scsp.common.domain.Token] at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2262) at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2655) at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java:60) at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:167) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1001) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:339) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) at es.scsp.common.dao.TokenDao.save(TokenDao.java:29) at es.scsp.modules.AlmacenarMensajeSave.managePeticion(AlmacenarMensajeSave.java:182)

Page 36: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 36 de 37

2011-11-08 16:22:02 [es.scsp.client.BasicServiceClient] ERROR - Error durante la llamada al servicio web. could not insert: [es.scsp.common.domain.Token] 2011-11-08 16:22:02 [es.scsp.client.BasicServiceClient] DEBUG - Recuperando registro de peticion/respuesta con identificador 'MPTAP000000000000000000013'. 2011-11-08 16:22:02 [es.scsp.client.ws.service.ClienteUnicoServiceImpl] ERROR - es.scsp.common.exceptions.ScspException: Error al contactar con el servicio Web especificado https://intermediacionpp.redsara.es/AEAT/services/CorrientePago [^] PeticionSincrona

7 Mejora visualización Administrador Web

7.1 Compatibilidad con navegadores Se recomienda el uso de la herramienta de administración con Firefox, no obstante la aplicación es totalmente funcional en Internet Explorer. Con alguna de las versiones de Internet Explorer (8 y 9), la visualización de diferentes elementos, se puede ver alterada debido a su tratamiento de las hojas de estilo implementadas por Primefaces. En el caso de que esto ocurra e sposible ver la aplicación con compatibilidad. Para ello debe de activar el botón para tal fin como se muestra en la captura de pantalla siguiente.

8 Personal involucrado en el proyecto

Nombre Eduardo Blázquez Castiñeira

Email [email protected]

Teléfono 91 2732568

Rol

Categoría profesional

Responsabilidades

Otra información de contacto

Page 37: Faqs - Librerias Scsp J2EE

Librerías SCSP V3.x.x J2EE FAQs

FAQs – Librerías SCSP V3.x.x J2EE Página 37 de 37

Aprobación

9 Definiciones, acrónimos y abreviaturas

10 Apéndices