Ver índice
 Extraer información de certificados 

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Validez de los certificados

Las comprobaciones que se realizan sobre los certificados de usuarios presentan una laguna importante. La validez nos indica que un certificado de DNIe no ha sido manipulado y que ha sido emitido por la policía pero no podemos saber si está siendo usado de modo indebido por el titular o por una tercera persona.

Supongamos que perdemos nuestro DNIe, o que simulamos su extravío. En el momento de formular la denuncia, la autoridad gubernativa procede a revocar nuestro certificado digital incorporándolo a la base de datos pública de documentos revocados. Podríamos entender que a partir de ese momento no somos responsables del uso que pueda hacerse del mismo.

Para consultar esa base de datos existe un protocolo conocido como OCSP (Online Certificate Status Protocol) mediante el cual podemos conocer la validez actual de un certificado. Estos servicios de validación del DNIe, según informan en su web, son prestados de forma ininterrumpida todos los días del año por la «Fábrica Nacional de Moneda y Timbre – Real Casa de la Moneda, que prestará sus servicios de validación con carácter universal: ciudadanos, empresas ...»

No ocurre lo mismo con los certificados FNMT ya que en ese caso el acceso al «OCSP responder» no tiene carácter gratuito.

Más abajo tienes un ejemplo de la forma de efectuar la comprobación de la validez del DNIe y, además, podrás ver la forma en la que pueden extraerse los datos personales: nombre, apellidos, nº, periodo de validez e incluso la fecha de nacimiento del titular. Da la impresión de que en un futuro no muy lejano la autentificación, e incluso la restricción de accesos a menores, acabará haciéndose mediante este documento.

Lectura de certificados de cliente

PHP dispone de la función openssl_x509_parse(certificado, booleano) que permite leer los contenidos de un certificado en formato PEM y recoger los resultados en un array. Cuando el parámetro booleano es TRUE -valor por defecto- utilizará nombres cortos para los índices de los arrays. Si a ese parámetro le asignamos el valor FALSE (0) usaría nombres largos. La diferencia puedes verla en estos ejemplos. Estos primeros utilizan la opción FALSE

lee certNORA leee FNMT lee DNIe

mientras que estos otros utilizan la opción TRUE. En ambos caso estamos visualizando copias de los tres tipos de certificados: nuestros certificados de prueba, un certificado de la FNMT y otro de DNIe.

lee certNORA leee FNMT lee DNIe

Para que puedas visualizar estos certificados ejemplo –tienen carácter público y no pueden ser utilizados sin su clave privada– hemos guardado aquí una copia de ellos.

Cuando intentamos acceder, mediante el protocolo HTTPS a un directorio configurado como SSLVerifyClient require y, además se incluye la opción SSLOptions +ExportCertData los datos de los certificados de servidor y cliente son recogidos en dos variables superglobales.

    La variable $_SERVER['SSL_SERVER_CERT'] contendrá una cadena con el certificado del servidor en formato PEM mientras que $_SERVER['SSL_CLIENT_CERT'] tendrá idéntica información pero referente al certificado del cliente.

Este es el código fuente del script utilizado en los ejemplos anteriores.

ver código fuente

Verificación de la validez de un DNIe

OpenSSL dispone de una utilidad que permite verificar la validez de un DNIe. Se trataría de ejecutar desde la línea de comando lo siguiente:

openssl ocsp -CAfile cert_raiz_dnie -issuer emisor -cert cliente -url direccion cuyos parámetros son los siguientes:

Este comando puede ser ejecutado desde PHP incluyéndolo en una llamada a la funcion shell_exec() que es el procedimiento que seguimos en el ejemplo que tienes a continuación.

Al ver el código fuente podrás observar que al script le hemos incluido una opción para simular la lectura de un DNIe sin necesidad de que configures tu servidor en modo seguro y, a la vez, para intentar ilustrar las posibilidades del DNIe y el certificado de la FNMT en el caso en que no dispongas de ellos o no te apetezca configurar tu servidor para trabajar en modo seguro.

Para utilizar este script con tu propio DNIe bastará con que lo copies al directorio restringido de la configuración que hemos propuesto para el servidor seguro (obviamente es imprescindible esa configuración) y que accedas a él a través de la dirección:https://localhost/dnie/test_dnie.php.

Verificar DNIe Ver código fuente

  ¡Cuidado!  

Si has hecho la verificación del DNIe del ejemplo anterior habrás podido ver que el certificado está revocado. Eso es cierto. El certificado que hemos utilizado corresponde a un DNIe que ya fué renovado y como consecuencia de esa renovación ha sido emitido un nuevo certificado con la consiguiente revocación del anterior.

¿Cómo utilizar el DNIe?

La utilización del DNIe electrónico requiere, tal como se explica en su página oficial, disponer de un lector de tarjetas inteligentes que cumpla el estándar ISO-7816. Existen distintas implementaciones, bien integrados en el teclado, bien externos (conectados vía USB) o bien a través de una interfaz PCMCIA el uso de un lector.

Además del dispositivo de hardware es necesario realizar algunas instalaciones de certificados y modificar algunas configuraciones de los navegadores. Este proceso puede hacerse basándose en la información de la web oficial del DNIe o recurriendo a algunas herramientas que permiten efectuar esa instalación y configuración de forma automática. Una de ellas, https://zonatic.usatudni.es nos permite descargar paquetes autoinstaladores tanto para las diferentes versiones de Windows como para Ubuntu.

Para este último caso, en enlace anterior aún no dispone en esta fecha (03.04.2012) de una versión que permita realizar la instalación sobre Ubuntu 12.04. Para quien necesite utilizar esta versión del sistema operativo hay una excelente página http://bitplanet.es/manuales/3-linux/ dónde se describe de forma minuciosa todo el proceso de instalación y configuración en este supuesto.