programacíon de seguridad en java sesión 8 seguridad en ... · ciencia computación e ia...

32
Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones1 Especialista en Aplicaciones y Servicios Web con Java Enterprise Programacíon de Seguridad en Java Sesión 8 Seguridad en una Aplicación Completa

Upload: others

Post on 16-Apr-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones1

Especialista en Aplicaciones y Servicios Web con Java Enterprise

Programacíon de Seguridad en Java

Sesión 8Seguridad en una Aplicación

Completa

Page 2: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones2

Banco on-lineClaves y certificadosSeguridad en la BDSeguridad en el “middleware” – BancoSeguridad en el servidor webSeguridad en el cliente

Índice

Page 3: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones3

Banco on-lineClaves y certificadosSeguridad en la BDSeguridad en el “middleware” – BancoSeguridad en el servidor webSeguridad en el cliente

Banco on-line

Page 4: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones4

Funcionalidades: Aplicación web que permita:• Aceptar tarjetas de crédito para abrir una cuenta• Que los usuarios puedan consultar exclusivamente su saldo• Que los empleados del banco puedan ver todos los datos

Interfaz web:

Banco on-line

abrir cuenta

login

Nombre:Tarjeta:Cantidad:

Saldo: XX.XXEntrada

Registro

Saldo

Page 5: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones5

Arquitectura:

Banco on-line

Red corporativa

Servidor Web Middleware

BDatosEmpleado

Internet

Cliente

Autentificación SSL del cliente

RMI + SSL

Driver JDBCSeguro y RMI + SSL

RMI + SSL

Page 6: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones6

Seguridad en la aplicación: Base de datos:• Puesto que allí se almacenarán todas las tarjetas y sus saldos

exigiremos un acceso autorizado.• Los números de tarjetas se encriptarán con una clave pública.• En el servidor web no se guardará o tendrá acceso a la clave

privada complementaria. • Los saldos no se protegen de la misma forma puesto que la

aplicación web debe ser capaz de mostrarlos. • En este caso se usa autentificación SSL para comunicación entre el

driver y el servidor JDBC, una vez que se ha procedido a autentificación por certificados para cada conexión.

• La BD solamente admitirá conexiones desde la máquina en donde se mantiene.

Banco on-line

Page 7: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones7

Seguridad en la aplicación: Middleware (banco):• Usar SSL para garantizar que todos los accesos son autorizados. • Solo se permiten conexiones desde el servidor web y realizadas por

el empleado.• Todas las conexiones “desde” y “hacia” el middleware se realizará

mediante RMI sobre SSL.

Servidor web• Hay que asegurar que ningún dato se expone sin previa

autentificación del cliente. • Se usa SSL y se requiere certificado para acceder a las cuentas.• La única forma de usurpar personalidad es robar la clave privada

de un usuario o bien obtener acceso a su máquina.

Banco on-line

Page 8: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones8

Seguridad en la aplicación: Navegador: • Gran parte de la seguridad recae en la clave privada del cliente

instalada en el navegador.• El navegador protege esta clave mediante PBE.• Para la autentificación del cliente se requiere un certificado que no

sea autofirmado.• Una alternativa es obtener un certificado digital gratuito de

Thawte o Verisign. • Usaremos el número de serie del certificado para diferenciar

cuentas de cliente.

Banco on-line

Page 9: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones9

Banco on-lineClaves y certificadosSeguridad en la BDSeguridad en el “middleware” – BancoSeguridad en el servidor webSeguridad en el cliente

Claves y certificados

Page 10: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones10

Relaciones de confianza: Navegador > Servidor web (Tomcat)Servidor web > Navegador, MiddlewareMiddleware > Servidor web, Cliente, Base de DatosCliente Empleado > MiddlewareBase de Datos (mySQL) > Middleware

Claves y certificados

Page 11: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones11

Generación de claves (Navegador): 1. Requerimiento: (keytool)

Clave para el cliente (password=“scosco”): $keytool –genkey –keyalg RSA –alias cliente(CN=“Francisco Escolano”)

Requerimiento: $keytool –certreq –alias cliente –file cliente.csr

2. Clave privada de la CA (openssl)Requiere contraseña para el acceso (password=“j2eej2ee”)

$openssl genrsa -des3 -out cakey.pem 2048

Claves y certificados

Page 12: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones12

Generación de claves (Navegador): 3. Certificado con información de la CA

$openssl req -new -x509 -key cakey.pem -out cacert.pem -days 365(CN=“J2EE”)

4. Nuestro certificado digital: $openssl x509 -req -days 365 -in cliente.csr -CA cacert.pem –CAkey

cakey.pem -CAcreateserial -out cliente.crt

Claves y certificados

Page 13: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones13

Generar y exportar el resto de certificados: Keystores de empleado, banco y BD:

$keytool –genkey -keyalg RSA –keystore clientcardKeyStore(CN=“creditcard.j2ee.ua.es”, password: “creditcard”)$keytool –genkey -keyalg RSA –keystore bankKeyStore(CN=“theBank.j2ee.ua.es”, password: “theBank”)$keytool –genkey –keyalg RSA –keystore databaseKeyStore(CN=“database.j2ee.ua.es”, password: “database”)

Exportar certificados en los que se deba confiar$keytool –export –keystore creditcardKeyStore –file creditcard.cer$keytool –export –keystore bankKeyStore –file bank.cer$keytool –export –keystore databaseKeyStore –file database.cer

Claves y certificados

Page 14: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones14

Importar certificados (truststores): Middleware (confía en BD y en empleado):

$keytool –import –keystore bankTrustStore –alias database –file database.cer

$keytool –import –keystore bankTrustStore –alias creditcard –file creditcard.cer

(password: “theBankTrust”, contestar siempre que si se confía)

Base de datos (confía en el banco):$keytool –import –keystore databaseTrustStore –alias bank –file

bank.cer (password: “databaseTrust”)

Empleado (confía en el banco):$keytool –import –keystore creditcardTrustStore –alias bank –file

bank.cer (password: “creditcardTrust”)

Claves y certificados

Page 15: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones15

Importar certificados (truststores): Servidor web:• Como debe confiar en el navegador, ha de contener en su

truststore diversos tipos de certificados, como los que se encuentran el el cacerts. Por ello:

$cp $JAVA_HOME/jre/lib/security/cacerts .$mv cacerts jakartaKeyStoreEl password es “changeit”. Poner permiso de escritura

• El servidor web confía en el banco:$keytool –import –keystore jakartaKeyStore –alias bank –file

bank.cer

Claves y certificados

Page 16: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones16

Importar certificados (truststores): Servidor web:• Crear la clave que usará el servidor web:

$keytool –genkey –keyalg RSA –keystore jakartaKeyStore(CN=“jakarta”)

• Exportar el certificado e importarlo en el truststore del banco:$keytool –export –keystore jakartaKeyStore –file jakarta.cer$keytool –import –keystore bankTrustStore –alias jakarta –file

jakarta.cer• Importar el certificado cliente.crt en el navegador• Importar el certificado cliente.crt en el almacén del servidor web:$keytool –import –keystore jakartaKeyStore –alias cliente –file

cliente.crt

Claves y certificados

Page 17: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones17

Banco on-lineClaves y certificadosSeguridad en la BDSeguridad en el “middleware” – BancoSeguridad en el servidor webSeguridad en el cliente

Seguridad en la BD

Page 18: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones18

Base de Datos: BD “projava”:• Mismos usuario y password que teníamos: “usuario” y “clave.

Driver seguro:• Fichero de configuración SecureDriver_config.xml que contiene

dos pares de usuario-password: uno para la BD y el otro para el acceso al driver seguro.

• Fichero policy: SecureDriver.policy para permitir las siguientes conexiones: a la BD, al registro RMI, recepción de RMI.

• Otros ficheros necesarios: – SecureDriver.jar– databaseKeyStore y databaseTrustStore– xerces.jar y mysql_comp.jar

Seguridad en la BD

Page 19: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones19

Base de Datos: Driver seguro (continuación):• Registro (StartRmiRegistry.bat) en otra terminal

$rmiregistry –J-classpath –JSecureDriver.jar• Ejecución (SecureDriver.bat)

$java –Djava.security.policy=SecureDriver.policy-Djava.net.ssl.trustStore=databaseTrustStore-Djava.net.ssl.keyStore=databaseKeyStore-Djava.net.ssl.keyStorePassword=database-cp SecureDriver.jar:xerces.jar:mysql_comp.jarcom.isnetworks.crypto.database.server.SecureConnectionServerMaiSecureDriver_config.xml

Seguridad en la BD

Page 20: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones20

Banco on-lineClaves y certificadosSeguridad en la BDSeguridad en el “middleware” – BancoSeguridad en el servidor webSeguridad en el cliente

Seguridad en el “middleware”-Banco

Page 21: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones21

Middleware-Banco: Funciones:• Crear una cuenta. • Consultar una cuenta. • Recuperar base de datos encriptada.

Elementos necesarios:• Interfaz remota para los clientes• Objetos de datos para almacenar items en la BD• Objeto RMI para conectar la interfaz a los objetos • Construir una forma de iniciar el middleware• Configurar el middleware

Seguridad en el “middleware”-Banco

Page 22: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones22

Middleware-Banco: Interfaz remota: en package ecommerce_example• register(), getAccount(), • getCreditCardDBO(), getAllCreditCardAccountIDs()

Objetos de datos:en ecommerce_example.data• Account: identificador de cuenta, saldo y nombre de cliente.• RegistrationInformation: nombre, número de serie del certificado,

número de tarjeta de crédito y saldo. – Este objeto es creado por un servlet cuando desde el

navegador se pide abrir una cuenta. – Se envía al middleware para crear la cuenta y cargar la

tarjeta.

Otras: CreditCard, CreditCardDBO, DatabaseOperations

Seguridad en el “middleware”-Banco

Page 23: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones23

Middleware-Banco: Implementación: en package ecommerce_example.bank• Clase BankImpl: Similar a CreditCardFactory• BankInit: Lee las propiedades y es accesible a los clientes RMI.

Configuración: • Config.properties: Información de acceso a la BD y al driver• BankInit.policy: Política de seguridad:

– Permite conexiones RMI al proxy JDBC (ponemos la IP de la máquina en donde el driver de la BD se está ejecutando)

– Permite conexión al registro RMI local.

Seguridad en el “middleware”-Banco

Page 24: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones24

Middleware-Banco: Ficheros: • SecureDriverClient.jar, Bank.jar• bankKeyStore, bankTrustStore, creditcard.cer

Ejecución: • Registro:

$rmiregistry –J-classpath –JSecureDriverClient.jar• Iniciar el banco:

BankInit.bat

Seguridad en el “middleware”-Banco

Page 25: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones25

Banco on-lineClaves y certificadosSeguridad en la BDSeguridad en el “middleware” – BancoSeguridad en el servidor webSeguridad en el cliente

Seguridad en el servidor web

Page 26: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones26

Servidor web (tomcat): Funciones:• Registro de una cuenta. • Consultar una cuenta. (no puede ver información de tarjetas!)

Elementos necesarios:• Autentificación del cliente para SSL.

– Usar el certificado del cliente firmado por una CA. – Acceso de los servlets a dicho certificiado.

• Servlets y JSPs para la capa web• Empaquetamiento *.war• Iniciar la aplicación

Seguridad en el servidor web

Page 27: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones27

Servidor web (tomcat): Servlets y JSPs:• index.html: permite registrarnos (register.html) y de ahí al

RegisterServlet, o bien dispara el BalanceServlet• Package ecommerce_example.servlet;

– AbstractEcommerceServlet (superclase de RegisterServlet y de BalanceServlet).

– RegisterServlet: Maneja usuario y password.– BalanceServlet:

» Obtiene el saldo del banco y lo pasa a un JSP (balance.jsp) que lo acaba mostrando.

» Antes obtiene el número de serie del certificado del cliente para poder obtener información del banco.

Seguridad en el servidor web

Page 28: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones28

Servidor web (tomcat): Empaquetar la aplicación web:1. Definir la política de seguridad de Tomcat2. Crear el fichero web.xml3. Jar con los servlets, *.html, ficheros de configuración -> WAR4. Copiar el WAR en la carpeta webapps.5. Borrar las aplicaciones por defecto que llegan con Tomcat y

reemplazarlas por la aplicación del banco.6. Activar SSL en Tomcat.7. Añadir ficheros como keystores y truststores.8. Editar catalina.sh para manejo de keystores.9. Editar catalina.policy para activar manejo de RMI

Seguridad en el servidor web

Page 29: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones29

Servidor web (tomcat): Política de seguridad Tomcat:• Fichero catalina.policy. Está en el directorio conf.• Lo editamos para permitir que los servlets se conecten al servidor

RMI.

Modificación de web.xml para WEB-INF:• Indicar a Tomcat la existencia de los servlets RegisterServlet y

BalanceServlet.

Construir el fichero WAR:• Colocar elementos en el directorio BankApp• Crear el JAR:

$jar cvf BankApp.war *

Seguridad en el servidor web

Page 30: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones30

Servidor web (tomcat): Borrar otras aplicaciones web:• Dejar solamente BankApp.war en $TOMCAT_HOME/webapps• Eliminar las líneas de $TOMCAT_HOME/conf/server.xml que

hacen referencia a las aplicaciones borradas. Concretamente los Context.

Modificar el fichero $TOMCAT_HOME/bin/catalina.sh• Debemos incluir el nuevo keystore y el password.

Copiar jakartaKeyStore en $TOMCAT_HOMELanzar servidor web: (tras lanzar driver y banco)• Hacemos $TOMCAT_HOME/bin/catalina.sh run –security

Acceso desde el navegador: https://localhost:8443

Seguridad en el servidor web

Page 31: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones31

Banco on-lineClaves y certificadosSeguridad en la BDSeguridad en el “middleware” – BancoSeguridad en el servidor webSeguridad en el cliente

Seguridad en el cliente

Page 32: Programacíon de Seguridad en Java Sesión 8 Seguridad en ... · Ciencia Computación e IA Seguridad de aplicaciones8 Seguridad en la aplicación: ¾Navegador: • Gran parte de la

Programación de Seguridad en Java © 2003-2004 Depto. Ciencia Computación e IA Seguridad de aplicaciones32

Servidor en el cliente Funciones:• Permite ver todas las tarjetas de la BD, y desencriptarlas con una

clave privada. • Simula al empleado del banco.

Clase: ecommerce_example.client.CreditCardClient.java• Acceso a la BD por RMI; Policy file: CreditCardClient.policy• Certificado: creditcard.cer• Keystores: creditcardKeyStore y creditcardTrustStore

$java –Djava.security.policy=CreditCardClient.policy-Djavax.net.ssl.trustStore=creditcardTrustStore-D javax.net.ssl.keyStore=creditCardKeyStore –cp CreditCardClient.jarecommerce_example.client.CreditCardClient creditcardKeyStore

Seguridad en el cliente

CreditCardClient.bat