viernes, 28 de septiembre de 2007

Configurar SSL para Tomcat en Linux

Hola, muchas veces cuando trabajamos desarrollando aplicaciones Web o administrando servidores Web como Apache, Tomcat, etc.. necesitamos por requerimiento de nuestros clientes una conexión segura con certificados de seguridad (https), existen alternativas comerciales, es decir propietarias, que son pagadas y otras Open Source como openSSL. en este articulo explicare la configuración del Open Source de SSL para tomcat 5.5.20 en Linux (en windows debiera ser lo mismo, aunque en su entorno).

1.- Como prerequisito debemos tener instalado Tomcat como servidor en nuestra maquina y configurado su classpath y variables de entorno,
Es importante tener esta configuracion o variables de entorno declaradas para seguir adelante. Tomcat lo bajas de http://tomcat.apache.org/ y JSSE de http://java.sun.com/products/jsse/
una vez que bajas jsse lo descomprimes en un directorio y configuras su classpath como variable de entorno, tambien debes copiar los jar que estan en la carpeta lib del jsse (jcert.jar, jnet.jar, y jsse.jar) a tu $JAVA_HOME/jre/lib/ext , directorio donde tienes Java.

en mi caso tengo Linux Debian, tipeo el siguiente comando en la consola con gksudo para edición y para ver y editar mi ennvironment:

slackware:/# gksudo gedit /etc/environment

se abre un editor de texto con el siguiente contenido:

LANG="es_CL.UTF-8"

JAVA_HOME=/usr/lib/jvm/java-6-sun

JSSE_HOME=/home/slack/programas/jsse1.0.3_04

CATALINA_HOME=/home/slack/programas/apache-tomcat-5.5.20

TOMCAT_HOME=/home/slack/programas/apache-tomcat-5.5.20

MAVEN_HOME=/home/slack/desarrollo/atlassian-jira/maven-1.0.2

#PATH=$PATH:$MAVEN_HOME/bin

export JAVA_HOME JSSE_HOME CATALINA_HOME TOMCAT_HOME MAVEN_HOME

Vemos que tengo seteado aqui mi CATALINA_HOME que apunta al directorio donde tengo instalado tomcat, lo mismo para TOMCAT_HOME, tambien tienes que tener el JAVA_HOME y el JSSE_HOME, que contiene los jar de seguridad que necesita la jdk en mi caso la 6 de sun microsystems.

Si todo esta ok, debes crear el certificado de la key con el siguiente comando en la consola:

slackware:/#$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA

Cuando te solicite una clave debes ingresar por default "changeit" y los demas datos que te solicite la configuración.

Luego debes descomentar la configuracion del archivo de tomcat para que reconozca https y SSL, este archivo es server.xml
del directorio conf de tomcat para esto abrimos el fichero server.xml desde la consola:

slackware:/home/slack/programas/apache-tomcat-5.5.20# gksudo gedit conf/server.xml

(en windows editamos este mismo fichero con el bloc de notas)

Esta es la definición que necesitamos descomentar:

//
//

Al descomentar este tag, el servidor automaticamente reconoce el tipo de configuración de su protocolos web.
Luego editamos $JAVA_HOME/jre/lib/security/java.security Añadimos security.provider.2=com.sun.net.ssl.internal.ssl.Provider
donde estan estas definiciones, es el acomienzo del archivo.

en las ultimas versiones de java esta linea ya existe.

Ahora procedemos a importar el certificado con OpenSSL. con la siguiente linea de comandos generamos el certificado con openSSL:

slackware:/usr/lib/jvm/java-6-sun-1.6.0.02/jre/lib/security# openssl req -new -out REQ.pem -keyout KEY.pem
Generating a 1024 bit RSA private key
.......++++++
.............++++++
writing new private key to 'KEY.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Nos solicitara nuevamente unos datos que debemos ingresar, como nombre, empresa, etc...

seguidamente verificamos esta informacion:

slackware:/usr/lib/jvm/java-6-sun-1.6.0.02/jre/lib/security# openssl req -x509 -in REQ.pem -key KEY.pem -out CERT.pem
Enter pass phrase for KEY.pem:
slackware:/usr/lib/jvm/java-6-sun-1.6.0.02/jre/lib/security# openssl req -verify -in REQ.pem
verify OK
-----BEGIN CERTIFICATE REQUEST-----
MIICADCCAWkCAQAwgZAxCzAJBgNVBAYTAmNsMREwDwYDVQQIEwhzYW50aWFnbzER
MA8GA1UEBxMIc2FudGlhZ28xDjAMBgNVBAoTBWNkbXNhMQwwCgYDVQQLEwNjZG0x
FjAUBgNVBAMTDWpvcmdlIHNhbG9tb24xJTAjBgkqhkiG9w0BCQEWFmxpbnNsYWNr
d2FyZUBnbWFpbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMeBzkd5
p4eV+fuoJv08UyXHW2pRm7U+Q1Na//6uNskASKGrvuo6gostuDBAq3UmF6trYfSI
+OXqoaJo1ZQpQC+Buaf4pqlNb2OuJbEqZ2pMMscTudn97rmC7dSYinQvUK7QpGjY
6Z3lGlyskpG9nln7KWlUNotDsZk99j8LBZwHAgMBAAGgLzAUBgkqhkiG9w0BCQIx
BxMFY2Rtc2EwFwYJKoZIhvcNAQkHMQoTCGNoYW5nZWl0MA0GCSqGSIb3DQEBBQUA
A4GBADwZJ5iKIngYxZJ4uij66AsBt3578pN6U284Va7ioevaa+008BdW0CSYKOgf
2xCiBmD3GQYvP1pplAlFBqeNhMMVGXCMbm9omwYycT6tgW/47aEXZITf/agaf2zJ
7dj3cJkXbXyJ5OEkDQ654wQV9rqFy7Udsj0b/rSt8NYwutwH
-----END CERTIFICATE REQUEST-----
slackware:/usr/lib/jvm/java-6-sun-1.6.0.02/jre/lib/security# openssl req -verify -in REQ.pem -key KEY.pem
Enter pass phrase for KEY.pem:
verify OK
-----BEGIN CERTIFICATE REQUEST-----
MIICADCCAWkCAQAwgZAxCzAJBgNVBAYTAmNsMREwDwYDVQQIEwhzYW50aWFnbzER
MA8GA1UEBxMIc2FudGlhZ28xDjAMBgNVBAoTBWNkbXNhMQwwCgYDVQQLEwNjZG0x
FjAUBgNVBAMTDWpvcmdlIHNhbG9tb24xJTAjBgkqhkiG9w0BCQEWFmxpbnNsYWNr
d2FyZUBnbWFpbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMeBzkd5
p4eV+fuoJv08UyXHW2pRm7U+Q1Na//6uNskASKGrvuo6gostuDBAq3UmF6trYfSI
+OXqoaJo1ZQpQC+Buaf4pqlNb2OuJbEqZ2pMMscTudn97rmC7dSYinQvUK7QpGjY
6Z3lGlyskpG9nln7KWlUNotDsZk99j8LBZwHAgMBAAGgLzAUBgkqhkiG9w0BCQIx
BxMFY2Rtc2EwFwYJKoZIhvcNAQkHMQoTCGNoYW5nZWl0MA0GCSqGSIb3DQEBBQUA
A4GBADwZJ5iKIngYxZJ4uij66AsBt3578pN6U284Va7ioevaa+008BdW0CSYKOgf
2xCiBmD3GQYvP1pplAlFBqeNhMMVGXCMbm9omwYycT6tgW/47aEXZITf/agaf2zJ
7dj3cJkXbXyJ5OEkDQ654wQV9rqFy7Udsj0b/rSt8NYwutwH
-----END CERTIFICATE REQUEST-----

Verificamos que la firma es correcta sobre una petición de certificado:

slackware:/usr/lib/jvm/java-6-sun-1.6.0.02/jre/lib/security# openssl req -text -in REQ.pem
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=cl, ST=santiago, L=santiago, O=cdmsa, OU=cdm, CN=jorge salomon/emailAddress=linslackware@gmail.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:c7:81:ce:47:79:a7:87:95:f9:fb:a8:26:fd:3c:
53:25:c7:5b:6a:51:9b:b5:3e:43:53:5a:ff:fe:ae:
36:c9:00:48:a1:ab:be:ea:3a:82:8b:2d:b8:30:40:
ab:75:26:17:ab:6b:61:f4:88:f8:e5:ea:a1:a2:68:
d5:94:29:40:2f:81:b9:a7:f8:a6:a9:4d:6f:63:ae:
25:b1:2a:67:6a:4c:32:c7:13:b9:d9:fd:ee:b9:82:
ed:d4:98:8a:74:2f:50:ae:d0:a4:68:d8:e9:9d:e5:
1a:5c:ac:92:91:bd:9e:59:fb:29:69:54:36:8b:43:
b1:99:3d:f6:3f:0b:05:9c:07
Exponent: 65537 (0x10001)
Attributes:
unstructuredName :cdmsa
challengePassword :changeit
Signature Algorithm: sha1WithRSAEncryption
3c:19:27:98:8a:22:78:18:c5:92:78:ba:28:fa:e8:0b:01:b7:
7e:7b:f2:93:7a:53:6f:38:55:ae:e2:a1:eb:da:6b:ed:34:f0:
17:56:d0:24:98:28:e8:1f:db:10:a2:06:60:f7:19:06:2f:3f:
5a:69:94:09:45:06:a7:8d:84:c3:15:19:70:8c:6e:6f:68:9b:
06:32:71:3e:ad:81:6f:f8:ed:a1:17:64:84:df:fd:a8:1a:7f:
6c:c9:ed:d8:f7:70:99:17:6d:7c:89:e4:e1:24:0d:0e:b9:e3:
04:15:f6:ba:85:cb:b5:1d:b2:3d:1b:fe:b4:ad:f0:d6:30:ba:
dc:07
-----BEGIN CERTIFICATE REQUEST-----
MIICADCCAWkCAQAwgZAxCzAJBgNVBAYTAmNsMREwDwYDVQQIEwhzYW50aWFnbzER
MA8GA1UEBxMIc2FudGlhZ28xDjAMBgNVBAoTBWNkbXNhMQwwCgYDVQQLEwNjZG0x
FjAUBgNVBAMTDWpvcmdlIHNhbG9tb24xJTAjBgkqhkiG9w0BCQEWFmxpbnNsYWNr
d2FyZUBnbWFpbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMeBzkd5
p4eV+fuoJv08UyXHW2pRm7U+Q1Na//6uNskASKGrvuo6gostuDBAq3UmF6trYfSI
+OXqoaJo1ZQpQC+Buaf4pqlNb2OuJbEqZ2pMMscTudn97rmC7dSYinQvUK7QpGjY
6Z3lGlyskpG9nln7KWlUNotDsZk99j8LBZwHAgMBAAGgLzAUBgkqhkiG9w0BCQIx
BxMFY2Rtc2EwFwYJKoZIhvcNAQkHMQoTCGNoYW5nZWl0MA0GCSqGSIb3DQEBBQUA
A4GBADwZJ5iKIngYxZJ4uij66AsBt3578pN6U284Va7ioevaa+008BdW0CSYKOgf
2xCiBmD3GQYvP1pplAlFBqeNhMMVGXCMbm9omwYycT6tgW/47aEXZITf/agaf2zJ
7dj3cJkXbXyJ5OEkDQ654wQV9rqFy7Udsj0b/rSt8NYwutwH
-----END CERTIFICATE REQUEST-----


Con esto ya debieramos tener configurado nuestro servidor para servir paginas seguras, ahora arrancamos tomcat:

slackware:/home/slack/programas/apache-tomcat-5.5.20# ./bin/startup.sh
Using CATALINA_BASE: /home/slack/programas/apache-tomcat-5.5.20
Using CATALINA_HOME: /home/slack/programas/apache-tomcat-5.5.20
Using CATALINA_TMPDIR: /home/slack/programas/apache-tomcat-5.5.20/temp
Using JRE_HOME: /usr/lib/jvm/java-6-sun

y vemos el siguiente log:

slackware:/home/slack/programas/apache-tomcat-5.5.20# tail -f logs/catalina.out
28-09-2007 03:53:28 PM org.apache.catalina.startup.HostConfig deployDescriptor
A28-09-2007 03:53:28 PM org.apache.catalina.realm.JAASRealm setUseContextClassLoader
INFO: Setting useContextClassLoader = false
28-09-2007 03:53:30 PM org.apache.catalina.startup.ContextConfig validateSecurityRoles
##### platform = PostgreSQL
[cdding] INFO [main] [/cdding].log(646) | Loading Spring root WebApplicationContext
28-09-2007 03:53:46 PM org.apache.coyote.http11.Http11BaseProtocol start
INFO: Arrancando Coyote HTTP/1.1 en puerto http-8080
28-09-2007 03:53:46 PM org.apache.coyote.http11.Http11BaseProtocol start
INFO: Arrancando Coyote HTTP/1.1 en puerto http-8443
28-09-2007 03:53:46 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
28-09-2007 03:53:46 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/71 config=null
28-09-2007 03:53:46 PM org.apache.catalina.storeconfig.StoreLoader load
INFO: Find registry server-registry.xml at classpath resource
28-09-2007 03:53:46 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 21538 ms

abrimos https://localhost:8443/

Y tenemos socket security layer en nuestro localhost

Ahora una más cortita de hacer esta misma configuración para jdk superiores a la 1.4, que contengan en el directorio bin la keytoll:

1.-
Descomentar del archivo server.xml del directorio conf de tomcat el tag del conector:


maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />

2.- Crear almacen de claves y certificado de seguridad:

slack@debian:/usr/lib/jvm/jdk1.5.0_12/bin$ keytool -genkey -alias tomcat -keyalg RSA

Nos pedirá una serie de datos para configurar el certificado. Lo primero que nos pide es la contraseña para el almacén de claves, por defecto es "changeit"

Si queremos usar cualquier otra clave, lo único que tenemos que hacer es añadir al Connector el parámetro keystorePass especificando la clave a usar.

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystorePass=”mi_clave”/>

Nos pregunta si los datos introducidos son correctos e introducimos si.

A continuación nos pide la contraseña para tomcat. Da la opción de pulsar INTRO para este efecto.

Saludos y suerte !!

viernes, 21 de septiembre de 2007

Intel PRO/Wireless 3945ABG en Debian Etch

Hola, al instalar Debian etch en mi equipo (un notebook hp modelo nx7400) no se detecto de manera automática la wi-fi durante la instalación. leyendo documentación resolvi que es un problema del kernel y las licencias software de los drivers, sin embargo en el open source cada día ahí más de todo para estos casos. Así que puse manos a la obra para poder conectarme inalambricamente con mi Debian etch.
A continuación explico en pocos pasos y de manera clara y corta esta configuración:

*Para una tarjeta de red inalámbrica modelo Intel Corporation PRO/Wireless 3945ABG integrada en el portátil tendrás que añadir el firmware de ésta al kernel.

1.- Hay que localizar la versión del kernel correspondiente, vas a la consola y tipeas lo siguiente:

slackware:/# uname -a

Te desplegara la siguiente información:
Linux slackware 2.6.18-5-686 #1 SMP Thu Aug 30 02:19:07 UTC 2007 i686 GNU/Linux

Tambien puedes saber tu tarjeta tipeando el siguiente comando por consola:

slackware:/# lspci

este comando te desplegara una lista con tus dispositivos, em mi caso es esta, vemos q al final esta mi wireless:

00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 01)
00:1c.3 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 4 (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #3 (rev 01)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #4 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
00:1f.2 SATA controller: Intel Corporation 82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller AHCI (rev 01)
02:06.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller
02:06.1 FireWire (IEEE 1394): Texas Instruments PCIxx12 OHCI Compliant IEEE 1394 Host Controller
02:0e.0 Ethernet controller: Broadcom Corporation BCM4401-B0 100Base-TX (rev 02)
10:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)

2.- Despues hay que encontrar tu versión con el siguiente comando por consola:

slackware:/# apt-cache search ipw3945

en mi caso busque las opciones del kernel que tengo instalado, el 2.6.18-5-686

Esto te desplegara una lista de opciones, si no lo hace debes editar tu archivo de repositorios de la siguiente forma:

slackware:/# gksudo gedit /etc/apt/sources.list

y añadir al repositorio estas tres lineas (si es que no se encuentran):

#wireless
deb http://ftp.de.debian.org/debian etch main
deb http://ftp.debian.org/debian/ etch main non-free contrib

3.- Seguidamente debes instalar los modulos de tu version del kernel, en mi caso es:

# apt-get install ipw3945-modules-2.6.18-5-686
# apt-get install ipw3945d
# apt-get install firmware-ipw3945

Esto último carga el firmware en /lib/firmware

4.- Te recomiento que luego reinicies el equipo con tu wi-fi encendida. Ya en el sistema debes configurar la conexión (IP estática o DHCP, etc...).

Saludos y suerte !!

domingo, 16 de septiembre de 2007

Instalar tomcat en Linux

Hola, si trabajamos desarrollando aplicaciones web, generalmente debemos trabajar con algún servidor web para nuestras páginas, existen varias alternativas que vale la pena probar, yo he probado jonas, sun aplication server y otras, sin embargo una de las mas recomendables es Tomcat del proyecto jakarta, tomcat es seguro, facil de administrar, y 100% free.

Tomcat puede servir desarrollos jsp y java por su puerto 8080. a continuación explico en pocos pasos su instalación en Linux.

1.- Baja tomcat de su pagina http://tomcat.apache.org/
yo baje la version apache-tomcat-5.5.20 en formato tar.gz

2.- Posteriormente procederemos a descomprimir este archivo en nuestra maquina, ten en cuenta un buen directorio donde dejar definitivamente tu tomcat, porque posteriormente debes configurar las path de tomcat, entonces lo desempaquetamos de la siguiente forma:

slackware:/home/slack/programas# tar -zxvf apache-tomcat-5.5.20.tar.gz

Esto debe generar un directorio de nombre:

apache-tomcat-5.5.20 en el mismo directorio que se desempaqueta

Si ingresamos al directorio de tomcat y hacemos un ls nos muestra las siguientes carpetas:

slackware:/home/slack/programas/apache-tomcat-5.5.20# ls -l
total 68
drwxr-xr-x 2 slack slack 4096 2007-09-15 17:08 bin
drwxr-xr-x 6 slack slack 4096 2006-09-12 11:10 common
drwxr-xr-x 3 slack slack 4096 2007-09-15 17:16 conf
-rw-r--r-- 1 slack slack 11357 2006-09-12 11:12 LICENSE
drwxr-xr-x 2 slack slack 4096 2006-09-12 11:10 logs
-rw-r--r-- 1 slack slack 688 2006-09-12 11:12 NOTICE
-rw-r--r-- 1 slack slack 6744 2006-09-12 11:10 RELEASE-NOTES
-rw-r--r-- 1 slack slack 6964 2006-09-12 11:12 RUNNING.txt
drwxr-xr-x 5 slack slack 4096 2006-09-12 11:10 server
drwxr-xr-x 4 slack slack 4096 2006-09-12 11:10 shared
drwxr-xr-x 2 slack slack 4096 2007-09-15 17:08 temp
drwxr-xr-x 9 slack slack 4096 2007-09-15 17:16 webapps
drwxr-xr-x 3 slack slack 4096 2007-09-15 17:16 work

En la carpeta webapps se guardan nuestras aplicaciones que se despliegan de nuestro archivo war generado en eclipse con ant, maven u otro ide

Posteriormente debemos agregar este tomcat a nuestro class-path para que quede como variable de entorno, en debian se debe editar el archivo environment, con el siguiente comando

slackware:/# gksudo gedit /etc/environment

luego agregamos la ruta y el classpath al archivo, este es mi environment


LANG="es_CL.UTF-8"

JAVA_HOME=/usr/lib/jvm/java-6-sun

CATALINA_HOME=/home/slack/programas/apache-tomcat-5.5.20

TOMCAT_HOME=/home/slack/programas/apache-tomcat-5.5.20

export JAVA_HOME CATALINA_HOME TOMCAT_HOME


Ya estan agregadas nuestros Path de Tomcat al entorno, podemos comprobar esto con el siguiente comando en la consola.

slackware:/# env

Nos debe dar un listado de entornos configurados en la maquina, en este listado se agregan las siguientes lineas:

CATALINA_HOME=/home/slack/programas/apache-tomcat-5.5.20
TOMCAT_HOME=/home/slack/programas/apache-tomcat-5.5.20

OJO:
si no se encuentran declaradas estan variables debes reiniciar la maquina

y ya estariamos listos para poder iniciar tomcat en nuesetra maquina, esto se hace de la consola en el directorio de tomcat con el siguiente comando:

slackware:/home/slack/programas/apache-tomcat-5.5.20# ./bin/startup.sh

desplegando una lista similar a esta:

Using CATALINA_BASE: /home/slack/programas/apache-tomcat-5.5.20
Using CATALINA_HOME: /home/slack/programas/apache-tomcat-5.5.20
Using CATALINA_TMPDIR: /home/slack/programas/apache-tomcat-5.5.20/temp
Using JRE_HOME: /usr/lib/jvm/java-6-sun

Eso quiere decir que estamos listos para ingregar a nuestro tomcat en el localhost abriendo la siguiente url en nuestro browser.

http://localhost:8080/

esto nos debe desplegar la pantalla inicial de tomat, en donde podremos acceder al manager de las aplicaciones, y para parar el servidor se debe ingresar el siguiente comando en el terminal:

slackware:/home/slack/programas/apache-tomcat-5.5.20# ./bin/shutdown.sh


Saludos y suerte !!