ss_blog_claim=f608201a5759a78f27cb629c1a6d9de0

Monday, March 10, 2008

¿Cómo firmar un Java Applet?

En este artículo explicaremos como firmar un applet con un certificado propio o uno CA. Para el desarrollo se emplea las herramientas disponibles en el Kit de Desarrollo jdk1.6.0_04. Llamaremos %JPATH% al directorio donde se encuentran los ejecutables del JDK, por ejemplo "C:\Archivos de programa\Java\jdk1.6.0_04\bin".

En Netbeans he modificado una aplicación que usa librerías que implementan el protocolo IAX2 y el resultado final es un softphone desplegable en una simple página html.


Agregar la ruta de los binarios de Java a la variable de entorno PATH

Para poder trabajar con los ejecutables del JDK desde cualquier directorio agregaremos la ruta %JPATH% a la variable de entorno PATH. Seleccionamos Propiedades dentro del Menu contextual sobre Mi PC. Bajo la pestaña de Opciones avanzadas hacemos click sobre el botón Variables de entorno. Buscamos y hacemos click sobre Path entre las Variables de sistema, luego hacemos click sobre el botón Modificar y en el Valor de la variable agregamos al final un punto y coma (";") seguido de %JPATH%.


Creación de la llave

Usaremos el algoritmo RSA y el alias cg1key.

C:\>keytool -genkey -keyalg rsa -alias cg1key

Escriba la contraseña del almacén de claves: ********

¿Cuál es son su nombre y su apellido?

[Unknown]: Franco Cedillo

¿Cuál es el nombre de su unidad de organización?

[Unknown]: IT

¿Cuál es el nombre de su organización?

[Unknown]: CyberGod

¿Cuál es el nombre de su ciudad o localidad?

[Unknown]: Lima

¿Cuál es el nombre de su estado o provincia?

[Unknown]: Lima

¿Cuál es el código de país de dos letras de la unidad?

[Unknown]: PE

¿Es correcto CN=Franco Cedillo, OU=IT, O=CyberGod, L=Lima, ST=Lima, C=PE?

[no]: si



Escriba la contraseña clave para

(INTRO si es la misma contraseña que la del almacén de claves): ENTER



Exportación de la llave

C:\>keytool -export -alias cg1key -file cg1key.crt

Escriba la contraseña del almacén de claves:

Certificado almacenado en el archivo


Compilación de Applet

Basta con colocarse en el directorio build dentro de la ruta de nuestro projecto. Allí debemos ubicar las bibliotecas JAR empleadas y un archivo con el texto que requerimos en el manifiesto. El manifiesto es un archivo de texto que puede tener la siguiente estructura:

Manifest-Version: 1.0

Ant-Version: Apache Ant 1.7.0

Created-By: 10.0-b19 (Sun Microsystems Inc.)

X-COMMENT: Main-Class will be added automatically by build

Class-Path: inifile.jar jiaxc_windows_x86.jar jiaxc_windows_x86_md5.jar jiaxclient.jar libjiaxc.jar swing-layout-1.0.jar

Para este ejemplo he llamado mymanifest al archivo de texto que será agregado como manifiesto al archivo JAR que generaré. En la línea de comando ejecutamos:

...\build>jar cvfm jiaxTest.jar mymanifest -C classes .

manifest agregado

agregando: Click2Call.gif (entrada = 6574) (salida = 6537) (desinflado 0%)

agregando: IaxTestApplet.class (entrada = 3062) (salida = 1507) (desinflado 50%)

agregando: PhonePanel$1.class (entrada = 1193) (salida = 652) (desinflado 45%)

agregando: PhonePanel$2.class (entrada = 766) (salida = 471) (desinflado 38%)

agregando: PhonePanel$3.class (entrada = 698) (salida = 426) (desinflado 38%)

agregando: PhonePanel$4.class (entrada = 698) (salida = 429) (desinflado 38%)

agregando: PhonePanel$Listener.class (entrada = 4416) (salida = 1957) (desinflad
o 55%)

agregando: PhonePanel.class (entrada = 14948) (salida = 6090) (desinflado 59%)


Firma de bibliotecas JARs necesarias

...\build>jarsigner inifile.jar cg1
key

Enter Passphrase for keystore: *******



Warning:

The signer certificate will expire within six months.



...\build>jarsigner jiaxc_windows_x86.jar cg1key

Enter Passphrase for keystore: *******



Warning:

The signer certificate will expire within six months.



...\build>jarsigner jiaxc_windows_x86_md5.jar cg1key

Enter Passphrase for keystore: *******



Warning:

The signer certificate will expire within six months.



...\build>jarsigner jiaxclient.jar cg1key

Enter Passphrase for keystore: *******



Warning:

The signer certificate will expire within six months.



...\build>jarsigner libjiaxc.jar cg1key

Enter Passphrase for keystore: *******



Warning:

The signer certificate will expire within six months.



...\build>jarsigner swing-layout-1.0.jar cg1key

Enter Passphrase for keystore: *******



Warning:

The signer certificate will expire within six months.



...\build>jarsigner jiaxTest.jar cg1key

Enter Passphrase for keystore: *******



Warning:

The signer certificate will expire within six months.


Verificación de Firma o Signado

Verificaremos uno de todos los JARs que hemos signado.

...\build>jarsigner -verify -verbose -certs jiaxTest.jar



857 Fri Mar 07 13:44:46 COT 2008 META-INF/MANIFEST.MF

762 Fri Mar 07 13:44:48 COT 2008 META-INF/CG1KEY.SF

913 Fri Mar 07 13:44:48 COT 2008 META-INF/CG1KEY.RSA

0 Fri Mar 07 13:39:52 COT 2008 META-INF/

smk 6574 Wed Mar 05 17:41:44 COT 2008 Click2Call.gif



X.509, CN=Franco Cedillo, OU=IT, O=CyberGod, L=Lima, ST=Lima, C=PE (cg1key)

[certificate will expire on 5/06/08 12:54]



smk 3062 Wed Mar 05 17:41:44 COT 2008 IaxTestApplet.class



X.509, CN=Franco Cedillo, OU=IT, O=CyberGod, L=Lima, ST=Lima, C=PE (cg1key)

[certificate will expire on 5/06/08 12:54]



smk 1193 Wed Mar 05 17:41:44 COT 2008 PhonePanel$1.class



X.509, CN=Franco Cedillo, OU=IT, O=CyberGod, L=Lima, ST=Lima, C=PE (cg1key)

[certificate will expire on 5/06/08 12:54]



smk 766 Wed Mar 05 17:41:44 COT 2008 PhonePanel$2.class



X.509, CN=Franco Cedillo, OU=IT, O=CyberGod, L=Lima, ST=Lima, C=PE (cg1key)

[certificate will expire on 5/06/08 12:54]



smk 698 Wed Mar 05 17:41:44 COT 2008 PhonePanel$3.class



X.509, CN=Franco Cedillo, OU=IT, O=CyberGod, L=Lima, ST=Lima, C=PE (cg1key)

[certificate will expire on 5/06/08 12:54]



smk 698 Wed Mar 05 17:41:44 COT 2008 PhonePanel$4.class



X.509, CN=Franco Cedillo, OU=IT, O=CyberGod, L=Lima, ST=Lima, C=PE (cg1key)

[certificate will expire on 5/06/08 12:54]



smk 4416 Wed Mar 05 17:41:44 COT 2008 PhonePanel$Listener.class



X.509, CN=Franco Cedillo, OU=IT, O=CyberGod, L=Lima, ST=Lima, C=PE (cg1key)

[certificate will expire on 5/06/08 12:54]



smk 14948 Wed Mar 05 17:41:44 COT 2008 PhonePanel.class



X.509, CN=Franco Cedillo, OU=IT, O=CyberGod, L=Lima, ST=Lima, C=PE (cg1key)

[certificate will expire on 5/06/08 12:54]





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.



Warning:

This jar contains entries whose signer certificate will expire within six months.


Desplegado de Applet

Finalmente incluímos el código de llamada al Applet desde una sencilla páigna HTML.


Fuente





No comments: