lunes, enero 21, 2013

Configurar 2 certificados SSL en un mismo Apache

Tengo un servidor Apache funcionando con su nombre de dominio, un SSL y un proxypass hacia una máquina interna en la red que tiene la aplicación. Esto funciona bien desde hace tiempo.

Resulta que se hizo una aplicación nueva que debe estar en SSL con su propio dominio y certificado SSL.

Para configurar el dominio no hay problema solamente agregué un VirtualHost por nombre y funcionaba ok. (uno así para HTTP y otro para HTTPS usando los certificados)


Usar 2 puertos distintos: se verá muy feo. porque tendríamos que acceder a http://server:8443/algo y puede que algunos ISP incluso bloqueen puertos y puede dar problemas.

La parte del "directory" la puse porque me daba un problema de que no tenía acceso al directorio. Al final no revisé si era necesaria o no.

En el DocumentRoot tengo un index.html que hace un META REFRESH hacia la url http://web.server.com/miaplicacionweb o http://movil.server.com/miaplicacionmovil

Al momento de querer poner el certificado la cosa se complicó. Puse el SSL y me dió este error:
Init: You should not use name-based virtual hosts in conjunction with SSL!!

Leyendo la documentación encontré que hay un problema con esta configuración ya que el apache no puede usar múltiples SSL en una misma IP+Puerto.
http://httpd.apache.org/docs/2.0/ssl/ssl_faq.html#vhosts2

Entiendo que el problema es por esto: El SSL cifra el contenido de la página. Cuando Apache debe decidir cual virtualhost usar, para saber que SSL se usa debe decifrar el contenido de la página y como está cifrada apache no sabe cual certificado utilizar.

En el caso de tener múltiples IP's puede filtrar el virtualhost por IP sin tener que descifrar nada y ahí si funciona.
(confuso: si.    Estoy seguro: no. Pero eso entendí :p )

Alternativas:
Poner 2 IP's en la misma máquina: hay que tener 2 IP's públicas.

Lo primero que se hizo fué solicitar 2 IP's públicas. Como era una máquina virtual se le creó una segunda tarjeta de red y se le puso una segunda IP.

Como estaba atras de un Firewall las IP's publicas se nateaban en algún router y llegaban a las IP's privadas. Algo así como:
200.x.x.1 Publica1 apunta a 192.0.1.1 Privada1 (eth1)
200.x.x.2 Publica2 apunta a 192.0.1.2 Privada2 (eth2)

Al tener esto y los DNS's configurados:
web.server.com en 200.x.x.1
movil.server.com en 200.x.x.2
* esto lo confirmaba haciendo un nslookup web.server.com y luego un telnet web.server.com 80 (para ver si respondía el puerto).

Luego hice la configuración de virtualhost por IP. (IP-NAMED dice la configuración de apache). Perdí 4 horas de mi vida tratando de entender porque no funcionaban los virtualhost.

Para ver el problema le puse un log distinto a cada virtual host. Luego de batallar un buen rato encontré que el problema era que yo estaba usando en el virtualhost las ips publicas y no las internas. Al final, la conclusión es que hay que usar las ip's privadas. Dejando la configuración algo asi:


Para HTTP:



y para el HTTPS:



y ya. con eso debe de estar funcionando correctamente.

saludos!

lunes, abril 30, 2012

Instalar Office 2007 en Ubuntu 12.04


Acabo de instalar Ubuntu 12.04, en una máquina limpia.

Parte de lo que debía hacer es instalar office. Uso el LibreOffice para el 80% de los temas, pero hay un 20% de temas que requieren office. (MSProject y algunos archivos que deben tener cierto formato).

En la 11.10 había seguido este manual (http://www.ubuntubuzz.com/2011/09/install-microsoft-office-2007-in-ubuntu.html) pero ahora me dió un problema, cuando trataba de instalar el dll dotnet20 me daba este error: "This product is not supported on a 64-bit operating system. Setup will now exit." desde una ventanita de windows.   Recordé que puse la versión de 64 bits de ubuntu. (no recuerdo si en 11.10 tenia 64 bits.. pero.. no importa).

Luego de algunas pruebas vi que tenía que hacer esto:

1. descargar ultima version de wine *no se si es necesario pero igual lo dejo.
Actualizar el Wine:
sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine1.3
El comando dice wine1.3 pero es la versión 1.4.  Tambíen me dió duda y lo busque :D
Verifico que esté correctamente la última versión:
wine --version
:~/.wine$ wine --version
wine-1.4
2. eliminar cualquier isntalación previa del Wine
rm -rf .wine
3. Forzar a que la máquina virtual tenga 32bits.
export WINEARCH=win32
export WINEPREFIX=~/.wine
winecfg
4. instalar winetricks
cd .wine/
wget http://www.kegel.com/wine/winetricks
chmod +x ./winetricks
./winetricks
5. Luego.. Seguir la guía que se tenía para 11.10 http://www.ubuntubuzz.com/2011/09/install-microsoft-office-2007-in-ubuntu.html saltando la parte donde dice install.wine

al final de cuentas solo agrego la parte de 32bits.

referencias:
http://appdb.winehq.org/objectManager.php?sClass=version&iId=3754
http://forums.fedoraforum.org/showthread.php?t=272681
http://pingato.wordpress.com/2009/04/16/winetricks-instalaciones-sencillas-en-wine/

Ojo.. no soy experto ni mucho menos en linux. Solo soy un usuario que soluciona los temas que vienen.  A veces sin saber exáctamente porque :D

viernes, octubre 14, 2011

Deadlock detected al obtener las conexiones JNDI en un WAS 7.0.0.13


Hace unos días dejamos en producción una aplicación que migramos de websphere 6.1 a websphere 7. (IBM WAS 7).


En principio vale mencionar que no hay nada transparente ni "migrable" entre lo que hicimos con RAD6 para que funcione en WAS7, RAD8 no soporta SDO y tuvimos que migrar "a mano" muchas cosas re-certificando toda la aplicacion, pero eso es otro tema que no comentaré a detalle.

Lo que sí quería mencionar es un error un poco raro que tuvimos luego de la salida en producción. La aplicación en testing y desarrollo funcionaba bien, pero al estar en producción empezó a dar algunos problemas, en momentos de stress de repente el WAS se colgaba completo, inclusive dejaba de responder la consola.


Revisando el SystemOut y el SystemErr empezaron a aparecer algunos errores en la clase que obtenía la conexión a la base de datos, pero no encontramos nada que nos diera una pista de que podría dar problemas.
Vale la pena comentar que como desarrollo no teníamos acceso a los servidores por lo que el proceso de resolución fué muy tortuoso y lento.

Lo primero que verificamos, lo obvio, fué pensar que había un leak de conexiones. Revisamos el systemout buscando cualquier error que nos diera una pista del error y no encontramos nada. Recibimos algunos reportes de los administradores donde se miraba que la caída era un problema que sucedía en poco tiempo (<2 minutos). No era un proceso de degradación poco a poco sino que era una caída casi inmediata.


Sospechabamos de algún reporte o algún proceso donde por algún error hubiera algún tipo de loop infinito donde no se cerraran las conexiones. No encontramos nada.
Luego encontramos en los reportes que el total de threads que tenía configurado el WAS se ocupaban al 100%, nuestra teoría en este momento era que el leak de conexiones hacía que las peticiones se encolaran en el jndi y ocuparan threads y esto hiciera que el server se cayera.
Exploramos algunas alternativas sobre la configuración del WAS, subimos los threads disponibles, pusimos un parámetro en el JNDI para que si no recibía la conexión en 5seg que diera exception. Esto aunque sabíamos que no corregía el error nos daba lapsos más grande
s entre una caída y otra y en lugar de que el was se quedara freeze empezaría a dar error de aplicación donde podríamos encontrar la raíz del problema. Hicimos los cambios y nada. Aunque subieramos los threads igual se ocupaban todos y por alguna extraña razón no respetaba el parametro que pusimos para que diera exception si no obtenía la conexión.

Un poco desesperados peinamos el código (una aplicación grande) y revisamos todas las conexiones para incluir un best practice en cuanto a cierre de las conexiones. Probamos de nuevo y nada. Es más, los errores ocurrian más seguido.

Luego un día estando en audio con los administradores de bdd y con los administradores de WAS, tuvimos una caída. Fué entonces cuando logramos tener al fin el error en las manos. Vimos las propiedades del pool y ... sorpresa! el uso del pool estaba al 50% de su capacidad... No podía ser un connection leak si solo teníamos 50% de las conexiones usadas. Ya habíamos limpiado todos los system.out.println y el systemout estaba sin ningun tema. el systemerr tampoco tenía nada. Generaron un dump de la caída y ahí vimos entonces el error.
buscando en el javacore encontramos un Deadlock detected.
Al analizar más a detalle el lugar donde se reporta el error, vimos que el metodo que muestra la traza es un metodo del pool y que no es parte del aplicativo sino parte del driver jndi de websphere.

Buscando un poco más sobre este tema encontramos algunos casos similares al nuestro:
Y encontramos luego un problema del driver de jdbc, "PK69110: THE SERVANT ABENDS CAUSED BY HUNG THREADS IN JDBC DRIVER".
Este bug tiene afectación en la versión de WAS que usamos http://www-01.ibm.com/support/docview.wss?uid=swg1PK69110&wv=1

La versión de WAS que usamos es la 7.0.0.13, encontramos entonces el problema definitivo. Un parámetro useRRASetEquals en la configuración custom del datasource.

se hizo la prueba, se pasó a producción y luego de varias semanas tratando de encontrar el problema en nuestra aplicación vimos que es un bug de WAS.

El bug era este: Cuando yo le pido una conexión al pool, el jndi usa un objeto con las conexiones utilizadas. Este objeto es compartido. Por alguna razón al tratar de reservar una conexión en el pool el objeto se quedaba tomado por otro thread y causaba un deadlock de threads. Todo esto a nivel de los javas que hacen el pool. mientras mas usuarios trataban de obtener la conexión habían más threads que se encolaban hasta que se acababan los threads del was. Luego ni siquiera la consola de WAS funcionaba y era el freeze. Como era el objeto que reservaba la conexión el error se daba antes de que el parametro de timeout que configuramos entrara y por eso no se tomaba en cuenta.
La moraleja:
hay que leer los javacore cuando hay servers colgados... aunque sean de 500MB.

saludos!

viernes, septiembre 02, 2011

Ubuntu dejó de reconocer mi modem usb

instalé hace unos días mi linux (ubuntu 11.04) y al poner mi modem de tigo todo funcionó ok, solo le cambié el APN por broadband.tigo.gt (es pospago y es un huawei e226) .-

hoy lo quise usar y no me lo reconocía la barrita de redes donde aparecía la conexión. Un poco oxidado en linux decidí buscar el var/log/messages para ver si aparecía una pista para buscar.

encontré que ahora el /var/log/messages ahora es /var/log/syslog en fin.. dejé un tail -f para ver que pasaba al conectarlo y salió algo como esto:



Sep 2 17:31:15 carloscastaneda kernel: [ 70.847353] usb 2-1.2: new full speed USB device using ehci_hcd and address 5
Sep 2 17:31:15 carloscastaneda kernel: [ 70.927358] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:15 carloscastaneda kernel: [ 71.117371] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 71.307382] usb 2-1.2: new full speed USB device using ehci_hcd and address 6
Sep 2 17:31:16 carloscastaneda kernel: [ 71.387526] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 71.577396] usb 2-1.2: device descriptor read/64, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 71.767412] usb 2-1.2: new full speed USB device using ehci_hcd and address 7
Sep 2 17:31:16 carloscastaneda kernel: [ 72.187310] usb 2-1.2: device not accepting address 7, error -32
Sep 2 17:31:16 carloscastaneda kernel: [ 72.267438] usb 2-1.2: new full speed USB device using ehci_hcd and address 8
Sep 2 17:31:17 carloscastaneda kernel: [ 72.687307] usb 2-1.2: device not accepting address 8, error -32
Sep 2 17:31:17 carloscastaneda kernel: [ 72.687486] hub 2-1:1.0: unable to enumerate USB device on port 2
al final encontré por acá la solución: http://www.absolutelytech.com/2009/11/01/solved-ath5k-wifi-module-not-working-in-karmic-koala/
cd /sys/bus/pci/drivers/ehci_hcd

ls
sudo sh -c 'echo -n "0000:00:xx.x" > unbind'
reinicié y listo.-

saludos!

lunes, septiembre 13, 2010

Día del programador!!


Feliz día del programador!!

Hoy se celebra el día 256 del año que es el día del programador... felicidades a todos mis compañeros.

Este día todavía no es oficial pero si insistimos cada año en celebrarlo podemos institucionalizarlo para hacer notar la importancia de nuestro trabajo en la forma en que el mundo se desenvuelve diariamente.-



saludos!

martes, marzo 16, 2010

Configurar tamaño de archivo de mantisbt

Necesitaba poder subir archivos grandes como adjuntos en mantisbt, es un tema realmente básico pero que implico cambiar todas las capas de archivos de configuracion: aplicacion, base de datos, php.

El error que recibía era:

Allowed memory size of 8388608 bytes exhausted

APPLICATION ERROR #401

Fueron varios temas los que tuve que cambiar:


php.ini
memory_limit = 32M
upload_max_filesize = 8M

config.inc de mantis:
$g_max_file_size = 8388608; # 8 MB

mysql:
max_allowed_packet = 16M

domingo, marzo 14, 2010

Orden de Arranque en GRUB2 (ubuntu 9.10)

Para cambiar el orden de arranque de linux ubuntu 9.10:
ubuntu 9.10 usa el grub2 en lugar de grub, eso me hizo perder algun tiempo leyendo en internet.

1. ver que tiene el archivo grub.cfg usando
cat /boot/grub/grub.cfg

2. se busca cual es la opcion que queremos que arranque primero, en mi caso quiero que arranque windows en lugar de linux. Mi windows esta en el orden 8.

3. modificar el default del archivo /etc/default/grub desde el gedit:
sudo gedit /etc/default/grub

4. cambio la linea y grabo
GRUB_DEFAULT=8

5. actualizo los cambios
sudo update-grub


sudo update-grub
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.31-20-generic
Found initrd image: /boot/initrd.img-2.6.31-20-generic
Found linux image: /boot/vmlinuz-2.6.31-16-generic
Found initrd image: /boot/initrd.img-2.6.31-16-generic
Found linux image: /boot/vmlinuz-2.6.31-14-generic
Found initrd image: /boot/initrd.img-2.6.31-14-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
done


reiniciar.-