SafeChildren Banner

Havoc Oracle Solaris Experts

viernes, 25 de enero de 2013

Error en python "sslv3 alert handshake failure" sobre OpenIndiana

Introducción
Hace unos días quería hacer unas pruebas sobre una idea que llevaba en la cabeza para nuestro appliance HSeries mientras iba en el AVE, y, decidí utilizar una máquina virtual que tenía en mi equipo para hacer las pruebas.

Claro que no sabía que me encontraría con un error que, en los sistemas de producción y testing no se repetía, así que estuve volviéndome loco investigando el asunto.

El error
El script escrito en python hace una llamada a un servidor mediante SSL y carga un XML para luego utilizarlo, sin embargo, cuando llamaba en la máquina virtual al script obtenía un error en Python

hseries$ python havoc.boot  
(c) Havoc Technologies 2007-2013
Can't Load XML
Traceback (most recent call last):
  File "havoc.boot", line 42, in <module>
    req = urllib2.urlopen(locator)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 394, in open
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 412, in _open
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1207, in https_open
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 1174, in do_open
URLError: <urlopen error [Errno 1] _ssl.c:503: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure>



Las pruebas
Entendía que tal vez sería un problema del certificado, así que, cree uno nuevo autofirmado -aunque no tenía mucho sentido ya que URLLib2 no comprueba los certificados-, cambié las versiones de Tomcat, de Java, etc. y nada.

No fue hasta que por desesperación, hice la prueba sobre una máquina FreeBSD con el mismo certificado, misma Java, mismo Tomcat y ... funcionó. ¿Entonces el problema está en mi máquina virtual, no?

El problema
Después de muchas pruebas, comprobé la versión de OpenIndiana -si, ya sé que lo debería haber hecho antes, pero pensaba que era la misma-, y, es aquí donde está el problema. En la versión OpenIndiana b148 la versión de OpenSSL es la 0.9.8.15 -podemos verla utilizando el comando pkg con la opción info-.

havoc@h100:/# pkg info openssl
          Name: library/security/openssl
       Summary: OpenSSL - a Toolkit for Secure Sockets Layer (SSL v2/v3) and Transport Layer (TLS v1) protocols and general purpose cryptographic library
   Description: OpenSSL is a full-featured toolkit implementing the Secure
                Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1)
                protocols as well as a full-strength general purpose
                cryptography library.
      Category: System/Security
         State: Installed
     Publisher: openindiana.org
       Version: 0.9.8.15
 Build Release: 5.11
        Branch: 0.148
Packaging Date: 25 de noviembre de 2010 00:12:56
          Size: 10.08 MB
          FMRI: pkg://openindiana.org/library/security/openssl@0.9.8.15,5.11-0.148:20101125T001256Z


Sin embargo, en el build 151a aunque la versión es igual 0.9.8.15 el tamaño del paquete es inferior.

havoc@h1000:~$ pfexec pkg info openssl
          Name: library/security/openssl
       Summary: OpenSSL - a Toolkit for Secure Sockets Layer (SSL v2/v3) and Transport Layer (TLS v1) protocols and general purpose cryptographic library
   Description: OpenSSL is a full-featured toolkit implementing the Secure
                Sockets Layer (SSL v2/v3) and Transport Layer Security (TLS v1)
                protocols as well as a full-strength general purpose
                cryptography library.
      Category: System/Security
         State: Installed
     Publisher: openindiana.org
       Version: 0.9.8.15
 Build Release: 5.11
        Branch: 0.151.1
Packaging Date: 12 de septiembre de 2011 02:41:35
          Size: 9.81 MB
          FMRI: pkg://openindiana.org/library/security/openssl@0.9.8.15,5.11-0.151.1:20110912T024135Z


Solución
Así que cree una máquina virtual nueva, con la versión OpenIndiana 151a, volví a ejecutar el script y ... listo, ningún problema.

Conclusiones
Cuando vayas a hacer unas pruebas aunque sea en un viaje en AVE para pasar el tiempo ... asegúrate de tener el mismo nivel de parcheo, versiones, etc. que los equipos de producción.

jueves, 10 de enero de 2013

Pedir disculpas a todos vosotros por este tiempo de "silencio"

Hola a todos,

Lo cierto es que quiero pedir disculpas a todos vosotros, los que me seguís desde hace mucho y los que no, por no haber actualizado el blog durante estos últimos meses.

La verdad es que, como ya os he comentado en otras entradas, me encuentro bastante ocupado con el tema de SafeChildren Guardian y con apenas tiempo para poder llegar a todo.

Aunque, también os comento que poco a poco voy liberándome de cosas y ... eso significa que puedo volver a dedicar tiempo al Blog y contestar a las preguntas que me hacéis por eMail o directamente desde Blogger.

Tengo muchas cosas en el tintero, como por ejemplo, seguir con el tema de PostgreSQL de Backup y Replicación, El sistema de paquetes de OpenIndiana y algunas otras cosas ...

Os prometo que en unas semanas tendréis nuevo contenido, seguro! Además, poco a poco iré contestando a las dudas, y, si veis que no os he contestado, por favor, mandarme un eMail para recordármelo, :D

Muchas Gracias a todos,

Urko

domingo, 8 de julio de 2012

SafeChildren Guardian entrevista en la radio

Introducción
Esta entrada está un poco fuera de la temática normal de mi blog, pero creo que es interesante también poder contar algunas cosas diferentes, no?

Como ya sabéis -y si no os lo cuento- soy el responsable de tecnología de Havoc Tecnologies y, entre los proyectos que llevo, está un Sistema de Control Parental de última generación y basado en análisis de Pautas de Comportamiento- de ahí muchas cosas de las que hemos hablado, como por ejemplo, Apache Hadoop, PostgreSQL y, por supuesto Solaris-.

El producto se llama SafeChildren Guardian  y fui entrevistado en Radio Aragón -en el programa de Aragón 3.0- sobre la conbinación de Internet, Menores y las soluciones existentes.

Aunque fue muy resumido, lo cierto es que fue una entrevista muy agradable y, al menos, pudimos aportar nuestro granito de arena a esos padres que, a veces, ven como sus hijos les superan en conocimientos tecnológicos.

Estoy encantado de ver como cada vez más gente se implica en el tema de los menores e Internet, y, espero, que la solución SafeChildren Guardian les aporte "ese punto de tranquilidad" a todos los padres y madres preocupados por sus hijos.





domingo, 25 de marzo de 2012

Login Incorrect al lanzar el comando zlogin sobre una zona de solaris


Introducción
Puede que alguna vez os pase que al intentar conectar a una zona de Solaris, el sistema os muestre un error diciendo que los roles sólo puede ser asumidos por usuarios autorizados.

Esto se debe a que hemos modificado el usuario "root" y ahora es un "role", por ello, si utilizamos el comando <zlogin _nombre_zona> nos denegará la conexión, por ejemplo:

havoc@h1-master-01:~$ pfexec zlogin www-test
[Connected to zone 'www-test' pts/3]
Roles can only be assumed by authorized users
Login incorrect


[Connection to zone 'www-zone' pts/3 closed]


La solución
Existen dos soluciones muy sencillas que a continuación os muestro. La primera es utilizar una opción en el comando <zlogin> y la segunda es volver a poner a <root> como usuario.

Utilizar un usuario con el role <root> en la zona
Podemos utilizar un usuario con el role <root> en la zona, y mediante la opción <-l usuario> conectarnos, por ejemplo, si tenemos el usuario "havoctec" en la zona "www-test"

havoctec@www-test:~$ id
uid=901(havoctec) gid=10(staff)
havoctec@www-test:~$ roles
root
havoctec@www-test:~$ logout

[Connection to zone 'www-test' pts/3 closed]
havoctec@hseries-master-01:~$ pfexec zlogin -l havoctec www-test
[Connected to zone 'www-test' pts/3]
Last login: Wed Mar 14 10:54:47 on pts/3
OpenIndiana (powered by illumos)    SunOS 5.11    oi_151a    September 2011
havoctec@www-test:~$

Configurar la cuenta de <root> como usuario y no como <role>
La otra solución -aunque a mi no me parece la mejor- es configurar la cuenta de <root> como usuario y no <role>, para ello, simplemente deberemos editar el archivo </etc/user_attr> y modificamos el valor de la propiedad <type=role> por <type=normal>, por ejemplo,

havoctec@hseries-master-01:~$ cat /etc/user_attr|grep ^root
root::::min_label=admin_low;lock_after_retries=no;auths=solaris.*,solaris.grant;audit_flags=lo\:no;profiles=All;clearance=admin_high;type=role

Conclusiones
Es muy sencillo seguir utilizando roles dentro de las zonas, y de esta forma, continuar con la seguridad extendida que nos proporciona RBAC.

Referencias

viernes, 20 de enero de 2012

DBLink con parametros en PostgreSQL

Introducción
Hace unos días una persona me dejó una duda a modo de comentario en la entrada de DBLinks en PostgreSQL. Esta duda es sencilla, y, a la vez interesante, por eso, he decidido crear una entrada explicando la solución.

La duda
¿Es posible crear una vista en PostgreSQL utilizando un DBLink con parámetros dinámicamente?

Es decir, lo que queremos es hacer los siguiente:
SELECT device_name FROM remote_database_v(param1, param2);
La solución
Sobre si es posible crear una Vista con un DBLink parametrizado, lo cierto es que no se puede, es decir, no podemos crear una vista pasando un argumento.

Sin embargo, podemos crear un procedimiento que nos devuelva un tipo "record" y pasarle como parámetros la cadena de conexión, por ejemplo:
CREATE OR REPLACE FUNCTION test_dblink_with_parameter(dbname character varying, dbhost character varying, dbuser character varying, dbuserpass character varying)
  RETURNS SETOF record AS
$BODY$
    SELECT t.device_name
    FROM dblink('dbname=' || $1 || '  port=5432 host=' || $2 || ' user=' || $3 ||' password=' || $4 , 'SELECT device_name FROM devices.as_device') as
     t(device_name character varying);
$BODY$
  LANGUAGE sql VOLATILE;
Y ahora podemos llamar a nuestro procedimiento como si fuese una tabla o vista.

Recordar que al ser de tipo "record" tenemos que decirle cómo es el formato del registro <AS (field1 type, field2 type, fieldn type)>, en nuestor caso devuelve el campo "as_device" que es de type "character varying".
SELECT * FROM test_dblink_with_parameter('dbname','localhost','user','password') AS (device_name character varying);
Algunas Mejoras
En función de los datos que estamos obteniendo, podemos, por ejemplo, optimizar el coste <COST> y el número de rows <ROWS> del procedimiento. En el ejemplo, hemos dejado el coste y el número de rows "por defecto",  COST 100ROWS 100.

Referencias