Bases de Datos: Plataforma OpenSSL
Para la realización de la Practica “Gestión de accesos seguros SSL a una Base de Datos” vamos a utilizar la plataforma OpenSSL instalada en la Máquina Virtual de la asignatura. Esta plataforma nos va a permitir crear la infraestructura de seguridad (certificados y claves) que vamos a utilizar en la configuración del SGBD para implementar servicios de seguridad en el acceso a la Base de Datos.
Bases de Datos: Plataforma OpenSSL
OpenSSL es un entorno integrado que permite la creación y gestión de certificados digitales. OpenSSL dispone de la infraestructura necesaria para crear una Autoridad de Certificación, firmar certificados de usuario, revocar certificados etc .
OpenSSL es además un paquete de herramientas de administración y librerías de seguridad para la gestión de certificados y la implementación de mecanismos de seguridad. OpenSSL proporciona un entorno mediante el cual es posible mediante línea de comandos crear certificados, firmas digitales, cifrado/descrifrado información, mensajes S/mime etc….Además proporciona librerías para implemementar aplicaciones de seguridad en entorno C/C++ en sistemas operativos windows/linux
sistemas operativos windows/linux.
Esta librería criptográfica surge a partir del proyecto SSLeay, que fue iniciado por Eric A. Young y Tim J.Houston, y como propuesta inicial pretendía ofrecer el protocolo SSL para cualquier aplicación de seguridad. El proyecto OpenSSL fue iniciado en 1995, y actualmente es la librería criptográfica más usada. Algunas de las razones que la hacen tan popular son:
Es distribuida, usando una licencia de código libre. Esto permite a los usuarios realizar cambios y optimizaciones constantes en los elementos criptográficos que la componen. Es posible integrarla en cualquier aplicación comercial sin necesidad de abonar tasas permitiendo ofrecer soporte en cualquier aplicación comercial sin necesidad de abonar tasas, permitiendo ofrecer soporte
Bases de Datos: Plataforma OpenSSL
La herramienta openssl, que se invoca mediante la línea de mandatos, proporciona acceso a un gran conjunto de funciones criptográficas correspondientes a la librería criptográfica crypto. Algunas de las operaciones que se pueden realizar mediante dicha librería son:
Creación y gestión de certificados digitales X.509, solicitudes de certificados digitales (CSR) y listas de revocación de certificados (CRL).
Creación y gestión de claves privadas y claves públicas. Operaciones relacionadas con la criptografía de clave pública.
Cálculo de “resúmenes” de mensajes mediante funciones hash. Firma digital. Cifrado y descifrado con un amplio conjunto de algoritmos.
Api para el desarrollo de aplicaciones SSL/TLS cliente-servidor. Manejo de e-mails S/MIME cifrados y firmados.
Bases de Datos: Plataforma OpenSSL
Una vez instalado el entorno OpenSSL hay que poner en la variable “path” del sistema “C:\OpenSSL-Win32” que es la instalación por defecto de la plataforma*. De esta forma podemos ejecutar la herramienta desde cualquier directorio del sistema.
La forma de invocar la herramienta es tecleando “openssl”. Momento en el cual entramos en el entorno
OpenSSL>
En la figura se observan el conjunto de comandos disponibles de la herramienta *La máquina virtual del curso ya tiene configurado la variable de entorno del path de la instalación de OpenSSL con lo cual se puede invocar a la plataforma desde cualquier ventana MSDOS con el comando “openssl”.
Bases de Datos: Plataforma OpenSSL
Los certificados X.509 tiene un estándar PKCS#7 pueden almacenarse enp formato binario DER con extensiones “.crt”, “.cer”, “.der”. También pueden almacenarse en formato PEM con extensión “.pem”.
La claves privada al igual que los certificados pueden estar en formato DER o PEM. Y las extensiones de los ficheros serían “.der” o “.pem”. El formato de las claves sigue el estándar PKCS#8.
El formato PEM es la conversión base64 del formato DER a la que se añaden d li it d d l ti “ BEGIN CERTIFICATE ” “ END CERTIFICATE” unos delimitadores del tipo “-BEGIN CERTIFICATE-” y “-END CERTIFICATE”
Los archivos con extensión “.p12” se utilizan para almacenar en un único fichero cifrado el certificado de clave pública de un usuario y su clave privada. La extensión .pfx (Personal inFormation eXchange) es similar que la *.p12” en el entorno windows. El formato de estos ficheros sigue el estándar PKCS#12.
El entorno Openssl nos permite convertir formatos de certificados según sean requeridos por nuestras aplicaciones
Bases de Datos: Plataforma OpenSSL
Vamos a empezar a utilizar la herramienta creando un par clave privada-pública.
La clave privada la vamos a tener en un fichero que podemos opcionalmente proteger con una clave y un algoritmo simétrico como DES, AES 256 …
La clave pública también la podemos crear en un fichero. Se extrae a partir de la clave privada.p
Bases de Datos: Plataforma OpenSSL
Vamos ahora a crear un certificado digital X.509. vamos a llamar a este certificado, certificado de la Autoridad de Certificación (CA Certification Authority) Este certificado certificado de la Autoridad de Certificación (CA, Certification Authority). Este certificado nos permitirá autenticarnos frente a un servidor e implementar mecanismos de seguridad adicionales.
Vamos a poner los siguientes campos en el certificado de la CA
---Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:MA Locality Name (eg, city) []:BOA
O i ti N ( ) [I t t Wid it Pt Ltd] FIM
Organization Name (eg, company) [Internet Widgits Pty Ltd]:FIM Organizational Unit Name (eg, section) []:UPM
Common Name (eg, YOUR name) []:ALU1_CA Email Address []:[email protected]
OpenSSL>
Nótese que el comando para crear el certificado toma como parámetro de entrada el fichero de clave privada creada anteriormente. Podemos igualmente usar una clave privada cifrada; en este caso se nos pedirá la clave que cifra el fichero.
Vamos a convertir el certificado a formato binario DER creando un fichero con extension *.crt. Ahora pinchando en el fichero desde el entorno Windows podemos ver que ha sido creado correctamente.
También podemos crear un fichero con extension *.p12 que contenga el certificado de clave pública y la clave privada. Pinchando en el fichero obtenido desde el entorno windows se inicia un proceso de instalación del certificado. Éste se instalará en un almacén de certificado de usuario.
Por último podemos ver en formato texto el certificado construido.o ú t o pode os e e o ato te to e ce t cado co st u do
El certificado obtenido es un certificado autofirmado en el que el “emisor(Emitido por)” es igual que el “propietario (Enviado a)”.
Bases de Datos: Plataforma OpenSSL
Ahora nos vamos a crear un certificado de usuario pero firmado por una Autoridad de Certificación El certificado que nos hemos creado con anterioridad coincidían los Certificación. El certificado que nos hemos creado con anterioridad coincidían los campos emisor y propietario, es decir era un certificado autofirmado. Ahora nos vamos a crea un certificado emitido por la Autoridad de Certificación.
El proceso es el siguiente: En primer lugar generamos el par clave privada-pública. A continuación generamos una solicitud de firma, que en definitiva es un fichero con extensión *.csr. Este fichero lleva incorporado el certificado de usuario autofirmado con solicitud de ser firmado por una Autoridad de Certificación. Finalmente la Autoridad de Certificación tomando como parámetro su clave privada firmará el certificado.
Los campos que pondremos en el certificado de usuario son los siguientes: Country Name (2 letter code) [AU]:ES
State or Province Name (full name) [Some-State]:MA Locality Name (eg, city) []:BOA
Organization Name (eg, company) [Internet Widgits Pty Ltd]:FIM Organizational Unit Name (eg, section) []:UPM
Common Name (eg, YOUR name) []:alumno1seg( g, ) [] g Email Address []:[email protected]
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:oooooo An optional company name []:oooooo
Si queremos utilizar este certificado para firmar y cifrar mensajes con una aplicación de correo electrónico (como p.e outlook) necesitamos que el campo “Email Address” este correctamente
ll d l di ió d d l i P i l i ti l t l il
rellenado a la dirección de correo del usuario. P.e si el usuario tiene la cuenta en el correo gmail el campo de “Email Address” deberá ser rellenado a “[email protected]”.
Bases de Datos: Plataforma OpenSSL
De forma similar a como hicimos con el certificado de la Autoridad de Certificación convertimos el certificado a formato binario DER (extensión *.cer) y también construimos el fichero *.p12 con el certificado de usuario y la clave privada protegidas por contraseña.
Pinchando en el fichero “usrCertificado.crt” se observa que efectivamente se trata de un certificado firmado ya que los campos “emisor (emitido por)” y “propietario (Enviado a)” son diferentes. El emisor del certificado es la Autoridad que firma, que en nuestro caso se la Autoridad de Certificación que nos hemos creado.
Bases de Datos: Plataforma OpenSSL
El mecanismo de firma digital es esencial para implementar servicios como el “no repudio”. Un usuario que firma un documento con una clave privada asociada a un certificado de clave publica (avalado por una Autoridad de Certificación reconocida) no puede negar haber firmado un documento.
El mecanismo de firma consiste en hacer un resumen de documento (aplicar una función hash) y cifrar el resultado con la clave privada del usuario:
ClavePrivada[Hash(documento)]= BloqueCifrado
El proceso de verificación de firma consiste en el proceso inverso: Se aplica la clave pública al BloqueCifrado anterior y se compara con el resumen del documento
ClavePública[BloqueCifrado] se compara con Hash(documento) Si el resultado de esta comparación es afirmativa se considera verificada la
Bases de Datos: Plataforma OpenSSL
Un documento también podría cifrase con la clave pública obteniendo un bloque cifrado. En este caso sólo el propietario de la clave privada par de la anterior podría descifrar ese bloque cifrado.
A diferencia del mecanismo de firma (cifrado con clave privada), el cifrado con clave pública lleva implícito el servicio de confidencialidad: Nadie puede acceder a los contenidos del bloque cifrado salvo el propietario de la clave privada.
Los algoritmos de la criptografía asimétrica son lentos. Están pensados para cifrar poca cantidad de información. El ejemplo más común es usarlos para cifrar las claves de sesión intercambias entre dos usuarios. El protocolo SSL lo hace así: en el mensaje “Intercambio_clave_cliente” se envía las claves de sesión cifradas con la clave pública del servidor extraída de su certificado.
En la figura se muestran los comando OpenSSL necesarios para cifrar con la clave pública un documento.
La clave pública también se puede extraer así: rsa -in cert_userp12.pem -out publica.pem -pubout
Bases de Datos: Plataforma OpenSSL
El entorno OpenSSL proporciona de manera estándar muchos algoritmos de cifrado simétrico, incluidas diferentes variantes de cada uno.
En la figura se muestra como cifra un documento de texto incluyendo la clave de cifrado en el comando.
La clave también se puede introducir por teclado: des -in documento.txt -out documento_cifrado_des
Bases de Datos: Plataforma OpenSSL
Se pueden utilizar otros algoritmos de cifrado :
OpenSSL> des3 -in documento.txt -out documento_cifrado_des3 -pass pass:clave
OpenSSL> des3 -d -in documento_cifrado_des3 -out documento_original_des3.txt -pass pass:clave
OpenSSL> aes-256 -ecb-in documento.txt -out documento_cifrado_aes -pass pass:clave
OpenSSL> aes-256-ecb -d -in documento_cifrado_aes -out documento_original_aes.txt -pass pass:clave
OpenSSL> rc4 -in documento.txt -out documento_cifrado_rc4 -pass pass:clave OpenSSL> rc4 d in documento_cifrado_rc4 out documento_original_rc4.txt -pass -pass:clave
OpenSSL> idea-ecb -in documento.txt -out documento_cifrado_idea -pass pass:clave
OpenSSL> idea-ecb -d -in documento_cifrado_idea -out documento_original_idea.txt -pass pass:clave