Dos modelos comunes: PKI centralizada (SSL/TLS, S/MIME) ◦ Certificados ◦ Autoridades de certificación centralizadas PKI distribuida (PGP) ◦ Firmas entre usuarios ◦ Red de confianza (Web of trust) RFC 3280 define X.509 v3 Define una PKI para Internet Formato de los certificados Formato de las Listas de Revocación de Certificados (CRL) Forma de PKI centralizada más usada ◦ Usado para S/MIME, SSL/TLS, SSH... Algunos campos del certificado X.509 • • • • • • • • • • • • • Certificate Version Serial Number Algorithm ID Issuer Validity Subject Subject Public Key Info Public Key Algorithm Subject Public Key • ... Certificate Signature Algorithm Certificate Signature Versión del certificado (3) Número identificador único del cert. Algoritmos para firmar el cert. Nombre de la CA Periodo de validez del cert. Usuario (a quien pertenece la clave) Datos de la clave certificada … Algoritmos usados para firmar el crt. Firma de la CA Open SSL Herramienta que implementa SSL S/MIME Correo cifrado Cifrado de llamada a procedimiento remoto (RPC). El protocolo RPC utilizado por COM distribuido (DCOM) proporciona un nivel de autenticación (privacidad de paquete) que realiza el cifrado de todos los paquetes de datos enviados entre el cliente y el servidor. Seguridad del protocolo Internet (IPSec). IPSec ofrece una solución para la comunicación segura en el nivel de transporte y puede utilizarse para proteger los datos enviados entre dos equipos, como por ejemplo, entre un servidor de aplicaciones y un servidor de bases de datos. Open SSL es una herramienta SSL funcional. OpenSSL es una implementación de código abierto, de los protocolos SSL y TLS. Está basado sobre el extinto proyecto SSLeay, iniciado por Eric Young y Tim Hudson. Se encuentra disponible en www.openssl.org y admite diferentes plataformas. Pasos principales de la instalación(en sistemas UNIX): ◦ Descargar el paquete, descomprimirlo desde un usuario diferente de root. ◦ Ejecutar el archivo ./configure (se puede especificar de forma explicita) ◦ Ejecutar make ◦ Entrar al sistema como root. Ejecutar make install para mover los archivos al directorio correspondiente (/usr/local/ssl) ◦ Crear referencia a las bibliotecas: ln –s /usr/local/ssl/lib/libssl.a /usr/lib/ ln –s /isr/local/ssl/lib/libcrypto /usr/lib ◦ Crear la referencia a los archivos incluidos: ln –s /usr/local/ssl/include/openssl/ /usr/include ◦ Incorporar el MANPATH /usr/local/ssl/man a su archivo /etc/man.config ◦ Incorporar en la ruta de acceso (PATH) /usr/local/ssl/bin ◦ OpenSSL incluye un API para programación segura en C openssl genrsa –des3 –out ca.key 1024 ◦ En donde: genrsa indicará que se usarán parámetros RSA -des3 indica que se utilizará el algoritmo triple DES para realizar el cifrado. -out ca.key, indica que la llave se depositará en un archivo llamado ca.key El parámetro 1024 indica el tamaño que tendrá la clave privada. Al ejecutar el comando se pedirá el password que resguardará la llave privada y su confirmación Una vez que se generó la llave privada, se utilizará ésta para generar un certificado, para esto, se ejecuta el siguiente comando: #openssl req –new –x509 –days 365 –key ca.key –out ca.csr (o puede ser ca.crt) req indica que se trata de una solicitud -new que se trata de una nueva solicitud -x509 que la solicitud se generará en el estándar x509 Se ingresa el password y los datos que formarán el certificado. Enviar el archivo .csr a una CA, ésta solicita el pago y valida la identidad de la organización y proporciona el certificado por un tiempo limitado. Aunque también se pueden generar certificados firmados por “uno mismo” #openssl req –new –x509 –days 30 –in ca.csr –key ca.key –out ca.ctr csr.- Solicitud de firma del certificado crt.- Certificado temporal firmado por el propio servidor. Al instalar Apache: ◦ Después de desempaquetar el archivo de instalación (tgz) #./configure –-enable-ssl # make # make install ◦ Generar una llave privada y un certificado (diapositivas anteriores) ◦ Mover el .key y .crt al directorio: /dir_apache/conf/ssl (crearlo, ya que no existe por default) ◦ Y modificar el archivo ssl.conf indicando donde se encuentran los archivos: SSLCertificateFile SSLCertificateKeyFile ◦ Finalmente iniciar apache: #/dir_apache/bin/apachectl start Los servidores como el IIS tienen opciones para habilitar conexiones seguras por medio de la configuración. Apache + SSL sobre Windows Servidores de base de datos como DB2 u Oracle también traen opción de conexiones seguras. http://httpd.apache.org/download.cgi ◦ Unix Source: httpd-2.2.14.tar.gz ◦ Win32 Source: httpd-2.2.14-win32-src.zip ◦ Win32 Binary without crypto (no mod_ssl) (MSI Installer): apache_2.2.14-win32-x86-no_ssl.msi ◦ Win32 Binary including OpenSSL 0.9.8k (MSI Installer): apache_2.2.14-win32-x86-openssl-0.9.8k.msi C:\OpenSSL>openssl req -config openssl.cnf -new -out my-server.csr C:\OpenSSL>openssl rsa -in privkey.pem -out myserver.key C:\OpenSSL>openssl x509 -in my-server.csr -out my-server.cert -req -signkey my-server.key days 365 C:\OpenSSL>openssl x509 -in my-server.cert -out my-server.der.crt -outform DER #Listen 80 Listen 443 ….. Probar http://localhost:443 ….. LoadModule ssl_module modules/mod_ssl.so ….. <VirtualHost localhost:443> SSLEngine On SSLCertificateFile conf/ssl/my-server.cert SSLCertificateKeyFile conf/ssl/my-server.key </VirtualHost> …. Probar: https://localhost Iniciar el estado del cliente: ◦ SSL_METHOD * method; ◦ SSL_CTX *ctx; ◦ OpenSSL_add_all_algorithms(); Cargar el cifrado ◦ SSL_load_error_strings(); Cargar/registrar mansajes de error ◦ method = SSLv2_client_method(); Crear el nuevo cliente ◦ ccx = SSL_CTX_new(method); Crear el nuevo contexto El siguiente paso es crear un socket normal. Después de la conexión de los sockets entre cliente y servidor,se necesita crear una instancia SSL y asociarla a la conexión. SSL *ssl = SSL_new(ctx); ◦ Crear nuevo estado de la conexión SSL_set_fd (ssl, sd); ◦ Adjuntar el descriptor del socket “int sd = socket(PF_INET, SOCK_STREAM,0);” If (SSL_connect(ssl) == -1) //Realiza conexión ERR_print_errors_fp(stderr); Multipurpose Internet Mail Extensions RFC 2045-2049 MIME ◦ Define la estructura del cuerpo de los correos electrónicos. ◦ Permite dividir los correos en bloques múltiples. ◦ Permite incluir imágenes, audio, video... en un correo. ◦ No contempla seguridad/criptografía Secure/MIME, desarrollado por RSA Security ◦ Extiende MIME con encripción y firmas ◦ Basado en PKI centralizada ◦ Usa CAs y certificados X.509 ◦ RFC 3851 → S/MIME v3.1 ◦ Tipos MIME Application/pkcs7-mime, multipart/signed... Estándar para uso de PGP Usa red de confianza Tipos MIME ◦ Basado en PKI distribuida ◦ RFC 3156 → MIME con OpenPGP (“PGP/MIME”) ◦ Application/pgp-encrypted, application/pgpsignature ◦ Estructura MIME de un correo cifrado/firmado ◦ RFC 2440 → OpenPGP Message Format Campos binarios que componen un bloque cifrado/firmado (datos encriptados, algoritmo, hash...) Comando pgp linux IPSec puede utilizarse para proteger los datos enviados entre dos equipos, como por ejemplo, un servidor de aplicaciones y un servidor de bases de datos. IPSec es totalmente transparente para las aplicaciones al implementarse los servicios de cifrado, integridad y autenticación en el nivel de transporte. Las aplicaciones siguen comunicándose entre sí de la forma habitual mediante puertos TCP y UDP. Proporcionar confidencialidad de mensajes al cifrar todos los datos enviados entre dos equipos. Proporcionar integridad de mensajes entre dos equipos (sin cifrado de datos). Proporcionar autenticación mutua entre dos equipos (no usuarios). Por ejemplo, puede ayudar a proteger un servidor de bases de datos si establece una directiva que admite peticiones solamente de un equipo cliente específico (por ejemplo, un servidor Web o de aplicaciones). Restringir los equipos que pueden comunicarse entre sí. También puede limitar la comunicación a protocolos IP y puertos TCP/UDP específicos. IPSec puede utilizar kerberos para autenticación de los usuarios RPC es el mecanismo de transporte subyacente utilizado por DCOM. RPC ofrece un conjunto de niveles de autenticación configurables, desde ninguna autenticación (y ninguna protección de los datos) al cifrado total del estado de los parámetros. El nivel más seguro (Privacidad de paquete RPC) cifra el estado de los parámetros para cada llamada a procedimiento remoto (y, por lo tanto, todas las invocaciones de métodos DCOM). El nivel de cifrado RPC (40 bits o 128 bits) depende de la versión del sistema operativo Windows que se ejecuta en los equipos cliente y servidor. SSH es un protocolo que permite establecer una conexión segura entre un cliente y servidor a través de una red insegura como es la red IP. El protocolo SSH (Secure Shell) se desarrolló en 1995 por el finlandés Tatu Ylönen. Inicialmente se creo para sustituir a telnet, pero actualmente se le han agregado más funcionalidades. El protocolo SSH consta de dos componentes: ◦ Cliente SSH, permite conectarse al servidor de manera segura. ◦ Servidor SSH, actúa como supervisor, crea una conexión segura y un proceso por cada cliente que atiende. El objetivo de la versión 1 del protocolo (SSH1), propuesta en 1995, ofrecía una alternativa a las sesiones interactivas (shells) tales como Telnet, rsh, rlogin y rexec. Sin embargo, este protocolo tenía un punto débil que permitía a los hackers introducir datos en los flujos cifrados. Por este motivo, en 1997 se propuso la versión 2 del protocolo (SSH2) como un anteproyecto del IETF. http://www.ietf.org/html.charters/secshcharter.html. Secure Shell Versión 2 también incluye un protocolo SFTP (Secure File Transfer Protocol). Una conexión SSH se establece en varias fases: ◦ En primera instancia, se determina la identidad entre el servidor y el cliente para establecer un canal seguro (capa segura de transporte). ◦ En segunda instancia, el cliente inicia sesión en el servidor.