• No results found

7.3 Elastic Net for RProp

7.3.2 The Method

La mayoría de los programas Java que se ejecutan en AS/00 son aplicaciones y no applets, por lo que no están restringidos por el modelo de seguridad “sandbox”. Desde el punto de vista de la seguridad, las aplicaciones Java están sujetas a las mismas restricciones que cualquier otro programa en AS/400. Para ejecutar un programa Java en AS/400, se debe tener autorización sobre el archivo de clase en el sistema de archivos integrado. Una vez iniciado, el programa se ejecuta con la autorización del usuario.

Se puede utilizar la autorización adoptada para acceder a los objetos con la autorización del usuario que ejecuta el programa y la autorización del propietario del programa. La autorización adoptada da temporalmente a un usuario

autorización sobre objetos a los que, en principio, no habría estado autorizado a acceder. En el tema dedicado al mandato Crear programa Java (CRTJVAPGM) hallará información detallada sobre los dos nuevos parámetros de autorización adoptada, que son USRPRF y USEADPAUT.

El cargador y el verificador de bytecodes, dentro de la máquina virtual Java, también constituyen una medida del modelo de seguridad Java. Al igual que sucede con los applets, el cargador y el verificador de bytecodes comprueban que los bytecodes sean válidos y que los tipos de datos se utilicen correctamente. También comprueban que se acceda correctamente a los registros y a la memoria y que la pila no sufra desbordamientos ni subdesbordamientos. Estas

comprobaciones garantizan que la máquina virtual Java puede ejecutar con total seguridad la clase sin poner en peligro la integridad del sistema.

La ampliación estándar Java SSL de JDK 1.1 es otro factor de seguridad al que AS/400 Developer Kit para Java da soporte. SSL proporciona los medios para autenticar un servidor y un cliente con el fin de ofrecer privacidad e integridad de datos. Toda comunicación SSL comienza con el “reconocimiento” mutuo del

servidor y el cliente. Durante el reconocimiento, SSL negocia la suite de cifrado que utilizarán el cliente y el servidor para comunicarse entre sí. La suite de cifrado es una combinación de diversas funciones de seguridad disponibles a través de SSL. La combinación de varias funciones distintas de seguridad ofrece un mayor grado de seguridad en las comunicaciones de cliente y servidor.

[ Página de presentación de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

El modelo de seguridad Java

Los applets Java se pueden bajar de cualquier sistema; por tanto, dentro de la máquina virtual Java existen mecanismos de seguridad encargados de la protección frente a applets malintencionados. El sistema de ejecución Java verifica los

bytecodes a medida que la máquina virtual Java los va cargando. Esto garantiza que son bytecodes válidos y que el código no viola ninguna de las restricciones que la máquina virtual Java impone a los applets Java. Éstas afectan a las operaciones que pueden realizar los applets, a la forma en que éstos pueden acceder a la memoria y a la manera en que pueden utilizar la máquina virtual Java. Las restricciones se imponen con el fin de impedir que un applet Java pueda

acceder al sistema operativo subyacente o a los datos del sistema. Este modelo de seguridad se denomina “sandbox” y en él los applets Java sólo tienen “libertad de movimiento” en un espacio acotado.

El modelo de seguridad “sandbox” es una combinación del cargador de clases, el verificador de archivos de clase y la clase java.lang.SecurityManager.

Para obtener más información acerca de la seguridad, consulte la documentación dedicada a la seguridad de Sun Microsystems, Inc. y el apartado protección de las aplicaciones Java con SSL.

[ Página de presentación de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Conseguir que una aplicación Java sea segura con la capa de sockets

seguros

Puede utilizar la capa de sockets seguros (SSL) para hacer que la aplicación Java sea más segura. SSL hace lo siguiente para mejorar la seguridad de la aplicación: v Protege los datos de comunicación mediante cifrado.

v Autentica los ID de usuario remotos. v Autentica los nombres de sistema remotos.

Nota:SSL utiliza un certificado digital para cifrar la comunicación de sockets de la aplicación Java. Los certificados digitales son un estándar de Internet para

identificar aplicaciones, usuarios y sistemas seguros. Puede controlar los certificados digitales utilizando el Gestor de certificados digitales de IBM. Para obtener más información, consulte el apartado Gestor de certificados digitales IBM.

Para conseguir que la aplicación Java sea más segura con SSL: v Prepare AS/400 para que dé soporte a SSL.

v Diseñe la aplicación Java para que utilice SSL; para ello:

– Modifique el código de socket Java para que utilice las fábricas de sockets si no las utiliza todavía.

– Modifique el código Java para que utilice SSL.

v Utilice un certificado digital para conseguir que la aplicación Java sea más segura; para ello:

1. Elija el tipo de certificado digital que desee utilizar.

2. Utilice el certificado digital cuando ejecute la aplicación.

También puede registrar la aplicación Java como aplicación segura; para ello, utilice la API QsyRegisterAppForCertUse. Para obtener más información, consulte la sección correspondiente a QsyRegisterAppForCertUse en la publicación System

API Reference: Security APIs .

[ Página de presentación de Information Center | Comentarios ]

Preparación de AS/400 para el soporte de capa de sockets

seguros

Para preparar el sistema a fin de que pueda utilizar SSL, es necesario instalar el programa bajo licencia Digital Certificate Manager:

v 5769-SS1 OS/400 - Digital Certificate Manager

También es necesario instalar uno de los programas bajo licencia Cryptographic Access Provider siguientes:

v 5769-AC1 Cryptographic Access Provider de 40 bits v 5769-AC2 Cryptographic Access Provider de 56 bits v 5769-AC3 Cryptographic Access Provider de 128 bits

También debe asegurarse de que puede acceder a un certificado digital, o bien crear uno, en el sistema. Si desea obtener más información sobre la gestión de certificados digitales de AS/400 e Internet, consulte la guía de iniciación de IBM Digital Certificate Manager.

Para obtener más información sobre la seguridad de AS/400 en general, consulte la guía de iniciación de Firewall.

[ Página de presentación de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Cryptographic Access Providers

Los programas Cryptographic Access Provider ofrecen innumerables suites de cifrado al sistema. Una suite de cifrado es una combinación de distintas funciones de seguridad. En esta lista se indica cuáles son las suites de cifrado que ofrece cada programa Cryptographic Access Provider:

5769-AC1 Cryptographic Access Provider de 40 bits

SSL_RSA_WITH_NULL_MD5 SSL_RSA_WITH_NULL_SHA

SSL_RSA_EXPORT_WITH_RC4_40_MD5 SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5

5769-AC2 Cryptographic Access Provider de 56 bits

SSL_RSA_WITH_NULL_MD5 SSL_RSA_WITH_NULL_SHA SSL_RSA_WITH_DES_CBC_SHA SSL_RSA_WITH_DES_CBC_MD5 SSL_RSA_EXPORT_WITH_RC4_40_MD5 SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5

5769-AC3 Cryptographic Access Provider de 128 bits

SSL_RSA_WITH_NULL_MD5 SSL_RSA_WITH_NULL_SHA SSL_RSA_EXPORT_WITH_RC4_40_MD5 SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5 SSL_RSA_WITH_RC4_128_SHA SSL_RSA_WITH_DES_CBC_SHA

SSL_RSA_WITH_3DES_EDE_CBC_SHA SSL_RSA_WITH_RC4_128_MD5

SSL_RSA_WITH_RC2_CBC_128_MD5 SSL_RSA_WITH_DES_CBC_MD5 SSL_RSA_WITH_3DES_EDE_CBC_MD5

Según el país en que se encuentre, es posible que el número de programas Cryptographic Access Provider de entre los que puede elegir sea más limitado. Una vez cargado un programa Cryptographic Access Provider, se puede utilizar cualquiera de las suites de cifrado que ofrece.

[ Página de presentación de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Elección de un certificado digital

A la hora de decidir cuál es el certificado digital que va a utilizar, debe tomar en consideración diversos factores. Se puede utilizar el certificado por omisión del sistema o bien especificar otro certificado.

Interesa utilizar el certificado por omisión del sistema si:

v No existe ningún requisito específico de seguridad para la aplicación Java. v Se desconoce el tipo de seguridad que se necesita para la aplicación Java. v El certificado por omisión del sistema cumple los requisitos de seguridad de la

aplicación Java.

Nota:si decide que desea utilizar el certificado por omisión del sistema, consulte con el administrador del sistema para asegurarse de que se ha creado un

certificado por omisión del sistema. Para obtener más información acerca de la gestión de certificados digitales, consulte la Guía de iniciación de IBM Digital Certificate Manager.

Si no desea utilizar el certificado por omisión del sistema, tendrá que elegir otro certificado. Puede optar por dos tipos de certificados:

v Un certificado de usuario, que identifica al usuario de la aplicación. v Un certificado de sistema, que identifica al sistema en el que se ejecuta la

aplicación.

Las cuestiones planteadas a continuación pueden servirle de ayuda a la hora de decidirse por un certificado de usuario o uno de sistema:

v ¿Cómo se ejecuta la aplicación Java, como cliente o como servidor?

– Si se ejecuta como cliente, probablemente le interese utilizar un certificado de usuario.

– Si se ejecuta como servidor, probablemente le interese utilizar un certificado de sistema.

v ¿A quién desea que identifique el servidor, al usuario que trabaja con la aplicación o al sistema en el que se ejecuta la misma?

– Si desea que identifique al usuario que trabaja con la aplicación, le interesa utilizar un certificado de usuario.

– Si desea que identifique al sistema en el que se ejecuta la aplicación, le interesa utilizar un certificado de sistema.

Una vez que sepa cuál es el tipo de certificado que necesita, podrá elegir

cualquiera de los certificados digitales que haya en cualquiera de los contenedores de certificados a los que pueda acceder.

[ Página de presentación de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Utilización del certificado digital al ejecutar la aplicación Java

Para utilizar SSL, es necesario ejecutar la aplicación Java con un certificado digital.

Para especificar el certificado digital que debe utilizarse, utilice las siguientes propiedades:

v -os400.certificateContainer v -os400.certificateLabel

Por ejemplo, si desea ejecutar la aplicación Java MyClass.class utilizando el certificado digital MYCERTIFICATE, y MYCERTIFICATE se encuentra en el contenedor de certificados digitales YOURDCC, el mandato java será el siguiente: java -os400.certificateContainer=YOURDCC

-os400.certificateLabel=MYCERTIFICATE MyClass

Si todavía no se ha decidido por un certificado digital, consulte el apartado Decidir cuál es el certificado digital que va a utilizarse. También puede decidir utilizar el certificado por omisión del sistema, que está almacenado en el contenedor de certificados por omisión del sistema.

Para utilizar el certificado digital por omisión del sistema, no es necesario que especifique ningún certificado ni ningún contenedor de certificados en ninguna parte. La aplicación Java utilizará el certificado digital por omisión del sistema de forma automática.

Siga leyendo para obtener más información sobre los siguientes temas:

v Certificados digitales y la propiedad -os400.certificateLabel (página “Certificados digitales y la propiedad -os400.certificateLabel”)

v Contenedores de certificados digitales y la propiedad -os400.certificateContainer (página “Contenedores de certificados digitales y la propiedad

-os400.certificateContainer” en la página 176)

Si desea obtener más información sobre la gestión de certificados digitales de AS/400 e Internet, consulte la guía de iniciación de IBM Digital Certificate Manager.

Certificados digitales y la propiedad -os400.certificateLabel

Los certificados digitales son un estándar de Internet para identificar aplicaciones, usuarios y sistemas seguros. Los certificados digitales se almacenan en

contenedores de certificados digitales. Si desea utilizar el certificado por omisión de un contenedor de certificados digitales, no es necesario que especifique una etiqueta de certificado. Si desea utilizar un certificado digital determinado, es necesario que especifique la etiqueta de dicho certificado en el mandato java utilizando esta propiedad:

-os400.certificateLabel=

Por ejemplo, si el nombre del certificado que desea utilizar es MYCERTIFICATE, el mandato java especificado será el siguiente:

En este ejemplo, la aplicación Java MyClass utilizará el certificado

MYCERTIFICATE. MYCERTIFICATE deberá estar en el contenedor de certificados por omisión del sistema para que MyClass pueda utilizarlo.

Contenedores de certificados digitales y la propiedad

-os400.certificateContainer

Los contenedores de certificados digitales almacenan certificados digitales. Si desea utilizar el contenedor de certificados por omisión del sistema AS/400, no es necesario que especifique un contenedor de certificados. Si desea utilizar un contenedor de certificados digitales determinado, es necesario que especifique dicho contenedor de certificados digitales en el mandato java utilizando esta propiedad:

-os400.certificateContainer=

Por ejemplo, si el nombre del contenedor de certificados que contiene el certificado digital que desea utilizar se denomina MYDCC, el mandato java que debería entrar sería:

java -os400.certificateContainer=MYDCC MyClass

En este ejemplo, la aplicación Java llamada MyClass.class se ejecutaría en el sistema utilizando el certificado digital por omisión que se halla en el contenedor de certificados digitales llamado MYDCC. Los sockets creados en la aplicación utilizarán el certificado por omisión de MYDCC para identificarse y hacer que las comunicaciones sean seguras.

Si deseara utilizar el certificado digital MYCERTIFICATE en el contenedor de certificados digitales, el mandato java especificado sería el siguiente:

java -os400.certificateContainer=MYDCC

-os400.certificateLabel=MYCERTIFICATE MyClass

[ Página de presentación de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Modificación del código Java para utilizar fábricas de sockets

Para utilizar SSL con el código existente, primero debe modificar éste para que utilice las fábricas de sockets.

Para modificar el código para que utilice fábricas de sockets:

1. Añada la línea siguiente al programa con el fin de importar la clase SocketFactory:

import javax.net.*;

2. Añada una línea que declare una instancia de un objeto SocketFactory. Por ejemplo:

SocketFactory socketFactory

3. Inicialice la instancia de SocketFactory definiéndola como igual al método SocketFactory.getDefault(). Por ejemplo:

socketFactory = SocketFactory.getDefault();

v La declaración completa de SocketFactory debe ser así:

SocketFactory socketFactory = SocketFactory.getDefault();

4. Inicialice los sockets existentes. Llame al método SocketFactory

createSocket(sistpral,puerto) en la fábrica de sockets para cada socket que declare.

Las declaraciones de sockets deben ser así:

Socket s = socketFactory.createSocket(host,port);

s es el socket que se crea.

socketFactory es la instancia de SocketFactory creada en el paso 2.

host es una variable de tipo serie que representa el nombre de un servidor de sistema principal.

port es una variable de tipo entero que representa el número de puerto de la conexión por socket.

Una vez realizados todos los pasos anteriores, el código utilizará fábricas de sockets. No es necesario efectuar ningún otro cambio en el código. Todos los métodos a los que se llama y la sintaxis con sockets seguirán funcionando.

En Ejemplos: modificar el código Java para que utilice fábricas de sockets de servidor hallará un ejemplo de programa cliente convertido para que utilice fábricas de sockets.

En el apartado Ejemplos: modificación del código Java para utilizar fábricas de sockets de cliente hallará un ejemplo de programa cliente convertido para que utilice fábricas de sockets.

[ Página de presentación de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos: modificación del código Java para utilizar fábricas de

sockets de servidor

Los ejemplos dados a continuación muestran la manera en que se puede modificar una clase de socket sencilla llamada simpleSocketServer de forma que utilice fábricas de sockets para crear todos los sockets. El primer ejemplo muestra la clase simpleSocketServer sin fábricas de sockets. El segundo ejemplo muestra la clase simpleSocketServer con fábricas de sockets. En el segundo ejemplo,

simpleSocketServer cambia de nombre y pasa a llamarse factorySocketServer.

Ejemplo 1:programa Socket Server sin fábricas de sockets

/* Archivo simpleSocketServer.java*/ import java.net.*;

import java.io.*;

public class simpleSocketServer {

public static void main (String args[]) throws IOException { int serverPort = 3000;

if (args.length < 1) {

System.out.println(“java simpleSocketServer serverPort”);

System.out.println(“Defaulting to port 3000 since serverPort not specified.”); }

else

serverPort = new Integer(args[0]).intValue();

System.out.println(“Establishing server socket at port ” + serverPort); ServerSocket serverSocket =

new ServerSocket(serverPort);

// un servidor real manejaría más de un único cliente así... Socket s = serverSocket.accept();

BufferedInputStream is = new BufferedInputStream(s.getInputStream()); BufferedOutputStream os = new BufferedOutputStream(s.getOutputStream()); // Este servidor tan sólo se hace eco de lo que se le envía...

byte buffer[] = new byte[4096]; int bytesRead;

// se realiza la operación read hasta que se devuelve “eof” while ((bytesRead = is.read(buffer)) > 0) {

os.flush(); // se vacía el almacenamiento intermedio de salida }

s.close();

serverSocket.close(); } // fin de main()

} // fin de la definición de clase

Ejemplo 2:programa Simple Socket Server con fábricas de sockets

/* Archivo factorySocketServer.java */

// es necesario importar javax.net para tomar la clase ServerSocketFactory import javax.net.*;

import java.net.*; import java.io.*;

public class factorySocketServer {

public static void main (String args[]) throws IOException { int serverPort = 3000;

if (args.length < 1) {

System.out.println(“java simpleSocketServer serverPort”);

System.out.println(“Defaulting to port 3000 since serverPort not specified.”); }

else

serverPort = new Integer(args[0]).intValue();

System.out.println(“Establishing server socket at port ” + serverPort); // Se cambia la clase simpleSocketServer original para que utilice // ServerSocketFactory con el fin de crear sockets de servidor. ServerSocketFactory serverSocketFactory =

ServerSocketFactory.getDefault();

// Ahora, la fábrica ha de crear el socket de servidor. Es // el último cambio que se realiza en el programa original. ServerSocket serverSocket =

serverSocketFactory.createServerSocket(serverPort); // un servidor real manejaría más de un único cliente así... Socket s = serverSocket.accept();

BufferedInputStream is = new BufferedInputStream(s.getInputStream()); BufferedOutputStream os = new BufferedOutputStream(s.getOutputStream()); // Este servidor tan sólo se hace eco de lo que se le envía...

byte buffer[] = new byte[4096]; int bytesRead;

while ((bytesRead = is.read(buffer)) > 0) { os.write(buffer, 0, bytesRead); os.flush(); } s.close(); serverSocket.close(); } }

Para obtener información previa, consulte el apartado Modificación del código para utilizar fábricas de sockets.

[ Página de presentación de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Ejemplos: modificación del código Java para utilizar fábricas de

sockets de cliente

Los ejemplos dados a continuación muestran la manera en que se puede modificar una clase de socket sencilla llamada simpleSocketClient de forma que utilice fábricas de sockets para crear todos los sockets. El primer ejemplo muestra la clase simpleSocketClient sin fábricas de sockets. El segundo ejemplo muestra la clase simpleSocketClient con fábricas de sockets. En el segundo ejemplo,

/* Programa Simple Socket Client */ import java.net.*;

import java.io.*;

public class simpleSocketClient {

public static void main (String args[]) throws IOException { int serverPort = 3000;

if (args.length < 1) {

System.out.println(“java simpleSocketClient serverHost serverPort”); System.out.println(“serverPort defaults to 3000 if not specified.”); return;

}

if (args.length == 2)

serverPort = new Integer(args[1]).intValue();

System.out.println(“Connecting to host ” + args[0] + “ at port ” + serverPort);

// Se crea el socket y se conecta con el servidor. Socket s = new Socket(args[0], serverPort); .

. .

// El resto del programa sigue a partir de aquí.

Ejemplo 2:programa Simple Socket Client con fábricas de sockets

/* Programa Simple Socket Factory Client */

// Observe que se importa javax.net.* para tomar la clase SocketFactory. import javax.net.*;

import java.net.*; import java.io.*;

public class factorySocketClient {

public static void main (String args[]) throws IOException { int serverPort = 3000;

if (args.length < 1) {

System.out.println(“java factorySocketClient serverHost serverPort”); System.out.println(“serverPort defaults to 3000 if not specified.”); return;

}

if (args.length == 2)

serverPort = new Integer(args[1]).intValue();

System.out.println(“Connecting to host ” + args[0] + “ at port ” + serverPort);

// Se cambia el programa simpleSocketClient original para crear una // fábrica de sockets y utilizar ésta para crear sockets.

SocketFactory socketFactory = SocketFactory.getDefault(); // Ahora la fábrica crea el socket. Es el último cambio // que se realiza en el programa simpleSocketClient original. Socket s = socketFactory.createSocket(args[0], serverPort); .

. .

// El resto del programa sigue a partir de aquí.

Para obtener información previa, consulte el apartado Modificación del código para utilizar fábricas de sockets.

[ Página de presentación de Information Center | Comentarios ]

[ Legal | Glosario de AS/400 ]

Modificación del código Java para utilizar la capa de sockets

seguros

Si el código utiliza fábricas de sockets para crear los sockets, puede añadir al programa el soporte SSL. Si el código no utiliza fábricas de sockets, consulte Modificar el código Java para que utilice fábricas de sockets.

Para modificar el código para que utilice SSL: