Í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 / MySQLValidez 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
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.
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.
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.