2012
AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE
Javier García Cambronel SEGUNDO DE ASIR 14/02/2012
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 VALIDACIÓN MEDIANTE DNI ELECTRONICO OCSP Y CLR
SEGUNDO DE ASIR
Página 1
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
PREPARAMOS APACHE CON PHP Y MYSQL Lo primero que tendríamos que hacer si s i 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 c on dependencias MYSQL sudo apt-get install php5 php5-mysql Y este último para instalar MYSQL, en el que recomiendo encarecidamente que pongamos una contraseña sudo apt-get install mysql-server
Una vez hecho esto, nuestro Apache será capaz de interpretar PHP y trabajar con MYSQL.
SEGUNDO DE ASIR
Página 2
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
¿CREAMOS O IMPORTAMOS LA BASE DE DATOS? OPCION 1 CREAMOS LA BASE DE DATOS DE CERO VENTAJAS: 1. ningún problema de incompatibilidad con nuevas versiones motores de bases de datos. INCONVENIENTES: 1. tener a manos los códigos de creación o volver a crearlos con el mismo nombre para tablas y demás 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, estaría virgen, sin ningún dato y también tendríamos que empezar de nuevo recu recu erando erando los ue tuvié tuviéram ramos os
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 más lógico será llamarla así
Y con la siguiente orden empezamos a trabajar sobre ella
SEGUNDO DE ASIR
Página 3
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 códigos que tenemos que introducir, para que cada una de ellas tenga efecto, recordemos que si cambiamos el nombre a alguna tabla, ese cambio también tendrá que ser realizado debidamente en los códigos php correspondientes, para que los datos se inserten correctamente y no tengamos ningún tipo de fallo f allo
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
Página 4
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 AÑADIR 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
Página 5
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 tuviéramos anteriormente, los seguiremos teniendo., sin necesidad de volver a introducirlos nuevamente. INCONVENIENTES: 1. Posibles problemas en la configuración c onfiguración 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 botón de exportar.
Tenemos muchas opciones para exportar, desde formato (pdf,Excel…)como tipo de codificación….
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
Página 6
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 contraseña de la cuenta c uenta de Administración (la que hubiéramos dado en root)
Introducimos una contraseña para que phpmyadmin se registre con el servidor, puede ser la misma que habíamos dado antes.
SEGUNDO DE ASIR
Página 7
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
Después de esto veríamos como todo el proceso se ha llevado a cabo perfectamente
Después de instalarlo hay que hacer un enlace simbólico desde /usr/share/phpmyadmin hacia /var/www/phpmyadmin para que podamos acceder desde el navegador, sin ningún problema, lo hacemos con el siguiente comando: sudo ln -s /usr/share/phpmyadmin /var/www/
Una vez hecho esto, como podemos ver ya podríamos acceder perfectamente desde el navegador a nuestro phpmyadmin recién instalado.
SEGUNDO DE ASIR
Página 8
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
IMPORTAMOS LOS DATOS Una vez hemos entrado en phpmyadmin, seleccionamos la pestaña de importar y el botón examinar, seleccionando el archivo que habíamos guardado.
Puede que nos de un error como el siguiente
SEGUNDO DE ASIR
Página 9
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
La solución a este error, es añadir las siguientes líneas 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 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 tuviéramos guardados se han importado correctamente.
SEGUNDO DE ASIR
Página 10
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 ins talado y activo el módulo SSL del servidor. En servidores de tipo Debian como nuestro Ubuntu, se puede activar el módulo utilizando el comando: sudo a2enmod mod_ssl Nosotros ya lo habíamos hecho anteriormente, a nteriormente, al igual que el crear nuestro certificado, c ertificado, en la anterior práctica.
DESACTIVAMOS SITIO POR DEFECTO SSL Lo que tenemos que hacer, es desactivar el sitio por defecto SSL que habíamos creado en la anterior práctica. Aunque también podríamos 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
Página 11
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
CÓDIGO HOST VIRTUAL COMENTADO Para crear este host virtual vamos a modificar el archivo httpd.conf el cual, c ual, trabajamos en él, para crear el host virtual he creado el siguiente código el cual está comentado, para mayor aclaración. #se especifica que va a tener efecto en todas las direcciones que utilicen el puerto 443
#se indica el nombre del servidor y el puerto ServerAdmin webmaster@localhost # La ruta hasta la carpeta raíz 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 configuración de seguridad, y desactivamos des activamos sslv2 debido a sus vulnerabilidades SSLCipherSuite HIGH:MEDIUM:-SSLv2 #se suministra la ruta al certificado y la llave (el que creamos en la práctica anterior #certificado autofirmado) SSLCertificateFile "/etc/apache2/ssl/apache.pem" SSLCertificateKeyFile "/etc/apache2/ssl/apache.pem" #especificamos los derechos y opciones en el directorio Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny #por defecto se permite que todos los usuarios accedan allow from all SEGUNDO DE ASIR
Página 12
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
# la ruta y el nombre del certificado raiz DNIe SSLCACertificateFile "/etc/ssl/certs/ac_raiz_dnie "/etc/ssl/certs/ac_raiz_dnie.crt" .crt" # El cliente debe autenticarse obligatoriamente con el certificado c ertificado sino no se podrá acceder a cceder SSLVerifyClient require # Nivel máximo de profundidad (según infraestructura actual, 2) SSLVerifyDepth 2 AllowOverride None Order allow,deny allow from all #Indicamos al servidor que exporte los datos SSLOptions +StdEnvVars +ExportCertData
SEGUNDO DE ASIR
Página 13
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 electrónico en la siguiente dirección.
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
Página 14
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 continuación: openssl x509 -in ACRAIZ-SHA1.crt -inform DER -out ac_raiz_dnie.crt -outform PEM
Como vemos una vez realizada la operación 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 configuración en nuestro caso /etc/ssl/certs
INSTALAMOS EL MODULO CRIPTOGRÁFICO DEL DNIE EN LOS L OS CLIENTES Una vez hecho esto, nos descargamos desde la página Web el modulo criptográfico de el DNI electrónico. http://www.dnielectronico.es/descargas/index.html Seleccionamos la versión para nuestro sistema operativo. En cualquiera de los dos casos c asos la instalación se hace con doble click y siguiendo las instrucciones, las cuales son muy sencillas.
SEGUNDO DE ASIR
Página 15
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
EN WINDOWS: Necesitaremos reiniciar después de la instalación 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-> Opciones->Avanzado->Cifrado->Ver 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_SH (x86)/DNIe/ACRAIZ_CERTIFICATE_AND_CRL_SIGNING_SHA1.crt A1.crt
EN LINUX (UBUNTU-KOALA) ( UBUNTU-KOALA) No es necesario reiniciar después de la instalación
Si tendremos que registrar el modulo desde Aplicaciones->Oficina
SEGUNDO DE ASIR
Página 16
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
ACCEDEMOS MEDIANTE EXPLORER 9 Al intentar entrar en nuestro foro necesitaremos tener el DNI electrónico 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 botón de ir a este sitio web.
Como vemos accederíamos a nuestro foro mediante certificación con DNI electrónico
SEGUNDO DE ASIR
Página 17
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 información del Certificado del Usuario
Y podremos acceder sin ningún problema
SEGUNDO DE ASIR
Página 18
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] 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 añadir excepción al ser un certificado autofirmado.
Introduciríamos nuestro PIN
Veríamos información de nuestro certificado
Accederíamos a nuestro foro
SEGUNDO DE ASIR
Página 19
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
COMPORTAMIENTO DE EXPLORADORES SI NO INSERTAMOS EL DNI ELECTRONICO En el caso de no tener nuestro DNI electrónico introducido los errores variarían dependiendo del navegador EXPLORER
CHROME
FIREFOX
SEGUNDO DE ASIR
Página 20
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
VENTAJAS DE LA VALIDACIÓN MEDIANTE DNI ELECTRONICO Solo podrán acceder usuarios con DNI electrónico con toda la seguridad que su infraestructura conlleva.
Gracias a esta autenticación evitaremos los programas de análisis de vulnerabilidades Web, pues no podrán acceder a nuestro servidor.
En el caso de que hicieran estos análisis configurando nuevos programas sabremos s abremos 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 necesitaría el DNI físico de esa persona sino también su PIN.
SEGUNDO DE ASIR
Página 21
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
OCSP Y CLR Si quisiéramos poner todo esto en marcha en una situación real habrá que tener en cuenta los métodos de validación ocsp o clr para myor seguridad ¿todavía más? Si, es lo suyo. Pero no solo seguridad sino para la propia integridad Por ejemplo, si nosotros perdemos nuestro DNI, lo tendríamos que dar de baja, para que dicho certificado dejara de ser valido. Pese Pes e a que el que lo tuviera necesitara nuestro pin, si por algún caso lo consiguiera, con una aplicación como la que tenemos podría acceder. O mismamente si decimos que lo hemos perdido y nos lo quedamos podríamos autenticarnos en esta aplicación con el DNI antiguo y el antiguo PIN y con el DNI nuevo y el nuevo PIN. CLR Para evitar esto hay dos métodos el clr hasta ahora el más implementado, que consiste en bajarse la parte pública de los certificados, de los DNI´S que se han dado de baja. 1-Esto hace que el mantenimiento y la actualización en el servidor tenga que ser constante. 2-Mucho espacio en Disco.
OCSP Sin embargo la validación OCSP se conecta a la base de datos del DNI electrónico y se hace la verificación Online, de si ese DNI ha sido dado de baja o no y si no esta dado de baja procederíamos a hacer la autenticación como la hemos hecho en estos ejemplos. ¿CÓMO SE ACTIVA? Validación OCSP nativa de Apache Si utilizas una versión de Apache mayor o igual que 2.3.x no es necesario que hagas la Validación OCSP del DNIe en PHP y Apache, ya que se puede hacer desde el fichero de configuración. Para ello primero activamos la configuración OCSP con la directiva: SSLOCSPEnable on
Después indicamos la URL SSLOCSPDefaultResponder http://ocsp.dnielectronico.es/ SSLOCSPDefaultResponder http://ocsp.dnielectronico.es/
SEGUNDO DE ASIR
Página 22
[AUTENTICACIÓN SEGURA EN FORO MEDIANTE DNIE] DNIE ]
14 de febrero de 2012
NUESTRO CASO: VERSIONES DE APACHE MÁS ANTIGUAS Como nuestra versión de Apache es la 2.2.17 podríamos crear un index.php con el siguiente contenido, en el que nos diría el estado del DNI introducido. <meta http-equip="content-type" content="text/html; charset=UTF-8" />
Página de validación mediante HTTPS Validación del certificado de Autenticación DNIe"; echo '
Issuer cert: '.$issuer_cert.'
'; $output = shell_exec('openssl ocsp -CAfile '.$cert_ca.' -issuer '.$issuer_cert.' -cert '.$dir.$a.'cert_c.pem -url http://ocsp.dnie.es'); print_r('
'.$output.'
'); $output_parsed = preg_split('/[\r\n]/', $output); $output_parsed2 = preg_split('/: /', $output_parsed[0]); $ocsp = $output_parsed2[1]; echo "
El servidor OCSP del DNIe devuelve: ".$ocsp."
"; ?>
Como podemos ver el estado del certificado al ejecutar el autentificador OCSP es válido
SEGUNDO DE ASIR
Página 23