Get it on Google Play

Formación Liferay: Aplicaciones y portlets con DNI Electrónico

23-07-2013
 

dnielectronico

Estos días estamos desarrollando una oficina virtual para un ayuntamiento, la principal característica de una aplicación de este tipo es que en todas las peticiones el usuario debe validarse con su DNI Electrónico(No hace falta que se loguee en Liferay).

Para este proyecto hemos creado un framework marco donde después cada uno implementará sus servicios. Pero de esto hablaré en otros posts, en este hablaré de como configurar un servidor apache para que pida y valide un certificado al usuario y mande los datos al tomcat.

Como acabo de comentar, el objetivo es configurar un servidor apache que será el encargado de pedir y validar el certificado(DNI Electrónico) al usuario, luego estos datos viajarán hasta nuestro portlet(Quién solamente tendrá que validar que el certificado esta, porque la validación la delegaremos en el apache).

Entonces, para configurar nuestro apache, utilizaremos el siguiente sniped que insertaremos en nuestro ‘httpd.conf’:

Listen 443

<VirtualHost localhost:443>
	# Configuración del Virtual Host
 	# ….

	# Configuración SSL
	SSLEngine on
	SSLCipherSuite HIGH:MEDIUM:-SSLv2
	SSLCertificateFile "/opt/certs/apachecert.crt"
	SSLCertificateKeyFile "/opt/certs/apachecert.key"

	# Solicitar certificado
	SSLCACertificateFile "/opt/certs/FNMTClase2CA.pem"
	SSLVerifyClient require
	SSLVerifyDepth 2

	SSLOptions +ExportCertData +StdEnvVars
 </VirtualHost>

Primero, debemos activar el SSL configurándole un certificado firmado por una autoridad certificadora(Para hacer pruebas podemos crearnos un certificado auto-firmado con openssl):

openssl req -new -x509 -nodes -out /opt/certs/apachecert.crt -keyout /opt/certs/apachecert.key

Después viene la parte importante, configurar que solicite un certificado: Esto lo hacemos con la directiva ‘SSLVerifyClient’ que podemos decirle que sea obligatorio(require), que no lo solicite(none), que sea opcional(optional) o que sea opcional y además no valide(optional_no_ca). En la practica se suele usar solamente obligatorio o no porque los opcionales hay muchos navegadores que no lo admiten(Además si utilizamos optional_no_ca después tenemos que hacer la validación desde nuestra aplicación).

Una vez configurado la verificación, solo queda configurarle la autoridad certificadora(Una o varias, añadiendo varios certificados en el mismo fichero).

La otra directiva obligatoria es “SSLOptions +ExportCertData +StdEnvVars” que es la que indica al apache que exporte los datos del certificado al Tomcat.

Una vez hecho esto, y desde nuestro portlet Liferay o servlet solamente tenemos que verificar si hemos recibido o no el o los certificados. Esto lo hacemos de esta manera tan sencilla:

X509Certificate[] certs = (X509Certificate[]) renderRequest.getAttribute("javax.servlet.request.X509Certificate");

if ( certs!=null ) {
	/* Certificado presente */
} else {
	/* Certificado no presente */
	}

Este post esta orientado al DNI Electrónico pero los mismo tiene muchas aplicaciones, el mundo de los certificados tiene todavía mucho recorrido.

En futuros posts ya explicaré como hacer para firmar y trabajar con openssl. Además del tema de los frameworks.

Espero que esta mini píldora de formación os haya sido de ayuda para vuestras aplicaciones con DNI electrónico.

Interesado en formación Liferay?

 

Comments

2 Responses to “Formación Liferay: Aplicaciones y portlets con DNI Electrónico”
  1. […] semana he liberado la aplicación para Firefox OS del Blog (https://marketplace.firefox.com/app/albert-coronado). De momento es una versión muy básica que permite acceder a los posts y un apartado de […]

  2. […] Formación Liferay: Aplicaciones y portlets con DNI Electrónico […]

Leave a Reply

© Albert Coronado Calzada