Está en la página 1de 24

2012

AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE

Javier Garca Cambronel SEGUNDO DE ASIR 14/02/2012

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012

PREPARAMOS APACHE CON PHP Y MYSQL CREAMOS O IMPORTAMOS LA BASE DE DATOS?


OPCION 1 CREAMOS LA BASE DE DATOS DE CERO OPCION 2 IMPORTAMOS LA BASE DE DATOS

AUTENTICACION DNI ELECTRONICO VENTAJAS DE LA VALIDACIN MEDIANTE DNI ELECTRONICO OCSP Y CLR

SEGUNDO DE ASIR

Pgina 1

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012

PREPARAMOS APACHE CON PHP Y MYSQL


Lo primero que tendramos que hacer si no lo hemos hecho ya, seria instalar tanto PHP con dependencias para trabajar con mysql, como php. Lo dicho anteriormente, si no lo hemos hecho, seguimos estos pasos. Introducir el siguiente comando para instalar PHP en apache con dependencias MYSQL sudo apt-get install php5 php5-mysql Y este ltimo para instalar MYSQL, en el que recomiendo encarecidamente que pongamos una contrasea sudo apt-get install mysql-server

Una vez hecho esto, nuestro Apache ser capaz de interpretar PHP y trabajar con MYSQL.

SEGUNDO DE ASIR

Pgina 2

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012

CREAMOS O IMPORTAMOS LA BASE DE DATOS? OPCION 1 CREAMOS LA BASE DE DATOS DE CERO


VENTAJAS: 1. ningn problema de incompatibilidad con nuevas versiones motores de bases de datos. INCONVENIENTES: 1. tener a manos los cdigos de creacin o volver a crearlos con el mismo nombre para tablas y dems que los archivos en php o cambiar estos con todo el trabajo que conlleva sobretodo en bases de datos complejas. 2. la base de datos, estara virgen, sin ningn dato y tambin tendramos que empezar de nuevo recuperando los que tuviramos

INTRODUCCION CREANDO NUESTRA BASE DE DATOS Lo primero que hacemos es entrar como usuario en mysql, es decir nos identificamos. Creamos nuestra base de datos con el nombre que queramos como vamos a trabajar sobre un foro, lo ms lgico ser llamarla as

Y con la siguiente orden empezamos a trabajar sobre ella

SEGUNDO DE ASIR

Pgina 3

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


CREANDO LAS TABLAS DE NUESTRO FORO Lo siguiente que debemos hacer es crear las tablas sobre las que vamos a trabajar, aqu tenemos los cdigos que tenemos que introducir, para que cada una de ellas tenga efecto, recordemos que si cambiamos el nombre a alguna tabla, ese cambio tambin tendr que ser realizado debidamente en los cdigos php correspondientes, para que los datos se inserten correctamente y no tengamos ningn tipo de fallo

CODIGO TABLA USUARIOS CREATE TABLE usuarios( email VARCHAR(150) NOT NULL PRIMARY KEY, password VARCHAR(150));

CODIGO TABLA TEMAS CREATE TABLE temas_foro( id_tema INT NOT NULL PRIMARY KEY AUTO_INCREMENT, titulo_tema VARCHAR(150), fecha_creacion DATETIME, email VARCHAR(150) NOT NULL, FOREIGN KEY (email) REFERENCES usuarios(email));

SEGUNDO DE ASIR

Pgina 4

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


CODIGO TABLA POSTS CREATE TABLE posts_foro( id_post INT NOT NULL PRIMARY KEY AUTO_INCREMENT, id_tema INT NOT NULL, texto_post TEXT, fecha_creacion DATETIME, email VARCHAR(150) NOT NULL, creacion VARCHAR(10), FOREIGN KEY (id_tema) REFERENCES temas_foro(id_tema) ON DELETE CASCADE, FOREIGN KEY (email) REFERENCES usuarios(email));

OPCION PARA AADIR ARCHIVOS AL CONTESTAR A UN TEMA Alter table posts_foro add (file varchar(150));

TABLA SESIONES CREATE TABLE sesiones( id_sesion VARCHAR(500) NOT NULL PRIMARY KEY, email VARCHAR(150) NOT NULL, FOREIGN KEY (email) REFERENCES usuarios(email) ON DELETE CASCADE);

SEGUNDO DE ASIR

Pgina 5

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012

OPCION 2 IMPORTAMOS LA BASE DE DATOS


VENTAJAS: 1. No necesitamos saber como construimos las tablas, pues la estructura completa se clona. 2. Todos los datos que tuviramos anteriormente, los seguiremos teniendo., sin necesidad de volver a introducirlos nuevamente. INCONVENIENTES: 1. Posibles problemas en la configuracin a la hora de importar datos sobre versiones anteriores de mysql que la original.

PRIMERO: EXPORTAMOS Lo primero que hacemos es ir donde tenemos nuestra base de datos creada, la escogemos y pulsamos el botn de exportar.

Tenemos muchas opciones para exportar, desde formato (pdf,Excel)como tipo de codificacin. A nosotros nos interesa exportarlo a una base de datos, asique el formato va a ser SQL, es lo nico que nos interesa. Una vez hecho esto guardamos el archivo donde queramos.

SEGUNDO DE ASIR

Pgina 6

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


INSTALAMOS PHPMYADMIN DONDE IMPORTAREMOS LOS DATOS Para tener phpMyAdmin, podemos instalar el paquete phpmyadmin de los repositorios oficiales de Ubuntu. sudo apt-get install phpmyadmin

Nos saldr la siguiente ventana y elegiremos apache2

Introducimos la contrasea de la cuenta de Administracin (la que hubiramos dado en root)

Introducimos una contrasea para que phpmyadmin se registre con el servidor, puede ser la misma que habamos dado antes.

SEGUNDO DE ASIR

Pgina 7

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


Despus de esto veramos como todo el proceso se ha llevado a cabo perfectamente

Despus de instalarlo hay que hacer un enlace simblico desde /usr/share/phpmyadmin hacia /var/www/phpmyadmin para que podamos acceder desde el navegador, sin ningn problema, lo hacemos con el siguiente comando: sudo ln -s /usr/share/phpmyadmin /var/www/

Una vez hecho esto, como podemos ver ya podramos acceder perfectamente desde el navegador a nuestro phpmyadmin recin instalado.

SEGUNDO DE ASIR

Pgina 8

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


IMPORTAMOS LOS DATOS Una vez hemos entrado en phpmyadmin, seleccionamos la pestaa de importar y el botn examinar, seleccionando el archivo que habamos guardado.

Puede que nos de un error como el siguiente

SEGUNDO DE ASIR

Pgina 9

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


La solucin a este error, es aadir las siguientes lneas al archivo, desde el cual importamos los datos, la primera para crear nuestra base de datos y la segunda para seleccionarla.

Una vez hemos hecho estos cambios, volvemos a intentar importar la base de datos y vemos que ahora el resultado es satisfactorio.

Y como vemos si miramos el contenido de nuestra base de datos podemos ver como los datos que tuviramos guardados se han importado correctamente.

SEGUNDO DE ASIR

Pgina 10

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012

AUTENTICACION DNI ELECTRONICO


ACTIVAR MODULO SSL Para poder realizar conexiones mediante sockets de tipo SSL es necesario tener instalado y activo el mdulo SSL del servidor. En servidores de tipo Debian como nuestro Ubuntu, se puede activar el mdulo utilizando el comando: sudo a2enmod mod_ssl Nosotros ya lo habamos hecho anteriormente, al igual que el crear nuestro certificado, en la anterior prctica.

DESACTIVAMOS SITIO POR DEFECTO SSL Lo que tenemos que hacer, es desactivar el sitio por defecto SSL que habamos creado en la anterior prctica. Aunque tambin podramos modificarlo para adaptarlo. Pero es mejor crear un host virtual de cero para no liarnos con las directivas. sudo a2dissite default-ssl

SEGUNDO DE ASIR

Pgina 11

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


CDIGO HOST VIRTUAL COMENTADO Para crear este host virtual vamos a modificar el archivo httpd.conf el cual, trabajamos en l, para crear el host virtual he creado el siguiente cdigo el cual est comentado, para mayor aclaracin. #se especifica que va a tener efecto en todas las direcciones que utilicen el puerto 443 <VirtualHost *:443> #se indica el nombre del servidor y el puerto ServerAdmin webmaster@localhost # La ruta hasta la carpeta raz del entorno web en este caso donde esta nuestro foro DocumentRoot /var/www/foro # Indicamos donde se guardaran todos los logs de acceso y de errores ErrorLog /var/log/apache2/site2-error_log TransferLog /var/log/apache2/site2-access_log #Se activa el protocolo SSL SSLEngine on #se indica la configuracin de seguridad, y desactivamos sslv2 debido a sus vulnerabilidades SSLCipherSuite HIGH:MEDIUM:-SSLv2 #se suministra la ruta al certificado y la llave (el que creamos en la prctica anterior #certificado autofirmado) SSLCertificateFile "/etc/apache2/ssl/apache.pem" SSLCertificateKeyFile "/etc/apache2/ssl/apache.pem" #especificamos los derechos y opciones en el directorio <Directory /> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny #por defecto se permite que todos los usuarios accedan allow from all </Directory> SEGUNDO DE ASIR Pgina 12

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


<Directory /var/www/foro> # la ruta y el nombre del certificado raiz DNIe SSLCACertificateFile "/etc/ssl/certs/ac_raiz_dnie.crt" # El cliente debe autenticarse obligatoriamente con el certificado sino no se podr acceder SSLVerifyClient require # Nivel mximo de profundidad (segn infraestructura actual, 2) SSLVerifyDepth 2 AllowOverride None Order allow,deny allow from all </Directory> #Indicamos al servidor que exporte los datos SSLOptions +StdEnvVars +ExportCertData </VirtualHost>

SEGUNDO DE ASIR

Pgina 13

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


COMPROBAMOS LAS FUENTES El certificado de la CA del DNIe (ac_raiz_dnie.crt) se puede obtener desde del Portal del DNI electrnico en la siguiente direccin.

http://www.dnielectronico.es/seccion_integradores/autoridades_cert.html

Como vemos se nos informa de cuales son las funciones hash sha1 y md5 del archivo, lo subimos como ya viene siendo habitual a virustotal y asi comprobar las fuentes del archivo que descargamos. Vemos que el archivo ya ha sido analizado, pues si vamos a implementar un sistema tan seguro, tendremos que comprobar que realmente es, lo que queremos instalar.

Comprobamos que el archivo est limpio y que tanto el hash MD5 como SHA1 coinciden con los valores que nos tiene que dar, en la imagen de arriba

SEGUNDO DE ASIR

Pgina 14

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


INSTALAMOS Y CONFIGURAMOS EL CERTIFICADO RAIZ PARA EL SERVIDOR Este certificado que hemos descargado esta en formato DER y el servidor web Apache espera un certificado en formato PEM. Para convertirlo de formato DER a PEM se puede utilizar la herramienta openssl tal y como se muestra a continuacin: openssl x509 -in ACRAIZ-SHA1.crt -inform DER -out ac_raiz_dnie.crt -outform PEM

Como vemos una vez realizada la operacin tendremos el archivo que queremos y lo ponemos en la ruta donde guardamos los certificados que es la que hemos indicado en el archivo de configuracin en nuestro caso /etc/ssl/certs

INSTALAMOS EL MODULO CRIPTOGRFICO DEL DNIE EN LOS CLIENTES Una vez hecho esto, nos descargamos desde la pgina Web el modulo criptogrfico de el DNI electrnico. http://www.dnielectronico.es/descargas/index.html Seleccionamos la versin para nuestro sistema operativo. En cualquiera de los dos casos la instalacin se hace con doble click y siguiendo las instrucciones, las cuales son muy sencillas.

SEGUNDO DE ASIR

Pgina 15

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


EN WINDOWS: Necesitaremos reiniciar despus de la instalacin para que los cambios se lleven a cabo. Si usamos Firefox nos dara error al implementarlo y tendremos que hacerlo a mano Desde Opciones->Avanzado->Cifrado->Ver cifrado->importar y seleccionaremos la ruta

La ruta por defecto del certificado es la siguiente: C:/Program Files (x86)/DNIe/ACRAIZ_CERTIFICATE_AND_CRL_SIGNING_SHA1.crt

EN LINUX (UBUNTU-KOALA) No es necesario reiniciar despus de la instalacin

Si tendremos que registrar el modulo desde Aplicaciones->Oficina

SEGUNDO DE ASIR

Pgina 16

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


ACCEDEMOS MEDIANTE EXPLORER 9 Al intentar entrar en nuestro foro necesitaremos tener el DNI electrnico en nuestro lector, e introducimos el PIN.

Nos dira, si queremos acceder al sitio WEB, ay que nuestro certificado no esta emitido por una entidad nos saldr el siguiente aviso y pulsamos en el botn de ir a este sitio web.

Como vemos accederamos a nuestro foro mediante certificacin con DNI electrnico

SEGUNDO DE ASIR

Pgina 17

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


ACCEDEMOS MEDIANTE CHROME 17 Intentamos acceder a nuestro foro y pulsamos en continuar de todos modos

Introducimos nuestro Pin con el DNI metido en la lectora

Nos muestra informacin del Certificado del Usuario

Y podremos acceder sin ningn problema

SEGUNDO DE ASIR

Pgina 18

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


ACCEDEMOS MEDIANTE FIREFOX 10.1 Nos aparece la siguiente ventana en la que pulsaremos en entiendo los riesgos y en aadir excepcin al ser un certificado autofirmado.

Introduciramos nuestro PIN

Veramos informacin de nuestro certificado

Accederamos a nuestro foro

SEGUNDO DE ASIR

Pgina 19

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


COMPORTAMIENTO DE EXPLORADORES SI NO INSERTAMOS EL DNI ELECTRONICO En el caso de no tener nuestro DNI electrnico introducido los errores variaran dependiendo del navegador EXPLORER

CHROME

FIREFOX

SEGUNDO DE ASIR

Pgina 20

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012

VENTAJAS DE LA VALIDACIN MEDIANTE DNI ELECTRONICO


Solo podrn acceder usuarios con DNI electrnico con toda la seguridad que su infraestructura conlleva.

Gracias a esta autenticacin evitaremos los programas de anlisis de vulnerabilidades Web, pues no podrn acceder a nuestro servidor.

En el caso de que hicieran estos anlisis configurando nuevos programas sabremos quienes se autentican en nuestra WEB y que operaciones han realizado, pues su actividad estar vinculada al certificado y a si DNI.

Un atacante para acceder como otro usuario no solo necesitara el DNI fsico de esa persona sino tambin su PIN.

SEGUNDO DE ASIR

Pgina 21

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012

OCSP Y CLR
Si quisiramos poner todo esto en marcha en una situacin real habr que tener en cuenta los mtodos de validacin ocsp o clr para myor seguridad todava ms? Si, es lo suyo. Pero no solo seguridad sino para la propia integridad Por ejemplo, si nosotros perdemos nuestro DNI, lo tendramos que dar de baja, para que dicho certificado dejara de ser valido. Pese a que el que lo tuviera necesitara nuestro pin, si por algn caso lo consiguiera, con una aplicacin como la que tenemos podra acceder. O mismamente si decimos que lo hemos perdido y nos lo quedamos podramos autenticarnos en esta aplicacin con el DNI antiguo y el antiguo PIN y con el DNI nuevo y el nuevo PIN. CLR Para evitar esto hay dos mtodos el clr hasta ahora el ms implementado, que consiste en bajarse la parte pblica de los certificados, de los DNIS que se han dado de baja. 1-Esto hace que el mantenimiento y la actualizacin en el servidor tenga que ser constante. 2-Mucho espacio en Disco.

OCSP Sin embargo la validacin OCSP se conecta a la base de datos del DNI electrnico y se hace la verificacin Online, de si ese DNI ha sido dado de baja o no y si no esta dado de baja procederamos a hacer la autenticacin como la hemos hecho en estos ejemplos. CMO SE ACTIVA? Validacin OCSP nativa de Apache Si utilizas una versin de Apache mayor o igual que 2.3.x no es necesario que hagas la Validacin OCSP del DNIe en PHP y Apache, ya que se puede hacer desde el fichero de configuracin. Para ello primero activamos la configuracin OCSP con la directiva: SSLOCSPEnable on Despus indicamos la URL SSLOCSPDefaultResponder http://ocsp.dnielectronico.es/

SEGUNDO DE ASIR

Pgina 22

[AUTENTICACIN SEGURA EN FORO MEDIANTE DNIE] 14 de febrero de 2012


NUESTRO CASO: VERSIONES DE APACHE MS ANTIGUAS Como nuestra versin de Apache es la 2.2.17 podramos crear un index.php con el siguiente contenido, en el que nos dira el estado del DNI introducido. <html> <head> <meta http-equip="content-type" content="text/html; charset=UTF-8" /> <title>Pgina de validacin mediante HTTPS</title> </head> <body> <?php $a = rand(1000, 99999); $dir = "/var/www/foro/"; file_put_contents($dir.$a.'cert_c.pem', $_SERVER['SSL_CLIENT_CERT']); $cert_ca = "/etc/ssl/certs/ac_raiz_dnie.crt"; $output = shell_exec('openssl x509 -in '.$dir.$a.'cert_c.pem'.' -issuer -noout'); if(strpos($output, "CN=AC DNIE 001")) $issuer_cert = "/etc/ssl/certs/ACDNIE001-SHA1.crt"; else if(strpos($output, "CN=AC DNIE 002")) $issuer_cert = "/etc/ssl/certs/ACDNIE002-SHA1.crt"; else if(strpos($output, "CN=AC DNIE 003")) $issuer_cert = "/etc/ssl/certs/ACDNIE003-SHA1.crt"; echo "<h1>Validacin del certificado de Autenticacin DNIe</h1>"; echo '<p>Issuer cert: '.$issuer_cert.'</p>'; $output = shell_exec('openssl ocsp -CAfile '.$cert_ca.' -issuer '.$issuer_cert.' -cert '.$dir.$a.'cert_c.pem -url http://ocsp.dnie.es'); print_r('<p>'.$output.'</p>'); $output_parsed = preg_split('/[\r\n]/', $output); $output_parsed2 = preg_split('/: /', $output_parsed[0]); $ocsp = $output_parsed2[1]; echo "<p>El servidor OCSP del DNIe devuelve: ".$ocsp."</p>"; ?> </body> </html>

Como podemos ver el estado del certificado al ejecutar el autentificador OCSP es vlido

SEGUNDO DE ASIR

Pgina 23