programacíon de seguridad en java sesión 8 seguridad en ... · ciencia computación e ia...
Post on 16-Apr-2020
8 Views
Preview:
TRANSCRIPT
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
top related