Programación en castellano Añadir una dirección | Buscador | Cursos | Artículos | Foros | Formación

Sistema de Nombrado en Java (JNDI) y II
Autor: Sun
Traductor: Juan Antonio Palos (Ozito)


En esta página:


SSL y Sockets Personalizados

Los mecanismos de autentificación Simple y CRAM-MD5 autentifican el cliente LDAP con el servidor LDAP. No proporcionan otras características de seguridad, como asegurar que las solicitudes que se envían al servidor sobre la conexión autentificada son del mismo cliente o proteger la privacidad de los datos intercambiados entre el cliente y el servidor.

Para proporcionar mayores niveles de seguridad para la comunicación con los clientes, la mayoría de los servidores LDAP permiten acceder a sus servicios a través de SSL. Dichos servidores soportan puertos SSL además de los puertos normales (desprotegidos). Para usar este servicio, el cliente necesita especificar el número de puerto de un puerto SSL en la propiedad Context.PROVIDER_URL y usar sockets SSL cuando se comunique con el servidor.

Por defecto, el proveedor de servicio LDAP de Sun usa sockets planos cuando se comunica con un servidor LDAP. Para solicitar que se usen sockets SSL, configuramos la propiedad Context.SECURITY_PROTOCOL a "ssl".

En el siguiente ejemplo, el servidor LDAP, ofrece SSL en el puerto 636. Para ejecutar este programa debemos activar SSL en el puerto 636 de nuestro servidor LDAP. Este procedimiento normalmente lo lleva a cabo el administrador de directorios.

// Set up the environment for creating the initial context
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:636/o=JNDITutorial");

// Specify SSL
env.put(Context.SECURITY_PROTOCOL, "ssl");

// Authenticate as S. User and password "mysecret"
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=S. User, ou=NewHires, o=JNDITutorial");
env.put(Context.SECURITY_CREDENTIALS, "mysecret");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

// ... do something useful with ctx

Para ejecutar este programa, necesitamos tener un paquete SSL que implemente el interface javax.net.SocketFactory (para más detalles puedes ver http://java.sun.com/security/ssl/API_users_guide.html). El paquete SSL debe etar disponible en nuestro entorno de ejecución (como el navegador HotJava o Java Web Server) o añadiéndolo a nuestro CLASSPATH. Actualmente, Sun también proporciona una implementación SSL solitaria, Java Secure Socket Extension.

Nota:

Si usamos SSL para conectarnos a un servidor sobre un puerto que no está usando SSL, nuestro programa se colgará. De forma similar, si usamos un socket normal para conectar a un socket SSL del servidor, el programa también se colgará. Esto es una característica del protocolo SSL.

Usar SSL con el Mecanismo External de SASL

SSL proprociona autentificación y otros servicios de seguirdad en una capa inferior al LDAP. Como la autentificación ya se ha realizado, la capa LDAP peude usar la información de autentificación sobre SSL usando el mecanismo SASL External.

El siguiente ejemplo es como el ejemplo anterior, excepto en que vez de usar una autentificación simpple, usa una autentificación SASL External. Usando External, no necesitamos suministrar ninguna información sobre el nombre o la password, porque se obtienen desde el SSL.

// Set up the environment for creating the initial context
Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/o=JNDITutorial");

// Principal and credentials will be obtained from the connection
env.put(Context.SECURITY_AUTHENTICATION, "EXTERNAL");

// Specify SSL
env.put(Context.SECURITY_PROTOCOL, "ssl");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

...

Usar Sockets Personalizados

Cuando configuramos la propiedad Context.SECURITY_PROTOCOL a "ssl", el proveedor LDAP usa la factoría de sockets javax.net.ssl.SSLSocketFactory para intentar crear un socket SSL para comunicar con el servidor. Para usar un paquete SSL diferente, necesitamos configurar la propiedad "java.naming.ldap.factory.socket" con el nombre de la clase de la factoría de sockets que produce sockets SSL. Esta clase debe implementar el interface javax.net.SocketFactory. (Puedes ver más detalles en http://java.sun.com/security/ssl/API_users_guide.html).

Los sockets SSL son sólo uno de los tipos de sockets. Podríamos pensar en otro tipo de sockets que podrían ser útiles, como aquellos para saltarse los firewalls. Podemos usar la propiedad de entorno "java.naming.ldap.factory.socket" para especificar el uso de otros tipos de sockets. Esto es útil para seleccionar la factoría de sockets para una conexión básica. Para seleccionar todos los sockets usados en el programa, usamos java.net.Socket.setSocketFactory(). Observa que si Context.SECURITY_PROTOCOL se configura a "ssl", entones la propiedad "java.naming.ldap.factory.socket" debería especificar una factoría de sockets que produzca sockets SSL.

Aquí hay un ejemplo que crea un contexto inicial usando una factoría de sockets personalizados:

// Set up the environment for creating the initial context
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, 
    "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:555/o=JNDITutorial");

// Specify the socket factory
env.put("java.naming.ldap.factory.socket", "com.widget.socket.MySocketFactory");

// Create the initial context
DirContext ctx = new InitialDirContext(env);

// ... do something useful with ctx

Paquetes Java SSL

Otros APIs Java, como RMI, usan SSL. La documentación RMI incluye una lista de problemas relacionados con RMI-SSL, incluyendo los paquetes Java SSL disponibles dentro y fuera de los Estados Unidos. Para más detalles puedes ver http://java.sun.com/products/jdk/1.2/docs/guide/rmi/SSLInfo.html.


Principio Página
© 1999-2002, Programación en castellano, s.l.
Contacto - Datos legales

ReD Internet: Hospedaje Web | envio sms gratis | Salvapantallas | Fondos de Escritorio, famosas | melodias moviles gratis| Gratis