Download Prácticas DYA - PoliformaT

Document related concepts
no text concepts found
Transcript
PRÁCTICA 9
E
Seguridad
sta práctica consta de dos partes.
La primera parte consiste en la creación y ejecución de un applet firmado.
La segunda parte consiste en la utilización del protocolo Secure Sockets Layer SSL en la
web (protocolo https) mediante la técnica de tunneling.
9.1.- Applets firmado
El objetivo de esta parte de la práctica es resolver los problemas de seguridad para
ejecución de applets, los cuales requieren permisos más amplios que los permisos por
defecto de la plataforma Java.
En particular la práctica pretende eliminar los problemas de seguridad surgidos con
la ejecución en web del cliente del applet de echo mediante la firma del applet con un certificado de seguridad.
DYA
105
Applets firmado
9.1.1.- El entorno de trabajo
Esta práctica no se realizará con el entorno Eclipse sino con la herramientas keytool y jarsigner del JDK. Para ello habrá que abrrir un intérprete de comandos en el que habrá que establecer
la variable PATH adecuadamente:
SET PATH= Directorio de Java/bin
Se partirá de un fichero JAR con el applet realizado en la práctica de introducción a los
applets. Denominaremos este fichero prj-applet.jar y a su correspondiente página HTML
EchoApplet.html. Si no dispone de estos ficheros realizados en la práctica anterior, puede utilizar
los del fichero zip de apoyo a esta práctica.
Para la utilización de applets firmados se restablecerá la política de defecto de la plataforma
Java. Para ello, borre el ficheros .java.policy del directorio $HOME (C:\Documents and Settings\usuario
en Windows) realizado en la práctica de applets, en el que se concedía todo tipo de
permisos a todas las aplicacione java.
9.1.2.- Creación de un JAR firmado
Los pasos a seguir para firmar el applet son:
1.
Generar un almacén de firmas, denominado jvstore, con una entrada denominada firma1 que
será la que servirá para firmar el fichero JAR. Se solicitarán dos claves: una para el almacén de
firmas y la otra como clave secreta de la firma. Pueden ser ambas la misma. También se solicitarán los datos personales del firmante.
keytool -genkey -alias firma1 -keystore jvstore
2.
Firmar el fichero JAR. El fichero resultante se denominará sprj-applet.jar.
jarsigner -keystore jvstore -signedjar sprj-applet.jar prj-applet.jar firma1
3.
4.
Crear una página HTML, denominada SEchoApplet.html, para referenciar el fichero sprjapplet.jar.
Extraer el certificado del almacén de firmas (exportar) y depositarlo en un fichero .cer. Este certifcado contiene la clave publica del emisor de la firma.
keytool -export -keystore jvstore -alias firma1 -file JoanVila.cer
9.1.3.- Verificación de un JAR firmado
Puede verificar un fichero JAR firmado. Esta labor normalmente la realiza el que recibe un
fichero JAR firmado y consta de los siguientes pasos:
1.
Observar los datos del certificado. En Windows simplemente hay que pincharlo. En cualquier
caso simpre se puede utilizar
106
Seguridad
El protocolo SSL y la técnica de tunneling
keytool -printcert -file JoanVila.cer
2.
Importar el certificado y guardarlo en un almacen denominado receptorstore como una entrad
con nombre unafirma:
keytool -import -alias unafirma -file JoanVila.cer -keystore receptorstore
3.
Verificar la firma del JAR:
jarsigner -verify -verbose -keystore receptorstore sprj-seguridad.jar
9.1.4.- Ejecución del applet firmado
Para la ejecución del applet firmado deberá ubicarlo en un directorio atendido por un servidor web según se explica en el apartado 6.3.3.- (pág. 77). Posteriormente deberá accederlo mediante
su URL correspondiente.
Con un applet firmado no deberían aparecer ya problemas de seguridad con el applet firmado. En
cualquier caso, si tiene problemas en la invocación RMI, revise los ficheros java.security y
java.policy.
En el directorio doc del fichero zip de apoyo a esta práctica encontrará información detallada de
como configurar estos ficheros. también puede utilizar la herramienta policytool.
9.2.- El protocolo SSL y la técnica de tunneling
El entorno de trabajo en esta práctica son la herramientas stunnel y openssl disponibles en
las distribuciones habituales de Linux. No obstante también existen versiones para Windows.
En principio, los programas que deseen utilizar SSL deberían modificar su código para utilizar las
funciones de la biblioteca SSL. Para evitarlo se propuso realizar esto mediante tunneling (figura 6
(pág. 108)). Esto permite añadir la capa SSL utilizando un proceso externo que haga de proxy (wrapper) entre la red y un servidor no seguro. Suforma de operar es similar al portforwarding de SSH..,
La utilidad stunnel fué diseñada para ofrecer la seguridad SSL a servidores (demonios) o clientes
que no han sido programados con soporte SSL. Puede actuar en la parte del cliente o en la parte del
servidor.
DYA
107
El protocolo SSL y la técnica de tunneling
FIGURA 6.
Técnica de tunneling
9.2.1.- stunnel como cliente
Al igual que con socket podemos conectarnos a cualquier puerto de cualquier ordenador conectado
a internet:
$socket www.upv.es 80
GET / HTTP/1.0
Nos retorna la página principal de la UPV.
Con la siguiente orden se consigue el mismo resultado, pero utilizando una conexión segura.
$ /usr/sbin/stunnel conf-cli
$ GET / HTTP/1.0
El fichero conf-cli debe ser configurado del siguiente modo:
client = yes
connect = www.upv.es:443
# el puerto estandar de http seguro es el 443 (ver /etc/services).
9.2.2.- stunnel como servidor
La siguiente orden deja en ejecución en segundo plano (background) un servidor stunnel
proporcionando tunneling al port 9500 y utilizando para encriptar el certificado del fichero server.pem. En este port se propocionará la salida de la orden $ ls -l.
$ stunnel conf-ser2
El fichero conf-ser2 debe ser configurado del siguiente modo:
cert = /home/usuarios/jvila/ssl/server.pem
#key = /home/usuarios/jvila/ssl/server.pem
#debug = 1
foreground = yes
pid =
#outfile = /tmp/error
#local = futura.disca.upv.es
108
Seguridad
El protocolo SSL y la técnica de tunneling
[lsd]
accept = 9500
exec = /bin/ls
execargs = ls -l
pty = yes
Una cuestión importante es que la clave privada a partir de la cual se crea el certificado server.pem
no debe estar protegida con password para que el servidor (web) pueda hacer uso de ella para
encriptar la información:
• El fichero con el certificado deben contener primero la clave privada (sin password), seguido del
certificado.
• Tras la clave privada y el certificado debe aparecer una línea en blanco.
• Por tanto, al fichero creado por la orden:
$ openssl req new x509 nodes keyout server.pem out server.pem
se le ha de han de añadir un retorno de carro después de la clave privada y otro al final (después
del certificado).
otra cuestión interesante puede ser la conversión de certificados creados en el entorno Java a certificados pem. Los certificados de Java son DER codificados en X.509 y no en ASN.1. Esta conversión
puede realizarse con:
$ openssl x509 -inform DER -outform PEM -in JoanVila.cer -out JoanVila.pem
DYA
109
El protocolo SSL y la técnica de tunneling
110
Seguridad