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. Pág. 1 12/04/2016
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. 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 SSL criptográfico, comparable con casi cualquier librería comercial. Puede ser ejecutada en numerosas plataformas, permitiendo la exportación de las aplicaciones que la utilizan a cualquier sistema operativo. Las últimas versiones disponibles se pueden obtener de : https://slproweb.com/products/win32openssl.html La máquina virtual de la asignatura ya tiene instalado OpenSSL versión 1.0.0d. Pág. 2 12/04/2016
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. Generación y verificación de sellos de tiempo. Pág. 3 12/04/2016
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. Pág. 4 12/04/2016
Los certificados X.509 tiene un estándar PKCS#7 pueden almacenarse en 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 unos delimitadores itd 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 Pág. 5 12/04/2016
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ág. 6 12/04/2016
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 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 Organization Name (eg, company) [Internet t Widgitsit Pty Ltd]:FIM Organizational Unit Name (eg, section) []:UPM Common Name (eg, YOUR name) []:ALU1_CA Email Address []:ALU1_CA@fi.upm.es 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 út opodemosos ver en formato texto to el certificado cado construido. El certificado obtenido es un certificado autofirmado en el que el emisor(emitido por) es igual que el propietario (Enviado a). Pág. 7 12/04/2016
Pág. 8 12/04/2016
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 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 Email Address []:alumno1seg@fi.upm.es 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 rellenado a la direcciónió de correo del usuario. P.e si el usuario tiene la cuenta enel correo gmail el campo de Email Address deberá ser rellenado a alumno1seg@gmail.com. Pág. 9 12/04/2016
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. Pág. 10 12/04/2016
Pág. 11 12/04/2016
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 firma. En la figura se muestra cómo generar resúmenes y el bloque cifrado con la línea de comandos OpenSSl. La firma de documentos se hace a partir de un fichero que contiene la clave privada. La verificación se hace extrayendo la clave pública del usuario de un fichero. Pág. 12 12/04/2016
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 Pág. 13 12/04/2016
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 des d -in documento_cifrado_des -out documento_original_des.txt Pág. 14 12/04/2016
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 Pág. 15 12/04/2016