Download Seguridad en Java - PoliformaT
Document related concepts
no text concepts found
Transcript
Diseño Y Aplicaciones de Sistemas Distribuidos Seguridad en Java Joan Vila DISCA / UPV Departament d’Informàtica de Sistemes i Computadors Universitat Politècnica de València Seguridad en Java Modelo de seguridad de la plataforma JDK 1.0 Procesamiento distribuido en Java © Joan Vila 131 Seguridad en Java Modelo de seguridad de la plataforma JDK 1.1 Procesamiento distribuido en Java © Joan Vila 132 Seguridad en Java Modelo de seguridad de la plataforma JDK 1.2 Procesamiento distribuido en Java © Joan Vila 133 Seguridad en Java Modelo de seguridad de la plataforma JDK 1.2 – Todo el código (independientemente de si es local o remoto) está sujeto a una política de seguridad. – Una política de seguridad define un conjunto de permisos diponibles para código según sea: Su URL de origen Su firma – El soporte de ejecución organiza el código en dominios cada uno de los cuales agrupa una serie de clases cuyas instancias son concedidas dichos permisos. – Los permisos por defecto son equivalentes a los de la plataforma 1.1 y se definen en el fichero: ... /jre/lib/security/java.policy Procesamiento distribuido en Java © Joan Vila 134 Seguridad en Java Modelo de seguridad de la plataforma JDK 1.2 – Se pueden añadir nuevas políticas de seguridad: Mediante parámetros para la máquina virtual: $ java -Djava.security.policy=C:/ajava.policy Mediante una nueva entrada en /jre/lib/security/java.security policy.url.1=file:${java.home}/lib/security/java.policy policy.url.2=file:${user.home}/.java.policy policy.url.3=file:C:/ajava.policy – Ejemplo de fichero java.policy con permisos de seguridad: grant codeBase jar:http://www.xxx.yyy/jarfile.jar!/ { permission java.net.SocketPermission “localhost:1024-65535", "connect,accept"; permission java.io.FilePermission "d:\\java\\codebase\\-", "read"; }; Procesamiento distribuido en Java © Joan Vila 135 Seguridad en Java Clases Java para seguridad – java.lang.SecurityManager: permite desarrollar implementan una determinada política de seguridad. – java.security: aplicaciones que Define clases relacionadas con permisos y políticas Proporciona soporte para firmas digitales, incluyendo implementaciones de: – Algoritmos de resumen MD5 (RFC1321) y SHA-1 – Certificados en diversos formatos. En particular soporta certificados X.509 – Factoría de certificados: utilizada para generar certificados y listas de revocación de certificados. Extensiones Java para seguridad – El JCE (Java Criptography Extensions) amplía el JDK con clases para algoritmos de cifrado, intercambio de claves y autentificación de mensajes. KeyStore: proporciona interfaces bien definidas para acceder la información de un “almacén de firmas”. Interfaces a especificación de claves, .... Procesamiento distribuido en Java © Joan Vila 136 Seguridad en Java Aplicaciones Java para seguridad Son herramientas escritas en Java para controlar la seguridad. – policytool: permite crear y modificar los ficheros que definen las políticas de una determinada aplicación. – keytool: permite crear pares de claves públicas y privadas, importar y visualizar cadenas de certificados, exportar certificados, generar certificados autofirmados X.509v1, generar peticiones para ser enviadas a autoridades de certificación. – jarsigner: permite firmar ficheros JAR y verificar la autenticidad de la firma. Procesamiento distribuido en Java © Joan Vila 137 Aplicaciones Java para seguridad Herramienta policytool Procesamiento distribuido en Java © Joan Vila 138 Aplicaciones Java para seguridad Herramienta policytool Procesamiento distribuido en Java © Joan Vila 139 Aplicaciones Java para seguridad Herramienta policytool Procesamiento distribuido en Java © Joan Vila 140 Ficheros JAR Características archivos JAR Los archivos JAR permiten empaquetar en un único fichero las aplicaciones Java: ficheros .class y recursos auxiliares. Se utiliza típicamente para applets. – Seguridad: se pueden firmar digitalmente. Los receptores puede otorgar privilegios de ejecución si reconocen la firma. – Compresión: permite ahorrar espacio. – Mejora tiempo de descarga: sólo requieren una interacción HTTP. – Empaquetamiento de extensiones: las extensiones son una forma de ampliar la funcionalidad de la plataforma Java. Por ej. Java-3D, Java-Mail – Sellado de paquetes: se obliga a las aplicaciones a utilizar las clases definidas en el paquete (asegurar consistencia de versiones). – Meta-información: incorporan un fichero de manifiesto en el que, ademas de la información sobre ficheros contenidos, figura información sobre vendedor, versión, etc. – Portabilidad: el mecanismo JAR es estándar de la plataforma Java. Procesamiento distribuido en Java © Joan Vila 141 Ficheros JAR Manejo de ficheros JAR To create a JAR file jar cf jar-file input-file(s) To view the contents of a JAR file jar tf jar-file To extract the contents of a JAR file jar xf jar-file To extract specific files from a JAR file jar xf jar-file archived-file(s) To run an application packaged as a JAR file (version 1.1) jre -cp app.jar MainClass To run an application packaged as a JAR file (version 1.2 -- requires manifest header) java -jar app.jar To invoke an applet packaged as a JAR file Procesamiento distribuido en Java <applet code=AppletClassName.class archive="JarFileName.jar" width=width height=height> </applet> © Joan Vila 142 Intercambio de JAR firmados Pasos a seguir por el que genera el JAR Procesamiento distribuido en Java © Joan Vila 143 Intercambio de JAR firmados Pasos a seguir por el que genera el JAR – 1.- Crear un fichero JAR que contenga un contrato con jar jar cvf Contract.jar contract – Contract es un fichero ASCII con los términos del contrato “legal”. – 2.- Generar las claves con keytool keytool –genkey –alias signLegal –keystore stanstore – Pregunta la id. del firmante, la clave privada y un passwd para el almacen de claves – Genera un certificado “signLegal” autofirmado con la identidad y un par de claves pública/privada – Almacena almacén de claves “stanstore” con un passwd – 3.- Firmar el fichero jar con jarsigner jarsigner –keystore stanstore –signedjar sContract.jar Contract.jar signLegal – 4.- Exportar el certificado con la clave pública con keytool keytool -export -keystore stanstore -alias signLegal -file StanSmith.cer – Genera (desde stanstore)un certificado con la clave pública para enviárlo al receptor 144 Procesamiento distribuido en Java © Joan Vila Intercambio de JAR firmados Opciones de jarsigner -keystore url Specifies a keystore to be used if you don't want to use the.keystore default database. -storepass password Allows you to enter the keystore's password on the command line rather than be prompted for it. -keypass password Allows you to enter your alias's password on the command line rather than be prompted for it. -sigfile file Specifies the base name for the .SF and .DSA files if you don't want the base name to be taken from your alias. file must be composed only of upper case letters (A-Z), numerals (0-9), hyphen (-), and underscore (_). -signedjar file Specifies the name of the signed JAR file to be generated if you don't want the original unsigned file to be overwritten with the signed file. Procesamiento distribuido en Java © Joan Vila 145 Intercambio de JAR firmados Formato de un JAR firmado Cuando se genera un JAR firmado: – Cada fichero del archivo se le da una entrada “resumen” (digest) en el fichero de manifiesto: META-INF/MANIFEST.MF – Name: test/classes/ClassOne.class – SHA1-Digest: TD1GZt8G11dXY2p4olSZPc5Rj64= – Se genera un fichero de firma: META-INF/fichero.SF – Signature-Version: 1.0 – SHA1-Digest-Manifest: h1yS+K9T7DyHtZrtI+LxvgqaMYM= – Created-By: SignatureFile JDK 1.2 – Name: test/classes/ClassOne.class – SHA1-Digest: fcav7ShIG6i86xPepmitOVo4vWY= – Name: test/classes/ClassTwo.class – SHA1-Digest: xrQem9snnPhLySDiZyclMlsFdtM= – Adicionalmente, se genera un fichero de “bloque de firma” con la firma digital del JAR creada con la clave privada y el certificado con la clave pública. Procesamiento distribuido en Java © Joan Vila 146 Intercambio de JAR firmados Pasos a seguir por el que recibe el JAR Procesamiento distribuido en Java © Joan Vila 147 Intercambio de JAR firmados Pasos a seguir por el que recibe el JAR – 1.- Importar el certificado y declararlo confiable utilizando keytool keytool -import -alias stan -file StanSmith.cer -keystore ruthstore keytool -printcert -file StanSmith.cer – 2.- Verificar la firma del JAR utilizando jarsigner jarsigner -verify -verbose -keystore ruthstore sContract.jar 183 Fri Jul 31 10:49:54 PDT 1998 META-INF/SIGNLEGAL.SF 1542 Fri Jul 31 10:49:54 PDT 1998 META-INF/SIGNLEGAL.DSA 0 Fri Jul 31 10:49:18 PDT 1998 META-INF/ smk 1147 Wed Jul 29 16:06:12 PDT 1998 contract s = signature was verified m = entry is listed in manifest k = at least one certificate was found in keystore i = at least one certificate was found in identity scope jar verified. Procesamiento distribuido en Java © Joan Vila 148