OpenSSL

Introducción

Creado originalmente por la empresa Netscape, el protocolo SSL (Secure Socket Layer) ha evolucionado durante más de una década (la versión 3.0 apareció en 1996) y ha dado lugar a TLS (Transport Layer Security) que, en la actualidad, es el medio utilizado por servidores HTTP y navegadores web para establecer canales seguros de comunicación. SSL y TSL son estándares de los cuales existen diversas implementaciones de tipo comercial.

OpenSSL es un proyecto de tipo open source bajo el cual se ha desarrollado una implementación libre de SSL/TSL, conjuntamente con una biblioteca de servicios criptográficos de propósito general. Está disponible para diferentes sistemas operativos y puede obtenerse tanto en versión binaria como de código fuente. Paralelamente a la biblioteca propiamente dicha, que ofrece los servicios, también se han desarrollado utilidades que facilitan su uso ejecutando, por regla general desde una consola de texto, las operaciones más habituales: firma de certificados, obtención de claves, cifrado y descifrado, etc.

PHP dispone de un módulo, una extensión, que permite utilizar los servicios de OpenSSL desde aplicaciones escritas con dicho lenguaje. En esta sección se explica cómo habilitar dicha extensión, se documentan sus funciones y se desarrolla una aplicación completa que muestra cómo aprovecharla.

Instalación

Para poder utilizar OpenSSL desde aplicaciones desarrolladas con PHP es preciso instalar dos elementos separados e independientes:

  • La propia biblioteca OpenSSL que es la que aporta los servicios.
  • La extensión para OpenSSL de PHP.

Lógicamente se parte de la base de que en el sistema ya se encuentra instalado un servidor web, típicamente Apache, y también el propio PHP.

Instalación de la biblioteca OpenSSL (GNU/Linux)

La mayoría de las distribuciones de Linux incorporan la biblioteca OpenSSL en su instalación por defecto. Para comprobar si está instalada en tu sistema sencillamente ejecuta la orden whereis openssl desde una consola. El resultado obtenido debería ser similar al siguiente:

alumno@alumno-desktop:$ whereis openssl
openssl: /usr/bin/openssl /usr/X11R6/bin/openssl /usr/bin/X11/openssl /usr/share/man/man1/openssl.1ssl.gz

De no estar instalada, puedes utilizar el gestor de paquetes de tu distribución para efectuar la instalación. En Ubuntu abre el gestor de paquetes Synaptics, busca el término openssl e instala el paquete. En otras distribuciones puede utilizarse la orden sudo apt-get install openssl o el gestor de paquetes RPM.

Otra forma de instalar OpenSSL consiste en obtener el paquete de código fuente correspondiente a la última versión, directamente desde la web de OpenSSL, compilarlo e instalarlo.

Instalación de la biblioteca OpenSSL (Windows)

Puesto que se dispone del código fuente, en principio no existiría ningún problema para descargarlo y compilarlo en Windows obteniendo una versión actualizada de la biblioteca. Si no se dispone de un compilador de C++ adecuado, sin embargo, puede recurrirse a la web de Shining Light Productions a fin de obtener una versión ya compilada.

Descargado el paquete correspondiente a la versión más actual, no hay más que ejecutarlo para llevar a cabo la instalación. Una vez que ésta finalice puedes abrir una ventana Símbolo del sistema y utilizar el comando openssl para comprobar que, en efecto, la biblioteca está preparada para ser usada.

Instalación de la extensión OpenSSL para PHP

Una vez que tengas instalada la biblioteca OpenSSL en el sistema, el paso siguiente sería habilitar o instalar la extensión de PHP que permite acceder a las funciones de dicha biblioteca.

En las últimas versiones de PHP esta extensión se encuentra instalada por defecto. De no ser así, será necesario localizar el archivo de configuración de PHP (php.ini) y agregar la extensión a la lista de módulos que se cargan dinámicamente.

Índice de funciones

Listado alfabético Listado por categorías
openssl_csr_export_to_file Gestión de claves
openssl_csr_export openssl_pkey_new - Genera una nueva clave
openssl_csr_get_public_key openssl_pkey_free - Libera una clave
openssl_csr_get_subject openssl_pkey_export - Exporta la clave a una cadena
openssl_csr_new openssl_pkey_export_to_file - Exporta la clave a un archivo
openssl_csr_sign openssl_pkey_get_details - Facilita una matriz con detalles sobre la clave
openssl_error_string openssl_pkey_get_private - Extrae la clave privada de un certificado
openssl_free_key openssl_get_privatekey - Idéntica a la anterior
openssl_get_privatekey openssl_pkey_get_public - Extrae la clave pública de un certificado
openssl_get_publickey openssl_get_publickey - Idéntica a la anterior
openssl_open Gestión de certificados
openssl_pkcs12_export_to_file openssl_csr_export_to_file - Exporta una solicitud de firma de certificado a un archivo
openssl_pkcs12_export openssl_csr_export -Exporta una solicitud de firma de certicado como una cadena
openssl_pkcs12_read openssl_csr_get_public_key - Devuelve la clave pública asociada al certificado
openssl_pkcs7_decrypt openssl_csr_get_subject - Devuelve información asociada al certificado
openssl_pkcs7_encrypt openssl_csr_new - Genera una nueva solicitud de firma de certificado
openssl_pkcs7_sign openssl_csr_sign - Firma una solicitud de firma de certificado
openssl_pkcs7_verify openssl_pkcs12_export_to_file - Exporta a un archivo un certificado PKCS12
openssl_pkey_export_to_file openssl_pkcs12_export - Exporta a una cadena un certificado PKCS12
openssl_pkey_export openssl_pkcs12_read - Lee un certificado PKCS12
openssl_pkey_free openssl_x509_check_private_key - Comprueba si una clave privada pertenece a un certificado
openssl_pkey_get_details openssl_x509_checkpurpose - Comprueba si puede utilizarse el certificado para una cierta operación
openssl_pkey_get_private openssl_x509_export_to_file - Exporta a un archivo un certificado X509
openssl_pkey_get_public openssl_x509_export - Exporta a una cadena un certificado X509
openssl_pkey_new openssl_x509_free - Libera un certificado X509
openssl_private_decrypt openssl_x509_parse - Analiza un certificado X509 y devuelve información sobre el mismo
openssl_private_encrypt openssl_x509_read - Analiza un certificado X509 y devuelve un identificador
openssl_public_decrypt Operaciones criptográficas
openssl_public_encrypt openssl_open - Descifra un mensaje mediante el algoritmo RC4 usando una clave privada
openssl_seal openssl_pkcs7_decrypt - Descifra un mensaje S/MIME previamente cifrado mediante RC2/DES/3DES
openssl_sign openssl_pkcs7_encrypt - Cifra un mensaje mediante RC2/DES/3DES generando un mensaje S/MIME
openssl_verify openssl_pkcs7_sign - Firma un mensaje S/MIME
openssl_x509_check_private_key openssl_pkcs7_verify - Verifica la firma de un mensaje S/MIME firmado
openssl_x509_checkpurpose openssl_private_decrypt -Descifra un mensaje usando una clave privada
openssl_x509_export_to_file openssl_private_encrypt - Cifra un mensaje usando una clave privada
openssl_x509_export openssl_public_decrypt - Descifra un mensaje usando una clave pública
openssl_x509_free openssl_public_encrypt - Cifra un mensaje usando una clave pública
openssl_x509_parse openssl_seal - Cifra un mensaje mediante el algoritmo RC4 con una clave generada aleatoriamente
openssl_x509_read openssl_sign - Genera una firma para un mensaje mediante SHA1
openssl_verify - Verificar la firma asociada a un mensaje
Otras funciones
openssl_error_string - Devuelve el último mensaje de error OpenSSL
openssl_free_key -Libera los recursos asociados a una clave
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License