Académique Documents
Professionnel Documents
Culture Documents
En este artculo 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 aplicacin que usa libreras que implementan el protocolo IAX2 y el resultado final es un softphone desplegable en una simple pgina 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 pestaa de Opciones avanzadas hacemos click sobre el botn Variables de entorno. Buscamos y hacemos click sobre Path entre lasVariables de sistema, luego hacemos click sobre el botn Modificar y en el Valor de la variable agregamos al final un punto y coma (;) seguido de %JPATH%. Creacin de la llave Usaremos el algoritmo RSA y el alias cg1key. C:\>keytool -genkey -keyalg rsa -alias cg1key Escriba la contrasea del almacn de claves: ******** Cul es son su nombre y su apellido? [Unknown]: Franco Cedillo Cul es el nombre de su unidad de organizacin? [Unknown]: IT Cul es el nombre de su organizacin? [Unknown]: CyberGod Cul es el nombre de su ciudad o localidad? [Unknown]: Lima Cul es el nombre de su estado o provincia? [Unknown]: Lima Cul es el cdigo de pas 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 contrasea clave para <cg1key> (INTRO si es la misma contrasea que la del almacn de claves): ENTER Exportacin de la llave C:\>keytool -export -alias cg1key -file cg1key.crt Escriba la contrasea del almacn de claves: Certificado almacenado en el archivo <cg1key.crt> Compilacin 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-layout1.0.jar Para este ejemplo he llamado mymanifest al archivo de texto que ser agregado como manifiesto al archivo
JAR que generar. En la lnea 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 cg1key 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. Verificacin 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 inclumos el cdigo de llamada al Applet desde una sencilla pigna HTML. Fuente Signed Applets How to sign an applet (and get it to work)
http://francocedillo.wordpress.com/2008/03/10/%C2%BFcomo-firmar-un-java-applet/
Este Applet est firmado por Fulanito de los Palotes. Pulse "Aceptar" slo si confa en Fulanito de los Palotes.
Si aceptamos, le estamos diciendo al navegador que confiamos ciegamente en Fulanito de los Palotes, as que el navegador confiar en el Applet y le dar los permisos de acceso al disco duro, a la impresora y lo dems.
package chuidiang.applet; import java.io.File; import import import import javax.swing.DefaultListModel; javax.swing.JApplet; javax.swing.JList; javax.swing.JScrollPane;
public class AppletFirmado extends JApplet { public void init() { DefaultListModel modelo = new DefaultListModel();
JList lista = new JList(modelo); JScrollPane scroll = new JScrollPane(lista); add(scroll); rellenaListaConFicheroDeDirectorioRaiz(modelo); } private void rellenaListaConFicheroDeDirectorioRaiz(DefaultListModel modelo) { File directorioRaiz = new File("/"); String [] ficheros = directorioRaiz.list(); for (int i=0;i<ficheros.length;i++) modelo.addElement(ficheros[i]); } }
Generamos un jar con nuestro applet. Puedes ver cmo se hace un jar en cmo generar un jar. Al jar podemos llamarle, por ejemplo appletfirmado.jar, aunque todava no est firmado. Creamos una pgina html de prueba para nuestro applet, despus de haber generado el jar. La pgina puede ser tan tonta como esta
<html> <head> </head> <body> <applet code="chuidiang.applet.AppletFirmado" archive="appletfirmado.jar" width=400 height=400></applet> </body> </html>
Intentamos ver la pgina con el navegador. Puesto que no est firmado, no funcionar. Si abrimos la consola de java (botn derecho del ratn sobre el applet y "abrir consola java"), veremos una excepcin de acceso denegado como esta
java.security.AccessControlException: access denied (java.io.FilePermission \ read) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkRead(Unknown Source) at java.io.File.list(Unknown Source)
Para que funcione, debemos firmar el applet. En JAVA_HOME/bin tenemos las aplicaciones keytool y jarsigner que nos permiten hacerlo. La primera, keytool, genera el certificado para el applet. La segunda, jarsigner, nos permite firmar el applet. Los pasos a seguir son:
Nos pregunta una clave para almacn de claves : Ponemos una clave que debemos recordar. Pregunta nombre y apellidos: Pongo por ejemplo "Chuidiang Roxas" Pregunta nombre del departamento de la empresa: Pues "chuidiang" mismo. Pregunta nombre de la empresa: tambin, cmo no, "chuidiang" Pregunta localidad: Alcala (sin acento por si acaso) Pregunta provincia: Madrid Pregunta cdigo del pais de dos letras: ES, de Espaa. Nos muestra lo que hemos metido y pregunta si es correcto, digo que s. Genera las claves y certificado autofirmado, adems intenta acceder a internet, me avisa el
cortafuegos y le dejo.
Pide contrasea clave y da opcin a pulsar intro si es la misma que la del almacn: Pulso intro Genera un fichero .keystore en c:\documents and settings\usuario\.keystore
Una vez que tenemos nuestro certificado, hay que firmar el jar. Para ello, arrancamos la aplcacin jarsigner
Nos pide la clave del almacen de claves, la metemos. Como el otro, pide acceso a internet, avisa el cortafuegos, le doy permiso.
Al hacer esto intenta renombrar el appletfirmado.jar. Yo me he encontrado el problema de que si tengo firefox abierto e intent ver el applet, no me deja renombrar el appletfirmado.jar, a pesar de que firefox ya no estaba visualizando el applet. Para que todo me fuera bien, tuve que cerrar firefox. Una vez hecho esto, podemos ver la pgina con el navegador. El navegador mostrar un aviso diciendo que el certificado no ha podido ser comprobado y que si queremos ejecutar. El aviso del navegador es normal, puesto que el applet nos lo hemos firmado nosotros mismos y no somos una entidad reconocida para generar certificados dititales. Por ello, el navegador nos advierte que el applet est firmado, pero no por una autoridad adecuada. Si aceptamos el certificado, el applet funcionar correctamente y mostrar el listado de ficheros.
http://chuwiki.chuidiang.org/index.php?title=Firmar_Applets
Creando el jar desde netbeans Cuando creamos un proyecto netbeans, es muy comn generar el ejecutable jar desde ac mismo. Para generar un jar de una aplicacin sencilla solo le das: clic derecho sobre el proyecto -> Clean and Build La anterio opcin crea un directorio llamado dist en la caperta raz de tu proyecto. Quedando de la siguiente manera: /proyecto/dist /proyecto/src/ /proyecto/nbproject /proyecto/build Dentro del carpeta dist se encuentra el archivo jar del proyecto. Hasta ac no debera haber ningn problema con el jar ya generado. Mi proyecto necesita libreras para funcionar, cmo hago que funcione mi jar con estas libreras? Tienes un proyecto creado desde netbeans, en tu proyecto tienes agregado el conector de MySQL para conectar tu aplicacin con una base de datos de MySQL, has agregado la librera o conector haciendo clic derecho sobre libraries -> add libraries . Dentro de la carpeta delibraries de netbeans puedes ver que se agreg la librera exitosamente. Luego creo mi jar, lo ejecuto y no funciona!
Una razn por la cual sucede esto es porque de alguna forma, netbeans asigna los path de diferente forma a como los confirguro el proyecto. An as, mucha gente desconoce que netbeans en estos casos crea una estructura para evitar estos problemas Ya agregadas las libreras que vayas a ocupar en el proyecto vuelves a generar el jar, pero esta vez se va a crear una carpeta nueva, quedando la siguiente estructura: /proyecto/dist/ /proyecto/dist/lib/ Dentro de la carpeta dist se encuentra el jar recin generadoy dentro de la carpeta lib se encuentran todas las libreras que has agregado a tu proyecto. Es importante para el buen funcionamiento del jar que tambien muevas esta carpeta donde quieras poner el jar, por ejemplo, si mueves el jar otra pc hayq eu recordar que la estructura debe de quedar asi: /mi-archivo-jar.jar /lib/conectoX.jar /lib/conectorY.jar /lib/conectorZ.jar Nota: para ejecutar un jar desde consola se realiza de la siguiente manera: java -jar mi-archivo-jar.jar
http://www.apuntes.delibertad.com/netbeans/ejecutar-jar-creado-desde-netbeans/
Contenido
[ocultar]
1 Hacer el cdigo de nuestro Applet 2 Hacer la pgina de nuestro Applet 3 Situacin de la pgina html y del .class 4 El Applet y los jar 5 Restricciones en los Applet 6 Acceso a recursos 7 AppletViewer
package com.chuidiang.ejemplos.applet; import javax.swing.JApplet; import javax.swing.JLabel; /** * Ejemplo sencillo de applet * @author Chuidiang
* */ public class EjemploApplet extends JApplet { /** * Pone un JLabel con el texto "Applet hola mundo" en el JApplet, de * forma que es lo que se visualizar en el navegador. */ public void init() { JLabel etiqueta = new JLabel("Applet hola mundo"); add(etiqueta); } }
<html> <head> <title>Ejemplo de Applet</title> </head> <body> <applet code="com.chuidiang.ejemplos.applet.EjemploApplet" width="500" height="200"> Debes tener instalado java </applet> </body> </html>
+-- ejemplo-applet.html +-- com +-- chuidiang +--- ejemplos +---- applet +---- EjemploApplet.class
es decir, el directorio com en paralelo con el fichero ejemplo-applet.html y debajo de com toda la estructura chuidiang/ejemplos/applet/EjemploApplet.class En el tag <applet> de la pgina html hemos puesto en el atributo code el nombre de nuestra clase, con todos sus package delante. Listo. Visualizando en el navegador la pgina ejemplo-applet.html, deberamos ver el applet funcionando.
Eso s, todos estos jar deben estar subidos junto a nuestra pgina html.
Si quieres que un Applet pueda hacer ms cosas, hay que firmarlo digitalmente. Al hacer esto, cuando se visualize el Applet en el navegador, este sacar un aviso al usuario, indicando que el Applet est firmado digitalmente por tal persona o entidad, y le pregunta al usuario si confa en dicha persona o entidad. Si el usuario dice que confa, el Applet tendr entonces los permisos para hacer lo que necesite. Si el usuario no confa, el Applet sigue igual de restringido que antes.
Acceso a recursos
Como hemos comentado, el Applet slo puede acceder a recursos que estn en el servidor web donde est alojado. Sin embargo, tampoco puede acceder a esos ficheros, iconos o lo que sea como si fueran ficheros normales, puesto que el disco duro del servidor no est directamente accesible. Cualquier acceso del Applet debe hacerse a travs del servidor web, usando el protocolo http. Para facilitar este acceso, la clase JApplet tiene mtodos que nos facilitan estos accesos al servidor web a travs de http. Algunos de estos mtodos son play() y getAudioClip() para acceso a ficheros de sonido, getImage() para acceso a imgenes, etc. Al ser a travs de servidor web, NO podemos escribir en el servidor. As que no podemos abrir un fichero del servidor y escribir en l. En cuanto a conexiones a base de datos, podemos acceder a una base de datos que est alojada en el mismo servidor web que nuestro Applet, pero NO podemos abrir conexiones con ningn otro sitio.
AppletViewer
Java viene con una aplicacin llamada appletviewer ubicada en el directorio bin de donde tenemos instalado java. Esta aplicacin sirve para arrancar y ver la pgina html del applet sin necesidad de abrir el navegador. Nos sirve como herramienta de pruebas mientras estamos desarrollando nuestro Applet.
appletviewer ejemplo-applet.html
http://chuwiki.chuidiang.org/index.php?title=Ejemplo_sencillo_de_Applet