Ver índice
 Certificados digitales 

        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


Certificado digital

Cuando recibimos información cifrada con clave asimétrica pueden darse varias situaciones. Entre ellas estas:

Cifrado con nuestra clave pública

Solo nos garantiza la confidencialidad de la información dado que solo nosotros podremos descifrarlo pero nos oculta la verdadera identidad del remitente ya que cualquiera que haya tenido acceso a nuestra clave pública (cualquier usuario de la red podría haber tenido acceso a ella) pudo haberlo enviado.

Cifrado con clave privada

Tampoco nos garantiza la identidad del remitente. Sólo nos asegura que ha sido enviado por la misma persona que nos facilitó la clave pública. Eso no garantiza en ningún modo la identidad. Sólo prueba la concordancia entre la clave privada y la clave pública.

Es evidente que se requiere algo más y eso puede ser un certificado digital.

¿Qué es un certificado digital?

Es un documento digital mediante el cual un tercero confiable garantiza la vinculación entre la identidad de un sujeto o entidad y su clave pública. Podríamos considerarlo como algo muy similar al documento nacional de identidad español (en otros países seguramente existe un documento equivalente). El D.N.I. requiere que sea expedido por una entidad confiable (la Dirección General de la Policía) que garantiza que los datos que figuran en él corresponden a la persona física cuya fotografía, datos, firma y huella dactilar aparecen impresos.

Tipos de certificado digital

Dependiendo de la información que contiene cada uno y la finalidad con la que se emiten existen diferentes tipos de certificado digital. Para nuestro propósito resultan de particular interés:

Certificados personales

Acreditan la identidad del titular que ha de ser una persona física. Su finalidad es la firma electrónica de documentos con garantía de: la identidad del emisor, el no repudio de origen, la integridad y, si se requiere, la confidencialidad del contenido. También pueden ser usados para la autentificación de usuarios en sistemas que requieran un control de acceso sustituyendo los clásicos nombre de usuario y contraseña.

En España, las muestras más genuinas de este tipo de certificado son el el DNIe o el CERES - FNMT que emite de forma gratuita a petición de cualquier ciudadano español la Fábrica Nacional de Moneda y Timbre. En el primer caso –necesitamos un lector de tarjetas integrado en el propio teclado o accesible a través de una conexión USB externa– el certificado va incluido en el propio DNIE que tiene características de tarjeta criptográfica y en el segundo puede obtenerse mediante la descarga de un fichero a través de internet o adquiriendo en la FNMT una tarjeta criptográfica que lo contenga.

Certificado de servidor seguro

Son certificados destinados ser instalados en los servidores para asegurar su identidad frente a los usuarios que acceden. Garantizaría que el sitio web es el original, que no ha sido suplantado y que nadie ajeno al titular ha podido alterar la información publicada. Este tipo de certificados –no suelen ser gratuitos– son los emitidos por Autoridades Certificadoras (CA) tales como: Verisign, Thawte, RSA Security o GeoTrust por mencionar solo algunos de los más conocidos internacionalmente. Normalmente su precio varía dependiendo del plazo de validez y del prestigio de la entidad certificadora.

Certificado de autoridad certificadora

Una Autoridad Certificadora (CA) es una entidad en la que confían el emisor y el receptor de una comunicación. La confianza del emisor y del receptor en ella implica que ambos confían en los documentos firmados por la Autoridad Certificadora de su confianza. Los certificados de estas entidades llamados certificados raíz –las CA se certifican a si mismas– tienen por única finalidad permitir que sean verificables los certificado de terceros (servidores y/o clientes) expedidos por ella. Suelen tener carácter público son descargables como ocurre con el del DNIe.

Emisión de certificados

Técnicamente resulta sumamente fácil crear certificaciones de todo tipo y también convertirse en autoridades de certificación. El propio PHP dispone de funciones capaces de crear ese tipo de documentos y existen, además, aplicaciones gratuitas –OpenSSL, por citar la herramienta que nosotros vamos a utilizar– que realizan la misma función en cuestión de muy pocos segundos. El problema está en la confianza.

Por poner un ejemplo. Cualquiera podría diseñar un bonito diploma académico y emitir títulos de doctor en Medicina en cualquier mercadillo callejero. Puede que incluso uno de esos títulos pudiera llegar a manos de un facultativo de acreditadísimo prestigio. El problema sería, desde el punto de vista de la certificación, que ningún hospital la aceptaría como válida. Estaría fracasando la confianza, por un NO reconocimiento de autoridad certificadora.

Pongamos un segundo ejemplo. Nadie en España ni en la Comunidad Europea pondría en cuestión nuestra identidad si mostranos nuestro DNI. La autoridad certificada de la Dirección General de la Policía sería reconocida en toda Europa pero ¿tendría la misma validez en China o en USA?. Seguramente no. Allí solo reconocerían el pasaporte como documento acreditativo de nuestra identidad. De igual forma, una autoridad certificadora (CA) podrá tener un mayor o menor reconocimiento (vinculado a las garantías de veracidad y seguridad que ofrece). De ese grado de reconocimiento, entre otras cosas, suele depender el precio.

Las CA deben prestar especial atención a garantizar que nadie más que ellas pueden realizar su firma. Esa es la razón por la que ha de convertirse en algo casi obsesivo la custodia e inaccesibilidad de su clave privada. Si un tercero pudiera hacerse con ella estaría en disposición de emitir certificaciones falsas con la misma calidad que si permitieran a un falsificador hacer uso de las instalaciones y materiales de la FNMT.

Proceso de firma de un certificado

Cuando un entidad certificadora recibe una petición de certificado lo procesa de la forma siguiente:

firma de certificados


Comprobación de un certificado

Para comprobar la validez de un certificado debemos seguir un proceso inverso al anterior.

comprueba certificados

Por otra parte el descifrado con clave asimétrica de la huella incluida en el certificado nos garantiza que, además de no haber sido alterado, ha sido firmado realmente por la autoridad certificadora y no por otros. En la página siguiente veremos como configurar un servidor seguro y como establecer comunicaciones seguras utilizando este tipo de certificados.

Certificados auto firmados

Vamos a ver el procedimiento de creación de certificados digitales auto firmados. Para ello disponemos de una aplicación conocida como OpenSSL que nos va a permitir crearlos sin otra limitación que nuestro escaso prestigio como Autoridad Certificadora.

Configuración de OpenSSL

Tanto la versión de Apache que te he sugerido en páginas anteriores como la de nuestra instalación automática ya incluyen OpenSSL pero debemos configurar PHP para poder utilizarlo adecuadamente. Bastará con descomentar la línea 963 del fichero php.ini que tienes en el subdirectorio php53 y donde dice: ;extension=php_openssl.dll quitar el punto y coma, guardar los cambios y reiniciar el servidor Apache. Al acceder a http://localhost/info.php deberás visualizar algo como esto:

Si tu sistema operativo es Ubuntu deberás instalar primero y habilitar después el módulo SSL ejecutando desde la consola los siguientes comandos:

    sudo apt-get install apache2 libapache-mod-ssl
    sudo a2enmod ssl

Si eres usuario de Windows habrás de hacer una modificación en las variables de entorno del sistema. Para ello debes acceder a:
Inicio-> Configuración-> Paneles de control--> Sistema -> (configuración Avanzada*)-> Opciones avanzadas ->botón Variables de entorno

y comprobar si existe una variable del sistema (parte inferior de la ventana)con nombre OPENSSL_CONF y como valor C:/ServidoresLocales/Apache/conf/openssl.cnf.

En caso de que no existiera tendríamos que pulsar sobre la opción Nueva y rellenar una ventana como esta que ves en la imagen:

Una vez hayas pulsado Aceptar deberás reiniciar el equipo para que el cambio de configuración surta efectos.

  ¡Cuidado!  

El valor de la variable del sistema OPENSSL_CONF ha de ser la ruta absoluta hasta el fichero openssl.cnf que se incluye por defecto en directorio conf de Apache cuando se instala la versión que incluye openssl (en nuestro casohttpd-2.2.17-win32-x86-openssl-0.9.8o.msi).

El fichero se identifica por su icono (no se visualiza su extensión que es .cnf)

Si eventualmente necesitásemos editarlo habríamos de recurrir al shell de la consola de windows y ejecutar el comanto: edit C:/ServidoresLocales/Apache/conf/openssl.cnf

Creación de certificados digitales

Mediante la aplicación OpenSSL que suele venir configurada por defecto en la versiones de Ubuntu y cuya versión para Windows puede encontrarse en en este enlace podemos crear nuestros propios certificados digitales desde la consola de Ubuntu o desde el cmd.exe de windows siguiendo un proceso como el que se describe en las diferentes ventanas de esta imagen.

Pulsando sobre la flechas de la imagen podrás visualizar los diferentes pasos del proceso


Siguiendo el proceso descrito en la imagen, y para facilitarte la labor hemos incluido aquí un fichero llamado certificados.zip que contiene, entre otros, los siguientes ficheros:

Todos ellos han sido creados siguiendo el proceso descrito gráficamente en las imágenes anteriores.

Manejo de certificados digitales de cliente

Una vez dispongamos de un certificado digital de cliente habremos de instalarlo en el navegador de nuestro equipo. En las imágenes se describen los pasos de las diferentes opciones de manejo de este tipo de certificados digitales.

Pulsando sobre la flechas de la imagen podrás visualizar los diferentes pasos del proceso


¿Qué hay dentro de un certificado digital?

Si abrimos el fichero que contiene el certificado de cliente que hemos creado anteriormente nos encontraremos con una cadena de texto resultante de un proceso de codificación en base 64. Esa información es algo más transparente si recurrimos al uso de la función PHP openssl_x509_parse tal como puedes ver en los ejemplo siguiente:

Certificado original Ver código fuente Contenido certificado Ver código fuente

Podrás observar que contiene (y se puede visualizar) información relativa al titular del certificado, período de validez, identidad del emisor, etcétera. Algo bastante parecido a un DNI tradicional. Hay entre toda la información un campo relevante. Observa que hay un valor llamado hash que es la huella digital resultante de aplicar la función hash durante proceso de emisión del certificado digital. Es un elemento decisivo para poder comprobar la autenticidad del certificado. Su verificación será realizada de forma automática por el navegador del cliente.