Archivado en la categoría (adAS, Identidad Digital, PRiSE) por Teresa
Publicado el 24-05-2011

Acaba de presentarse el Boletín nº 90 de las Jornadas Técnicas de RedIRIS, las cuales se celebraron en Córdoba el pasado noviembre.

En estas Jornadas Técnicas Inmaculada Bravo García y Reyes Hernández Rodríguez, de la Universidad de Salamanca, presentaron(*) el nuevo sistema de Single Sign-On implantado en su universidad: adAS. Esta presentación fue seleccionada para ser publicada en el Boletín de las mismas, del cual podemos ver desde esta semana su versión digital.

Pónganse en contacto con nosotros para más información sobre adAS.

(*)Enlace al video de la presentación de en las Jornadas Técnicas de RedIRIS

(0) Comments    Read More   
Archivado en la categoría (Identidad Digital, PAPI) por Daniel
Publicado el 26-04-2011

EasyPoA es un PoA PAPI ligero desarrollado en PHP. Cuyo principal objetivo es facilitar la tarea de proteger aplicaciones web PHP por medio de protocolo PAPI.

La primera release candidate de EasyPoA está disponible en papisoftware

Para conseguir que EasyPoA sea un componente ligero, se han restringido determinadas características comunes de los PoAs siendo la primera el hecho de no implementar el mensaje ATTREQ del protocolo PAPI, por lo que EasyPoA sólo puede hablar con GPoAs, puesto que no tiene la capacidad de interrogar a un AuthServer acerca de los usuarios.
También se ha eliminado la capacidad de realizar filtros de acceso basados en los datos recibidos en la aserción. De forma que la responsabilidad de realizar el control de acceso recae en la aplicación protegida.

EasyPoA no hace uso de las tradicionales cookies Hcook y LcooK, usadas por los componentes pesados de PAPI para mantener el contexto de seguridad. Así como tampoco necesita ficheros DB o bases de datos donde mantener los datos relativos a las peticiones de los usuarios. Sino que mantiene el contexto de seguridad y los parámetros de la petición original en la sesión PHP de usuario. Consiguiendo así un componente PAPI fácil de configurar en entornos de alta disponibilidad y balanceo de carga, sólo es necesario que los balanceadores mantengan las sesiones HTTP.

Por último se ha reducido el juego de directivas de configuración necesarias para configurar un PoA, y se ha optado por un fichero de configuración .ini de PHP

Para obtener más información sobre como instalar, configurar y usar EasyPoA, pueden encontrarla en EasyPoA@PAPISoftware

(0) Comments    Read More   
Archivado en la categoría (adAS, Identidad Digital, PRiSE) por Teresa
Publicado el 29-03-2011

Acabamos de lanzar la versión 1.1 de adAS. Para los que no lo conozcáis, éste es un Servidor de Autenticación Avanzado que realiza funciones de Proveedor de Identidad ofreciendo a su vez un entorno gráfico de configuración, haciendo más sencilla su puesta en marcha y posterior mantenimiento. Podéis descargar esta nueva versión en la página de descarga de adAS.

Las nuevas características que incluye esta versión son:

  • SLO (Single Log-Out). Se han añadido capacidades de SLO a adAS permitiendo que los usuarios puedan cerrar su sesión. Así mismo, se ha implementado el perfil SLO WEB de SAML2.
  • Envío de mensajes de log al servicio SYSLOG del sistema.
  • Añadido soporte para Microsoft SQL Server como fuente de datos.
  • Para el módulo de estadísticas se ha añadido soporte mediante PHP PDO, por lo que se podrá usar cualquier sistema de gestión de base de datos para el cual exista driver PDO.
  • Añadido parámetro de TimeOut para las fuentes de datos LDAP y BD basadas en PHP PDO.
  • Añadido en el interfaz de administración un botón para generar un resumen SHA1 de la clave publica usada en el protocolo PAPI.
  • Soporte HTTPS para el interfaz de administración web.
  • Mejorado el sistema de selección de plantillas HTML para los formularios de login. Ahora se basa en los que encuentra en el disco, en vez de los que se encontraban añadidos en el fichero de configuración authn_config.php.
  • La autenticación mediante fuente de datos LDAP ha cambiado, de forma que ahora se realiza la búsqueda del DN del usuario, y luego se hace bind con dicho DN.
  • Añadido soporte de gestión de claves asimétricas para versiones de PHP anteriores o igual a la versión 5.2.0.
  • Generación automática de metadatos propios a adAS como proveedor de identidad.
  • Añadido selector de fuentes de datos en el interfaz de gestión de módulos de autenticación.
Además de resolver los bugs que se han ido reportando para la versión anterior.
(0) Comments    Read More   
Archivado en la categoría (Identidad Digital, PAPI) por Teresa
Publicado el 21-01-2011

Todos los compontes de PAPI desarrollados en PHP necesitan utilizar la función ‘openssl_pkey_get_details‘, ya que siempre se necesita trabajar con la clave pública RSA de algún componente de la infraestructura PAPI donde está desplegado.

El problema que muchos de nosotros nos hemos encontrado cuando hemos realizado instalaciones de PAPI, es que algunas distribuciones de Linux, como Red Hat, sólo incluyen la versión 5.1.6 dentro de sus ramas o versiones estables.

En adAS hemos intentado hacer la vida más fácil a la hora de instalarlo, por lo que estamos incorporando una solución «de emergencia» (o workaround) para aquellas situaciones en las que es imposible actualizar la versión de PHP. ¿Cómo? Utilizando el ejecutable de OpenSSL.

La función de PHP ‘openssl_pkey_get_details’ necesita un parámetro con un objeto que representa a la clave y devuelve un ‘array’ con la siguiente estructura (para el caso de claves RSA, que es el que nos interesa):

array(
'bits' => ...,
'key' => ...,
'type' => 0,
'rsa' => array(
'n' => ...,
'e' => ...
),
)

Donde,

  • bits: es el número de bits de la clave.
  • key: es la clave en formato PEM.
  • type: su valor es OPENSSL_KEYTYPE_RSA.
  • rsa: es un array con la siguiente información
    • n: es el módulo de la clave RSA.
    • e: es el exponente de la clave RSA.

Toda esta información la podemos obtener también ejecutando el comando ‘openssl’, aunque lo obtendremos en otro formato:

$ openssl rsa -pubin -in test.pem -modulus -text
Modulus (1024 bit):
00:a8:cd:4f:02:e4:b3:2c:b7:3b:3b:77:7c:0f:c8:
9b:24:66:c9:92:9d:05:8e:4b:b4:50:14:8b:41:00:
19:f7:31:49:49:4a:38:40:81:8f:29:a4:99:eb:0c:
4c:ee:a3:6c:d5:04:a1:8a:1f:1b:33:2a:da:95:5e:
62:40:b1:2a:99:36:37:d5:1d:9a:99:26:b7:7b:11:
0c:37:84:e0:d0:15:42:1c:d3:b5:61:f7:0f:8a:b6:
ca:18:03:0d:36:c2:50:f5:ae:b5:60:16:c0:92:f3:
84:68:12:a8:e1:ce:72:21:c9:d1:2c:18:e4:e7:37:
c3:79:d8:22:38:86:2a:dc:97
Exponent: 65537 (0x10001)
Modulus=A8CD4F02E4B32C ... C18E4E737C379D82238862ADC97
writing RSA key
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCozU8C5LMstzs7d3wPyJskZsmS
nQWOS7RQFItBABn3MUlJSjhAgY8ppJnrDEzuo2zVBKGKHxszKtqVXmJAsSqZNjfV
HZqZJrd7EQw3hODQFUIc07Vh9w+KtsoYAw02wlD1rrVgFsCS84RoEqjhznIhydEs
GOTnN8N52CI4hirclwIDAQAB
-----END PUBLIC KEY-----
Obtener el número de bits de la clave pública es bastante fácil ya que no tenemos que hacer ninguna conversión (de la clave pública en formato PEM ni hablamos, ya que sin ella no hubiésemos podido ejecutar dicho comando).
El exponente se nos indica en hexadecimal: 0x10001. Éste valor hemos de procesarlo en PHP de la siguiente manera:
$data = explode("\n", trim($salida));
for ($i = 0; $i < count($data); $i++) {
$temp = explode(" ", $data[$i]);
if ($temp[0] == "Exponent:") {
$exp = $temp[1];
}
}
$e = base_convert($exp, 10, 16);
$e = asciihex2hex($e);
Como vemos, nos quedamos con el valor en decimal que nos indica OpenSSL, 65537 en nuestro ejemplo, y lo pasamos a hexadecimal cambiando la base de 10 a 16. Como obtendremos el valor ‘10001’, utilizaremos la siguiente función para obtener el valor en decimal:
function asciihex2hex($str) {
while ((strlen($str) % 2) != 0) {
$str = "0" . $str;
}
$out = "";
for ($i = 0; $i < strlen($str); $i+=2) {
$out .= chr(hexdec($str[$i] . $str[$i + 1]));
}
return $out;
}
Con respecto al módulo de la clave RSA, OpenSSL nos ofrece su valor en hexadecimal en una cadena de texto, por lo que para pasarlo a decimal número utilizaremos la siguiente receta:
$data = explode("\n", trim($salida));
for ($i = 0; $i < count($data); $i++) {
$temp = explode(" ", $data[$i]);
if (strpos($data[$i], "Modulus=") !== false) {
$modulus = substr($data[$i], strlen("Modulus="));
}
}
$m = $modulus;
$m = self::asciihex2hex($m);
De esta forma ya tenemos toda la información que nos hubiese dado la función de openssl ‘openssl_pkey_get_details':
$res = array(
'bits' => $keylength,
'key' => $publickeypem,
'type' => 0,
'rsa' => array(
'n' => $m,
'e' => $e
)
);
(0) Comments    Read More