Configuracion SSL JBOSS
Configuracion SSL JBOSS
Configuracion SSL JBOSS
Introduccin
La autenticacin usando certificado cliente es uno de los mtodos que podemos utiilizar
para autenticar a una persona en el entorno web. Est ampliamente difundido en las
aplicaciones de la administracin pblica: la aplicacin para realizar la declaracin de la
renta de la Agencia Tributaria y la empleada para consultar los puntos de nuestro carnet,
de la Direccin General de Trfico son las ms famosas.
Los servidores de aplicacin, como JBoss, ofrecen la posibilidad de aplicar este tipo de
autenticacin de una forma muy sencilla. A pesar de la simplicidad en la configuracin
hay que tener muy claro los conceptos y pasos a seguir, haciendo hincapi en los
certificados y dems configuracin alrededor de ellos.
Con este tutorial veremos paso a paso el proceso para que nuestra aplicacin utilice este
tipo de autenticacin, desde la generacin de certificados hasta la configuracin de
nuestra aplicacin web.
2. Entorno
Entorno utilizado para escribir este tutorial:
Hardware: Mac Book Pro (Core 2 Duo 2,8 Ghz, 4 GB RAM, 500 GB)
Sistema Operativo: Snow Leopard 10.6.5
JBoss: 6.0M5
OpenSSL: 0.9.8
keytool: JDK 1.6.0
3. Generacin de certificados
La autenticacin con certificado cliente requiere obligatoriamente una conexin segura
(HTTPS) y la creacin de un conjunto de certificados x509. En nuestro caso debemos
generar un certificado para el servidor y otro para el cliente y adems ambos debern
estar firmados por una entidad de certificacin (CA) vlida.
Debido a que la firma de nuestros certificados por una entidad de certificacin vlida
implica realizar un desembolso econmico, vamos a crearnos nuestra propia CA con la
que firmaremos los certificados cliente/servidor. Esto implica, como veremos ms
adelante, que tengamos que aadir el certificado de la CA en nuestros almacenes de
certificados de confianza para que la aplicacin web funcione adecuadamente.
Con este comando le decimos a openssl que queremos generar una clave rsa con el
nombre ca_tutorial.key de 4096 bytes y que el algoritmo para encriptar la password ser
TripleDes. En el proceso de generacin de la clave privada, se nos preguntar por una
contrasea en nuestro caso podremos "autentia2010".
Una vez creada la clave privada ya podemos generar el certificado de la CA:
1. openssl req -x509 -days 365 -new -key ca_tutorial.key -out ca_tutorial.crt
2.
3. Enter pass phrase for ca_tutorial.key:
4. You are about to be asked to enter information that will be incorporated
5. into your certificate request.
6. What you are about to enter is what is called a Distinguished Name or a DN.
7. There are quite a few fields but you can leave some blank
8. For some fields there will be a default value,
9. If you enter '.', the field will be left blank.
10. ----11. Country Name (2 letter code) [AU]:ES
12. State or Province Name (full name) [Some-State]:Madrid
13. Locality Name (eg, city) []:Madrid
14. Organization Name (eg, company) [Internet Widgits Pty Ltd]:Autentia
15. Organizational Unit Name (eg, section) []:Developer
16. Common Name (eg, YOUR name) []:Autentia CA
17. Email Address []:
Como podemos ver se nos pedir la contrasea de la clave y posteriormente debemos
responder a una serie de preguntas: Nombre del pas, provincia, localidad, etc...
Si ahora abrimos el certificado (en nuestro caso con la aplicacin "Acceso a llaveros")
veremos algo como:
Configurando JBoss
Ahora que ya tenemos todos los certificados nos toca configurar JBoss. Lo primero ser
habilitar la conexin por HTTPS. Para ello, tenemos que crear una almacn de claves y
un almacn de certificados en los que confiar nuestro servidor para validar los
certificados cliente.
2.
3.
4.
5.
6.
port="${jboss.web.https.port}" address="${jboss.bind.address}"
scheme="https" secure="true" clientAuth="false"
keystoreFile="${jboss.server.home.dir}/conf/jboss.keystore"
keystorePass="autentia2010" sslProtocol = "TLS"
truststoreFile="${jboss.server.home.dir}/conf/jboss.truststore" truststorePass
="autentia2010"/>
7.
<loginmodule code="org.jboss.security.auth.spi.UsersRolesLoginModule"
8.
flag="required">
9.
<module-option name="password-stacking">useFirstPass</moduleoption>
10.
<module-option name="usersProperties">domainwebusers.properties</module-option>
11.
<module-option name="rolesProperties">domainwebroles.properties</module-option>
12.
</login-module>
13. </authentication>
14. </application-policy>
De estas lneas podemos destacar el nombre de la poltica de seguridad "domainweb"
que posteriormente deberemos usar en la configuracin de la aplicacin web, la opcin
securityDomain del mdulo BaseCertLoginModule donde le indicamos la ruta de
acceso al MBean del Dominio de Seguridad creado anteriormente y los ficheros de
propiedades donde se encuentran definidos los usuarios y roles de la aplicacin. Estos
dos ficheros los vamos a crear en la aplicacin web.
Para que el cliente pueda conectarse a la aplicacin necesitamos que el certificado se
encuentre almacenado en el almacn de claves que lee el Dominio de Seguridad, y es
muy importante que el alias con el que se almacene el certificado corresponda con el
DN del certificado. Para conocer el DN tendremos que ejecutar el siguiente comando:
1. keytool -printcert -file cliente.crt
2.
3. Propietario: EMAILADDRESS=angel.garcia@autentia.com, CN=Angel Garcia,
OU=Developer, O=Autentia, L=Madrid, ST=Madrid, C=ES
4. Emisor: CN=Autentia CA, OU=Developer, O=Autentia, L=Madrid, ST=Madrid,
C=ES
5. Nmero de serie: 2
6. Vlido desde: Wed Nov 24 09:59:26 CET 2010 hasta: Thu Nov 24 09:59:26 CE
T 2011
7. Huellas digitales del certificado:
8.
MD5: 4C:6C:05:02:8E:1B:93:12:8D:1D:0B:2C:05:B6:39:EB
9.
SHA1: 79:CA:45:98:7D:92:87:64:A3:E2:2C:FD:F5:3C:FC:62:6A:F4:50:B5
10.
Nombre del algoritmo de firma: SHA1withRSA
11.
Versin: 1
El valor del alias seria el del campo Propietario. Ahora para aadir el certificado a
jboss.keystore ejecutamos:
1. keytool -importcert alias "EMAILADDRESS=angel.garcia@autentia.com, CN=Angel Garcia, OU=
Developer, O=Autentia, L=Madrid, ST=Madrid, C=ES" -file cliente.crt keystore jboss.keystore
El siguiente paso es crear una aplicacin web que utilice el dominio de seguridad creado
en el apartado anterior. Con eclipse creamos un proyecto DynamicWeb y le aadimos
dos recursos index.html y certificado/index.html bajo la carpeta WebContent.
Ahora vamos a configurar la aplicacin web para que cuando se acceda a los recursos
situados dentro del directorio "certificado" pida al usuario un certificado cliente
mientras que el resto de recursos sern pblicos.
En el fichero web.xml aadimos:
1. <security-constraint>
2.
<web-resource-collection>
3.
<web-resource-name>Autenticacion con certificados</web-resourcename>
4.
<url-pattern>/certificado/*</url-pattern>
5.
<http-method>GET</http-method>
6.
<http-method>POST</http-method>
7.
</web-resource-collection>
8.
<auth-constraint>
9.
<role-name>User</role-name>
10. </auth-constraint>
11. </security-constraint>
12.
13. <security-role>
14. <role-name>User</role-name>
15. </security-role>
16.
17. <login-config>
18. <auth-method>CLIENT-CERT</auth-method>
19. <realm-name>Autenticacin con Certificado Cliente</realm-name>
20. </login-config>
Con estas lneas le indicamos a JBoss que todos los recursos que se encuentren en
/certificado estarn protegidos. Cmo se hace esto?, con la etiqueta security-constraint
indicndole el patrn de url de los recursos que estn protegidos. Luego con la etiqueta
login-config le indicamos el mtodo de autenticacin basado en certificado cliente
"CLIENT-CERT".
Ahora creamos un fichero especfico para JBoss donde le configuramos el dominio de
seguridad que utilizar la aplicacin. Creamos un fichero jboss-web.xml en el directorio
WEB-INF de nuestra aplicacin con:
1. <jboss-web>
2.
<security-domain>java:/jaas/domainweb</security-domain>
3.
<context-root>autentia</context-root>
4. </jboss-web>
Y por ltimo aadimos a src los ficheros de propiedades domainweb-users.properties y
domainweb-roles.properties. Slo nos quedara aadir al fichero domainweb-
roles.properties el rol que va a tener nuestro usuario cliente. Recordad que los iguales y
espacios deben ser escapados con \.
1. EMAILADDRESS\=angel.garcia@autentia.com,\ CN\=Angel\ Garcia,\ OU\=De
veloper,\ O\=Autentia,\ L\=Madrid,\ ST\=Madrid,\ C\=ES=User
Creamos el fichero WAR y los depositamos en $JBOSS_HOME/server/default/deploy.
Si ahora accedemos con un navegador a
http://localhost:8443/autentia/certificado/index.html. Nos deber salir: