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.
![](/cursos_descargas/security1dot2/images/stanSender.gif)
�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.
![](/cursos_descargas/security1dot2/images/ruthReceiver.gif)
�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).