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