Programación en castellano
Inicio > Tutoriales > J2SE > Seguridad en la Plataforma Java 2 JDK 1.2
-Tutoriales

Seguridad en la Plataforma Java 2 JDK 1.2


Intercambiar Ficheros

Si queremos enviar electrónicamente un documento importante, como un contrato, a otra persona, es una buena idea firmarlo "digitalmente", para que el receptor tenga una forma de comprobar que el documento realmente procede de nosotros y no fue alterado durante el tránsito.

Esta lección ilustra el uso de las herramientas relacionadas con la seguridad para el intercambio de un documento importante, en este caso un contrato. Primero seremos el emisor del contrado, Stan Smith. Esta lección muestra los pasos de Stan para poner el contrato en un fichero JAR, firmarlo, y exportar el certificado de la clave pública para la clave pública correspondiente a la clave privada usada para firmar el fichero JAR.

Luego seremos Ruth, que recibe el fichero JAR firmado y el certificado. USaremos keytool para importar el certificado en nuestro keystore en una entrada con el alias stan, y la herramienta jarsigner para verificar la firma.

Para más información sobre firmas digitales, certificados, keystores y herramientas puedes volver a la página API y Herramientas Usadas para Código Seguro e Intercambio de Ficheros.

Nota: Los comandos ejecutados en esta lección asumen que los hacemos todo dentro del mismo directorio.

. Pasos del Emisor del Contrato

Los pasos desarrollados aquí para el emisor del contrato son básicamente los mismos que los listados paa el firmante de códico en la lección Firmar Código y Conceder Permisos. Sin embargo, aquí pretendemos ser Stan Smith en vez de Susan Jones y estamos almacenando un fichero de datos en vez de clases en un fichero JAR para ser firmado.

Los pasos que debemos tomar como emisores del contrato son los siguientes.

. Crear un Fichero JAR que Contenga el Contrato

Lo primero que necesitamos es un fichero del contrato. Podemos descargar y usar este fichero de ejemplo muy básico llamado contract. O usar otro que nosotros queramos, sólo deberemos asegurarnos de que se llama contract para que funcionen todos los comandos de la lección.

Ya que tenemos un fichero de contrato, podemos situarlo en un Fichero JAR. En nuestra ventana de comandos tecleamos lo siguiente.

jar cvf Contract.jar contract

Este comando crea un fichero JAR llamado Contract.jar y sitúa el fichero contract dentro de él.

. Generar Claves

Antes de firmar el fichero Contract.jar que contiene el contrato, necesitamos generar las claves, si todavía no las tenemos disponibles. La clave privada es necesaria para firmar el fichero JAR, y la correspondiente clave pública es necesaria para que el receptor del contrato pueda verificar la firma.

Esta lección asume que no tenemos dichas claves. Vamos a crear un keystore llamado stanstore y crear una entrada con una pareja de claves pública/privada recien generadas (con la clave pública en un certificado).

Ahora imaginemos que somos Stan Smith y que trabajamos en el departamente legal de la corporación XYZ. Tecleamos lo siguiente en nuesta ventana de comandos para crear un keystore llamado stanstore y para generar las claves para Stan Smith.

keytool -genkey -alias signLegal -keystore stanstore

Se nos pedirá que introduzcamos la password del keystore, nuestra información de nombre distinguido, y las password de la clave. Aquí tenemos las preguntas, la parte en negrita indica lo que tenemos que teclear.

Enter keystore password:  balloon53 
What is your first and last name?
  [Unknown]:  Stan Smith 
What is the name of your organizational unit?
  [Unknown]:  Legal 
What is the name of your organization?
  [Unknown]:  XYZ 
What is the name of your City or Locality?
  [Unknown]:  New York
What is the name of your State or Province?
  [Unknown]:  NY 
What is the two-letter country code for this unit?
  [Unknown]:  US 
Is <CN=Stan Smith, OU=Legal, O=XYZ, L=New York, 
       ST=NY, C=US> correct?
  [no]:  y 
    
Enter key password for <signLega>
        (RETURN if same as keystore password):  cat876 

El comando keytool anterior crea el keystore llamado stanstore en el mismo directorio en el que se ejecuta el comando (asumiendo que el keystore especificado no existía) y le asigna la password balloon53. El comando genera una pareja de claves pública/privada para la entidad cuyo nombre distinguido tiene el nombre común de Stan Smith y una unidad organizativa de Legal.

El certificado auto-firmado creado incluye la clave pública y la información del nombre distinguido. (El nombre distinguido que suministramos se usará en el campo "subject" en el certificado). Este certificado será válido durante 90 días, el periodo por defecto de validez si no especificamos una opción -validity. El certificado está asociado con la clave privada en una entrada del keystore referida por el alias signLegal. La clave privada tiene asignada la password car876.

. Firmar el Fichero JAR

Ahora ya estamos listos para firmar el fichero JAR.

Tecleamos lo siguiente en nuestra línea de comandos para firmar el fichero JAR Contract.jar, usando la clave privada de la entrada del keystore con el alias signLegal, y el nombre del fichero JAR resultante será sContract.jar.

jarsigner -keystore stanstore -signedjar sContract.jar 
    Contract.jar signLegal 

(Debemos teclear todo en un sóla línea.)

Se nos pedirá que introduzcamos la password del keystore (balloon53) y la password de la clave privada (cat876).

La herramienta jarsigner extrae el certificado de la entrada del keystore cuyo alias es signLegal y lo adjunta a la firma generada para el fichero JAR firmado.

. Exportar el Certificado de la Clave Pública

Ahora ya tenemos un fichero JAR firmado sContract.jar. El cliente que va usar el fichero querrá autentificar la firma. Para hacerlo, necesita la clave pública correspondiente a la clave privada usada para generar la firma. Le suministramos esta clave enviándole una copia del certificado que contiene la clave pública. Copiamos el certificado desde el keystore stanstore a un fichero llamado StanSmith.cer haciendo esto.

keytool -export -keystore stanstore -alias signLegal -file StanSmith.cer

Se nos pedirá que introduzcamos la password del keystore(balloon53).

Con el certificado y el fichero JAR firmado, un cliente puede usar la herramienta jarsigner para autentificar nuestra firma, como veremos luego.

. Pasos del Receptor del Contrato

Ahora actuaremos como Ruth, y recibiremos el fichero JAR firmado y el certificado de Stan, realizaremos los siguientes pasos, como indica la figura.

. Importar el Certificado como un Verdadero Certificado

Supongamos que somos Ruth y que hemos recibido de Stan Smith.

  • >El fichero JAR sContrat.jar, que contiene el fichero del contrato, y
  • el fichero StanSmith.cer, que contiene el certificado de clave pública para la clave pública correspondiente a la clave privada usada para firmar el fichero JAR.

Antes de poder usar la herramienta jarsigner para comprobar la autenticidad de la firma del fichero JAR, necesitamos importar en nuestro keystore el certificado de Stan.

Aunque nosotros (actuando como Stand) creamos que estos ficheros no han sido transportados a ningún lugar , podemos simular que somos una persona distinta a la que lo creó y lo envió, Stan. Actuando como Ruth, tecleando lo siguiente para crear un Keystore llamado ruthstore e importar el certificado dentro de una entrada con el alias stan.

keytool -import -alias stan -file StanSmith.cer -keystore ruthstore

Como el keystore no existe, será crado. Se nos pedirá una password para el keystore, tecleamos la password que queramos.

El keytool imprimirá la información del certificado y nos pedirá que lo verifiquemos, por ejemplo, comparando la huella dactilar del certificado mostrado con aquellas obtenidas de otra fuente de información (contrastada). (Cada huella dactilar es un número relativamente corto y único que identifica un certificado). Por ejemplo, en el mundo real podríamos llamar a Stan y preguntarle cual debería ser su huella dactilar. El puede obtener la huella del fichero StanSmith.cer que ha creado usando el comando.

keytool -printcert -file StanSmith.cer

Si las huellas dactilares corresponden, el certificado no ha sido modificado durante el tránsito. En este caso podemos permitir que keytool proceda con la inclusión de la entrada de certificado verdadero en el keystore. La entrada contiene los datos del certificado de la clave pública obtenidos del fichero StanSmith.cer y se le asigna el alias stan.

. Verificar la Firmar del Fichero JAR

Ahora que nosotros, actuando como Ruth, hemos importado el certificado de la clave pública de Stan dentro de ruthstore como un certificado verdadero, podemos usar la herramienta jarsigner para verificar la autencidad de la firma del fichero JAR.

Cuando se verifica un fichero JAR, verificamos que la firma es válida y que el fichero JAR no ha sigo modificado. Podemos hacer esto para el fichero sContract.jar mediante el siguiente comando.

jarsigner -verify -verbose -keystore ruthstore sContract.jar 

Deberiámos ver algo como esto.

       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.

Debemos asegurarnos de ejecutar el comando con la opción -verbose para obtener información suficiente para asegurar que:

  • El fichero del contrato está entre los ficheros del fichero JAR que fue firmado y que su firma fue verificada (lo que significa la s), y
  • La clave pública usada para verificar la firma esta en el keystore especificado y que lo consideramos verdadero (lo que significa la k).
 
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados