Vous êtes sur la page 1sur 37

Manual de Configuracin y FAQs

Proyecto:

Libreras SCSP v3.x.x.x J2EE

Ttulo:

Libreras SCSP

Revisin:

1.9

Fecha:

Octubre 2012

Libreras SCSP V3.x.x J2EE


FAQs

Ficha del documento


Fecha

Revisin

Autor

Verificado por

Mayo 2011

1.0

Eduardo Blzquez Castieira

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

Revisin

Titulo

Ruta

Lista de distribucin del documento


Fecha

Nombre

Empresa

Telfono

Control de versiones
Fecha

Revisin

03/05/2011

1.1

05/05/2011

1.2

10/08/2011

1.3

Descripcin del cambio


Se aade la descripcin del parmetro want de configuracin
de tomcat

Se aade un comentario sobre la configuracin de SSL y las


libreras ARP

Se aade comentario sobre el charset de la Base de Datos

FAQs Libreras SCSP V3.x.x J2EE

Pgina 2 de 37

Libreras SCSP V3.x.x J2EE


FAQs

MySQL

27/10/2011

1.4

17/11/2011

1.5

09/12/2011

1.6

Se aade informacin sobre el encoding necesario

Se aade informacin acerca del driver a utilizar con una BBDD


Oracle 9i

Se aade informacin acerca de la instalacin del


Recubrimiento WS en JBOSS 5.1

Se aade la configuracin para ciertas versiones de Firefox al


30/03/2012

1.7

entrar a las aplicaciones de Cliente Ligero y Web de


Administracin

19/06/2012

1.8

08/10/2012

1.9

Se aade informacin acerca de una mejora de visibilidad de la


aplicacin de administracin en Internet Explorer 8 y 9

Se aade informacin acerca de la configuracin de apache por


delante de tomcat para el Cliente Ligero.

Aprobacin del documento


Documento validado por las partes en fecha: [Fecha]
Por el cliente

Por la empresa suministradora

2012 Ministerio de Hacienda y Administraciones Pblicas


Reservados todos los derechos. Quedan rigurosamente prohibidas, sin el permiso escrito de los
titulares del copyright, la reproduccin o la transmisin total o parcial de esta obra por cualquier
procedimiento mecnico o electrnico, incluyendo la reprografa y el tratamiento informtico, y la
distribucin de ejemplares mediante alquiler o prstamos pblicos.
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.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 3 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Contenido
FICHA DEL DOCUMENTO

DOCUMENTOS RELACIONADOS

LISTA DE DISTRIBUCIN DEL DOCUMENTO

CONTROL DE VERSIONES

APROBACIN DEL DOCUMENTO

INTRODUCCIN

1.1

Propsito

1.2

Alcance

1.3

Resumen

CONFIGURACIN SERVIDOR APLICACIONES. CONECTOR HTTPS.

2.1
Configuracin Tomcat / JBoss
2.1.1 Configuracin libreras APR
2.1.2 Configuracin JBOSS 5.1

6
6
8
9

2.2

Ejemplos de certificados de servidor.

12

2.3

Ejemplo de autenticacin certificado cliente.

20

3
3.1

CONFIGURACIN APACHE HTTP

23

Configuracin Tomcat.

23

3.2
Configuracin Apache
3.2.1 Configuracin httpd.conf
3.2.1.1
JK como mdulo
3.2.1.2
JK compilado
3.2.1.3
Configuracin archivos de configuracin
3.2.1.4
Configuracin SSL
3.2.2 Configuracin JK
3.2.3 Configuracin SSL
3.2.4 Configuracion worker.properties

23
23
23
24
24
24
24
25
26

26

ERRORES CONFIGURACIN CLIENTE LIGERO.

4.1
Error accediendo por https.
4.1.1 Ssl_error_bad_cert_alert
4.1.1 ssl_error_renegotiation_not_allowed

26
26
32

4.2
Error con el encoding
4.2.1 Configuracin en el sistema operativo
4.2.2 Configuracin en tomcat

34
34
34

FAQs Libreras SCSP V3.x.x J2EE

Pgina 4 de 37

Libreras SCSP V3.x.x J2EE


FAQs

4.2.2.1
4.2.2.2
5
5.1
6
6.1
7
7.1

Configuracin en el conector
Configuracin en el arranque

34
35

INSTALACIN SOBRE UNA BASE DE DATOS MYSQL

35

Charset Base de Datos

35

INSTALACIN SOBRE UNA BASE DE DATOS ORACLE

35

Oracle 9i

35

MEJORA VISUALIZACIN ADMINISTRADOR WEB

36

Compatibilidad con navegadores

36

PERSONAL INVOLUCRADO EN EL PROYECTO

36

DEFINICIONES, ACRNIMOS Y ABREVIATURAS

37

10

APNDICES

37

FAQs Libreras SCSP V3.x.x J2EE

Pgina 5 de 37

Libreras SCSP V3.x.x J2EE


FAQs

1 Introduccin
Este documento describe los problemas comunes que suelen encontrarse los administradores
que instalan y configuran la aplicacin Web del cliente ligero correspondiente a las libreras
Java.
Junto al problema descrito se facilitan los pasos necesarios para solventarlo. En principio, los
problemas planteados en este documento no corresponden a ninguna versin en concreto de
las libreras ni cliente ligero sino que son problemas comunes. Tambin pueden encontrarse
referencias a alguna versin especfica de servidor de aplicaciones j2ee o gestor de base de
datos.

1.1

Propsito

Explicar problemas frecuentes en la configuracin de las libreras SCSP v3.2.1 Java


Propsito del documento.

1.2

Alcance

Para hacer este documento lo ms general posible se incluirn todos los problemas y
soluciones relacionados con los siguientes productos:

[Servidor-j2ee] Servidores de aplicaciones J2ee.

[cliente-ligero] Aplicacin Web cliente ligero Java.

[BD] Configuracin Base de Datos de las libreras SCSP y Aplicacin Web


cliente ligero.

1.3

Resumen

Se irn aadiendo nuevas entradas segn se identifiquen nuevos problemas.

2 Configuracin servidor aplicaciones. Conector https.


2.1

Configuracin Tomcat / JBoss

Para acceder a la aplicacin Web /cliente-ligero hay que autenticarse mediante un certificado
personal X.509 ya que la aplicacin 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 libreras soportan varios servidores de aplicaciones. En este ejemplo se explica la
configuracin especfica para el servidor Tomcat 6 aunque tambin servira por ejemplo para
JBoss. Ms informacin 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 ms acerca de ellas
se puede consultar este link:
http://tomcat.apache.org/tomcat-6.0-doc/config/http.html#SSL_Support

Ejemplos de configuracin del conector seguro para Tomcat 6 (fichero server.xml):


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

FAQs Libreras SCSP V3.x.x J2EE

Pgina 6 de 37

Libreras SCSP V3.x.x J2EE


FAQs

<!-<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-tomcat6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"
keystoreType="pkcs12"
keystorePass="xxx"
truststoreFile="/usr/local/apache-tomcat6.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-tomcat6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"
keystoreType="pkcs12"
keystorePass="xxx"
truststoreFile="/usr/local/apache-tomcat6.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 conexin de cliente necesita presentar un certificado vlido. Si bajo el mismo
servidor vamos a instalar dos aplicaciones, una uq encesite autenticacin de cliente
(Cliente Ligero) y otra que no lo necesita (Web Services SCSP) utilizaremos la opcin
want, esto har que si se presenta un certificado por parte del cliente, nos

FAQs Libreras SCSP V3.x.x J2EE

Pgina 7 de 37

Libreras SCSP V3.x.x J2EE


FAQs

autenticaremos como tal, y si no se presenta este certificado, no nos autenticaremos, y


ya depender de la aplicacin el que podamos acceder o no.

keystoreFile=Especifica la ruta al fichero del almacn de claves. Este fichero contiene


las claves privadas y pblicas del servidor en forma de certificado. KeystoreFile toma
por defecto el valor .keystore en el directorio home del usuario. El directorio home vara
segn el sistema operativo.

En este almacn se encuentra el certificado que usar el servidor para autenticarse, es decir,
ser el certificado que se enve al cliente para que este pueda comprobar sus credenciales y
verificar su validez.

2.1.1 Configuracin libreras APR


En el archivo conf/server.xml se especifica la configuracin de las libreras nativas de tomcat
APR, estas libreras no son necesarias para el buen uso de las aplicaciones y libreras 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 libreras 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 inicializacin 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] Slo se permite un uso de cada direccin de socket
(protocolo/direccin de red/puerto)
at org.apache.tomcat.util.net.AprEndpoint.init(AprEndpoint.java:649)

FAQs Libreras SCSP V3.x.x J2EE

Pgina 8 de 37

Libreras SCSP V3.x.x J2EE


FAQs

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] Slo se permite un uso de cada direccin de socket (protocolo/direccin 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 Configuracin JBOSS 5.1


Se ha detectado que en una instalacin del Recubrimiento WS con una versin 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:S
erver</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 excepcin 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)

FAQs Libreras SCSP V3.x.x J2EE

Pgina 9 de 37

Libreras SCSP V3.x.x J2EE


FAQs

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(Invoc
ationContextInterceptor_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(Invocatio
nContextInterceptor_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.j
ava: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)

FAQs Libreras SCSP V3.x.x J2EE

Pgina 10 de 37

Libreras SCSP V3.x.x J2EE


FAQs

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:12
6)
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 excepcin 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(Invoc
ationContextInterceptor_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(Invocatio
nContextInterceptor_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.j
ava: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)

FAQs Libreras SCSP V3.x.x J2EE

Pgina 11 de 37

Libreras SCSP V3.x.x J2EE


FAQs

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:12
6)
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 libreras de Spring WS que utiliza el Recubrimiento WS
(https://jira.springsource.org/browse/SWS-517), este error est resuelto en la versin 1.5.8 de
las libreras, pero no est propagado hacia arriba, y debido a esto y a que el Recubrimiento usa
la versin 2.0.0 Milestone 1 ocurre este error.
Hay dos posibles soluciones

Actualizar la JDK a una versin 1.6.x


Sustituir los jars de Spring WS 2.0.0.0 por la versin 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 enva su certificado al cliente y el cliente
enva su certificado al servidor. El cliente puede validar el certificado del servidor a travs de
los certificados de entidades emisoras instalados en su navegador. An cuando el certificado
del servidor no sea de confianza siempre existe la posibilidad de aceptar este riesgo y
continuar con la conexin haca esa pgina 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:

FAQs Libreras SCSP V3.x.x J2EE

Pgina 12 de 37

Libreras SCSP V3.x.x J2EE


FAQs

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

El CN del certificado coincide con el nombre de la pgina (mail.google.com). Tambin 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

FAQs Libreras SCSP V3.x.x J2EE

Pgina 13 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Tambin 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
tambin es una de las entidades de certificacin intermedias que estn incluidas en el
navegador.
Ejemplo de aviso de certificado de servidor: https://10.253.114.137/scsp

FAQs Libreras SCSP V3.x.x J2EE

Pgina 14 de 37

Libreras SCSP V3.x.x J2EE


FAQs

En este caso el navegador nos avisa que el certificado del servidor no es vlido. La razn es
porque su CN no se corresponde con el nombre del dominio al que estamos accediendo. Este
ejemplo corresponde a siguiente configuracin en el servidor de la mquina:
<Connector
port="443"
protocol="HTTP/1.1"
SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="want"
sslProtocol="TLS"
keystoreFile="/usr/local/apache-tomcat6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"
keystoreType="pkcs12"
keystorePass="xxx"
truststoreFile="/usr/local/apache-tomcat6.0.29/certificados/truststoreWS.jks"
truststoreType="jks"
truststorePass="xxx"
/>

Si abrimos el certicado DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx se puede ver la


informacin del certificado.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 15 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Esto tambin lo podemos verificar obteniendo los detalles del certificado mediante la opcin I
Understand the Risks que aparece en el navegador. Si aadimos la excepcin podremos
entrar sin problemas a la Web indicada.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 16 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Tambin 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 creacin 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 contrasea del almacn de claves:
Volver a escribir la contrasea nueva:
+Cuales son su nombre y su apellido?
[Unknown]: localhost
+Cual es el nombre de su unidad de organizacin?
[Unknown]: Servidor Tomcat
+Cual es el nombre de su organizacin?
[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 contrasea clave para <tomcat>
(INTRO si es la misma contrasea que la del almacen de claves):
C:\MPR\Certificados\Servidor>

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

FAQs Libreras SCSP V3.x.x J2EE

Pgina 17 de 37

Libreras SCSP V3.x.x J2EE


FAQs

<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 aplicacin obtendremos este mensaje de aviso.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 18 de 37

Libreras SCSP V3.x.x J2EE


FAQs

En realidad estos avisos no comprometen la seguridad de la conexin https, solo nos advierten
que el certificado de servidor no es vlido. En estos casos el cliente tiene la opcin de aceptar
este riesgo y establecer la conexin segura. Hay algunos ejemplos reales donde sucede esto y
tenemos que aadir el certificado dentro de las excepciones.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 19 de 37

Libreras SCSP V3.x.x J2EE


FAQs

2.3

Ejemplo de autenticacin certificado cliente.

Cuando el servidor enva su certificado al cliente, tambin enva 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 imgenes corresponden al handshake entre cliente-servidor de la aplicacin
https://10.253.114.137/scsp.

Si analizamos el paquete donde se enva el certificado de servidor al cliente podemos ver


varias cosas:

FAQs Libreras SCSP V3.x.x J2EE

Pgina 20 de 37

Libreras SCSP V3.x.x J2EE


FAQs

El certificado que aparece sealado en azul corresponde con el certificado .PFX definido en la
propiedad keystoreFile del conector https:
keystoreFile="/usr/local/apache-tomcat6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"

Y tambin se pueden ver las entidades de certificacin emisoras que acepta el servidor.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 21 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Esta lista de certificados corresponde con todos los certificados que estn en el almacn y que
fue configurado para el conector seguro. En el siguiente ejemplo correspondiente al almacn
trusstoreWS.jks sealado 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-tomcat6.0.29/certificados/DOMICILIO.REDSARA.ES.SERVIDOR.SSL.pfx"
keystoreType="pkcs12"
keystorePass="xxx"
truststoreFile="/usr/local/apache-tomcat6.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


aplicacin del cliente ligero ya que todos los usuarios deben autenticarse mediante alguno de
los certificados soportados por @firma.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 22 de 37

Libreras SCSP V3.x.x J2EE


FAQs

3 Configuracin Apache HTTP


Las libreras permiten configurar un servidor web apache por delante del servidor de
aplicaciones, a continuacin se describe como realizar una configuracin sencilla con el
cliente ligero.
Esta configuracin se hace con mod_ajp montado sobre apache, para comunicar apache
con tomcat

3.1

Configuracin Tomcat.

En primer lugar se debe de aadir un conector nuevo que nos proporcionar la conexin
entre apache y tomcat.
Este conecto se especifica en el fichero server.xml de tomcat. Un ejemplo de
configuracin sera el siguiente.

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

Dnde:
9009 Es el puerto que comunicar apache con tomcat
9443 Es nuestro puerto dedicado a https en tomcat
Esta es la nica configuracin que debemso hacer en tomcat

3.2

Configuracin Apache

En apache debemos tener el mdulo jk_module instalado en apache, o bien como


mdulo 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 Configuracin httpd.conf


A continuacin cofioguraremos el fichero httpd.conf de apache

3.2.1.1

JK como mdulo

Si tenemos el mdulo como mdulo debemos enlazarlo con apache, esto se


realiza indicandolo en el fochero httpd.conf con la siguiente lnea.

LoadModule jk_module modules/mod_jk.so

FAQs Libreras SCSP V3.x.x J2EE

Pgina 23 de 37

Libreras SCSP V3.x.x J2EE


FAQs

3.2.1.2

JK compilado

Si tenemos el mdulo compilado junto a apache, no ser necesario realizar esta


configuracin

3.2.1.3

Configuracin archivos de configuracin

En el caso de la configuracin de los modulos ssl y jk, esta configuracin la


haremos desde ficheros de configuracin propios, pero se debe indicar en el
fichero global (httpd.conf) dnde se encuentra esta configuracin.
Esto lo haremos con las siguientes lneas

# 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

Configuracin SSL

Para terminar con el archivo httpd.conf, se debe configurar el acceso va https,


para ello usaremos el mod_ssl el cual debe tener la siguiente configuracin.

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 visualizacin puede no
ser correcta.

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

JkWorkersFile conf/workers.properties

FAQs Libreras SCSP V3.x.x J2EE

Pgina 24 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Tambin 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 aplicacin a la que vamos a acceder desde apache a


tomcat
JkMount /cliente-ligero* nodo1scsp
Mediante esta lnea 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 Configuracin SSL


La configuracin anterior nos sirve para la configuracin va http, a continuacin
en el fichero mod-ssl se especifica como configurar la conexin va 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>

FAQs Libreras SCSP V3.x.x J2EE

Pgina 25 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Como vemos creamos un virtualhost para aplicar las propiedades a todo lo que
venga por el puerto 443 de apache.
Las priopiedades especficas de la configuracin vemos que son similares a lo
anteriormente configurado, se mapea la aplicacin, y posteriormente se aade
configuracin especifica con el tag <location> como ya habamos deshabilitado
la cache globalmente, no hara falta hacerlo aqu, de ah que lo veamos
comentado.
Tambin vemos como se especifica que al entrar a la aplicacin se solicite el
certificado.

SSLVerifyClient optional_no_ca

Globalmente esto est desactivado en lneas 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 configuracin 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 configuracin vemos como se especifica el puerto, el host (localhost es
debido a que apache y tomcat estn en la misma mquina, pero podran no
estarlo) el typo de conexin (ajp13) y diversos factores de timeout etc

4 Errores configuracin cliente ligero.


4.1

Error accediendo por https.


4.1.1 Ssl_error_bad_cert_alert

FAQs Libreras SCSP V3.x.x J2EE

Pgina 26 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Este error se produce al conectarse a alguna pgina residente en el servidor de aplicaciones


mediante el conector https. Un ejemplo sera:

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 almacn de certificados del entorno
de ejecucin Java con el que ha arrancado el servidor. Normalmente este almacn se llama
cacerts y se encuentra en el directorio \ jre\lib\security del entorno Java.
Para acceder a la aplicacin 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

FAQs Libreras SCSP V3.x.x J2EE

Pgina 27 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Ministerio de Defensa
HEALTHSIGN
EDICOM
BANCO SANTANDER
MTIN
GISS

Si se est usando el almacn cacerts, puede darse el caso que este almacn no haya sido
modificado (por ejemplo cuando se parte de un nuevo equipo y se le instala una versin de
Java). Aunque se haya importado un certificado personal admitido por @firma en el navegador
desde el cual queremos acceder a la aplicacin cliente-ligero no ser suficiente para establecer
la conexin https. Un ejemplo sera por ejemplo usando un certificado emitido por la FNMT y
que es usado ampliamente por los Espaoles.

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 pblica del certificado que ha emitido el
certificado personal

FAQs Libreras SCSP V3.x.x J2EE

Pgina 28 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Es por ello que cuando Tomcat enva su certificado de servidor tambin enva una lista de
entidades emisoras de certificados con las que puede validar el certificado que enva el cliente.
Esta lista de certificados corresponde a los certificados pblicos que estn en el almacn
configurado en la propiedad truststoreFile del conector https.
El almacn cacerts del entorno de ejecucin Java no trae por defecto el certificado pblico de la
FNMT por lo que si se usa este almacn como truststoreFile obtendremos este error. La
solucin es configurar la propiedad truststoreFile para que use un almacn con los certificados
pblicos que se quiera o bien aadir el certificado pblico de la FNMT (en este caso) para que
se pueda establecer la conexin https.
El ejemplo de configurar la propiedad truststoreFile se puede ver en el punto 2.1. Para aadir el
certificado pblico de la entidad emisora de nuestro certificado personal se hara de la siguiente
manera:

Examinamos nuestro certificado personal a travs del Navegador Web.


Seleccionamos el certificado emisor de nuestro certificado personal.
Exportamos el certificado pblico emisor.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 29 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Usando la herramienta keytool importamos este certificado en el almacn (en este


ejemplo lo aado 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 contrasea del almaen de claves:
Propietario: OU=FNMT Clase 2 CA, O=FNMT, C=ES
Emisor: OU=FNMT Clase 2 CA, O=FNMT, C=ES
Nmero 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
Versin: 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

FAQs Libreras SCSP V3.x.x J2EE

Pgina 30 de 37

Libreras SCSP V3.x.x J2EE


FAQs

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 aadido 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.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 31 de 37

Libreras SCSP V3.x.x J2EE


FAQs

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 Administracin.

FAQs Libreras SCSP V3.x.x J2EE

Pgina 32 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Este error es debido a que el navegador no permite una renegociacin con el servidor,
los pasos para solucionar esto son los siguientes.
1. Entrar en la gestin de la configuracin de Firefox, esto lo realizaremos
poniendo en la barra de navegacin 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

FAQs Libreras SCSP V3.x.x J2EE

Pgina 33 de 37

Libreras SCSP V3.x.x J2EE


FAQs

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 Configuracin 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 aadiendo las siguientes lneas.
LANG=es_ES.ISO8859-1
export LANG

4.2.2 Configuracin 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, especificndolo 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

Configuracin en el conector

Un ejemplo de configuracin en el conector del puerto 8080 sera 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 configuracin nicamente afecta a las peticiones por el Puerto 8080

FAQs Libreras SCSP V3.x.x J2EE

Pgina 34 de 37

Libreras SCSP V3.x.x J2EE


FAQs

4.2.2.2

Configuracin en el arranque

Un ejemplo de configuracin 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 Instalacin 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, parmetros por defecto.
Se han comprobado errores en la creacin de las tablas cuando el charset es UTF-8

6 Instalacin sobre una Base de Datos Oracle


6.1

Oracle 9i

Se recomienda que el driver utilizado para conectar la aplicacin con la Base de datos,
sea el driver de la versin 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
hibrnate.
El error que nos mostrar la aplicacin 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)

FAQs Libreras SCSP V3.x.x J2EE

Pgina 35 de 37

Libreras SCSP V3.x.x J2EE


FAQs

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 visualizacin Administrador Web


7.1

Compatibilidad con navegadores

Se recomienda el uso de la herramienta de administracin con Firefox, no obstante la


aplicacin es totalmente funcional en Internet Explorer.
Con alguna de las versiones de Internet Explorer (8 y 9), la visualizacin 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 aplicacin con compatibilidad. Para ello
debe de activar el botn para tal fin como se muestra en la captura de pantalla siguiente.

8 Personal involucrado en el proyecto


Nombre
Email
Telfono
Rol
Categora profesional
Responsabilidades
Otra informacin de
contacto

Eduardo Blzquez Castieira


eblazquez.map@gmail.com
91 2732568

FAQs Libreras SCSP V3.x.x J2EE

Pgina 36 de 37

Libreras SCSP V3.x.x J2EE


FAQs

Aprobacin

9 Definiciones, acrnimos y abreviaturas


10Apndices

FAQs Libreras SCSP V3.x.x J2EE

Pgina 37 de 37