Procedimientos recomendados sobre permisos de seguridad de API JavaMail

En muchas de sus actividades, la API JavaMail tiene que acceder a determinados archivos de configuración. Los propios paquetes binarios JavaBeans y JavaMail Activation Framework (infraestructura de activación) contienen los archivos de configuración necesarios. No obstante, la API JavaMail permite al usuario definir archivos de configuración específicos del usuario y de la instalación para que cumplan requisitos especiales.

Las dos ubicaciones en las que puede colocar estos archivos de configuración son los directorios <user.home> y <java.home>/lib. Por ejemplo, si la API JavaMail debe acceder a un archivo denominado mailcap cuando envía un mensaje, la API:
  1. Intenta acceder al directorio <user.home>/mailcap.
  2. Si el primer intento falla debido a la falta del permiso de seguridad o a que el archivo no existe, la API busca en el directorio <java.home>/lib/mailcap.
  3. Si el segundo intento también falla, la API busca en la ubicación META-INF/mailcap de la vía de acceso a clases. Esta ubicación en realidad lleva a los archivos de configuración contenidos en los archivos mail-impl.jar y activation-impl.jar.
El servidor de aplicaciones utiliza archivos de configuración de API JavaMail contenidos en los archivos mail-impl.jar y activation-impl.jar, y no existen archivos de configuración de correo en los directorios <user.home> y <java.home>/lib. Para garantizar un correcto funcionamiento de la API JavaMail, el servidor de aplicaciones otorgan permiso de lectura de archivos para los archivos mail-impl.jar y activation-impl.jar a todas las aplicaciones instaladas.
El código JavaMail intenta acceder a los archivos de configuración de los directorios <user.home> y <java.home>/lib, lo que puede dar lugar a la emisión de una excepción de control de acceso, ya que la configuración predeterminada no otorga permiso de lectura de archivos para estas dos ubicaciones de forma predeterminada. Esta actividad no afecta al correcto funcionamiento de la API JavaMail, pero es posible que se muestren muchas excepciones relacionadas con la seguridad del correo en el registro del sistema, y estos errores podrían eclipsar errores graves que esté buscando. A continuación se muestra un ejemplo de mensaje de seguridad, SECJ0314W:
[02/31/08 12:55:38:188 PDT] 00000058 SecurityManag W   SECJ0314W: La política de seguridad actual Java 2 ha informado de una
posible violación del permiso de seguridad de Java 2. 
Consulte la guía de determinación de problemas para
obtener más información.

Permiso:

      D:\o063919\java\jre\lib\javamail.providers : acceso denegado (java.io.FilePermission 
D:\o063919\java\jre\lib\javamail.providers lectura)


Código:

     com.ibm.ws.mail.SessionFactory  en  {file:/D:/o063919/lib/runtime.jar}



Rastreo de pila:

java.security.AccessControlException: access denied (java.io.FilePermission D:\o063919\java\jre\lib\javamail.providers read)
		at java.security.AccessControlContext.checkPermission(AccessControlContext.java(Compiled Code))
		at java.security.AccessController.checkPermission(AccessController.java(Compiled Code))
		at java.lang.SecurityManager.checkPermission(SecurityManager.java(Compiled Code))
		at com.ibm.ws.security.core.SecurityManager.checkPermission(SecurityManager.java(Compiled Code))
		at java.lang.SecurityManager.checkRead(SecurityManager.java(Compiled Code))
		at java.io.FileInputStream.<init>(FileInputStream.java(Compiled Code))
		at java.io.FileInputStream.<init>(FileInputStream.java:89)
		at javax.mail.Session.loadFile(Session.java:1004)
		at javax.mail.Session.loadProviders(Session.java:861)
		at javax.mail.Session.<init>(Session.java:191)
		at javax.mail.Session.getInstance(Session.java:213)
		at com.ibm.ws.mail.SessionFactory.getObjectInstance(SessionFactory.java:67)
		at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:314)
		at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:894)
		at com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookup(Helpers.java:701)
		at com.ibm.ws.naming.jndicos.CNContextImpl.processResolveResults(CNContextImpl.java:1937)
		at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1792)
		at com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1707)
		at com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1412)
		at com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1290)
		at com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:145)
		at javax.naming.InitialContext.lookup(InitialContext.java:361)
		at emailservice.com.onlinebank.bpel.EmailService20060907T224337EntityAbstractBase$JSE_6.
execute(EmailService20060907T224337EntityAbstractBase.java:32)
		at com.ibm.bpe.framework.ProcessBase6.executeJavaSnippet(ProcessBase6.java:256)
	at emailservice.com.onlinebank.bpel.EmailService20060907T224337EntityBase.invokeSnippet
(EmailService20060907T224337EntityBase.java:40)
Nota: Si esta situación es un problema, puede añadir más permisos de acceso de lectura para más ubicaciones. Así se eliminaría del archivo de anotación cronológica la mayoría (si no todas) de las excepciones de seguridad inocuas relacionadas con JavaMail.
JavaMail necesita los permisos siguientes:
grant codeBase "file:${application}" {
  // Permitir el acceso a los archivos de configuración predeterminados
  permission java.io.FilePermission "${java.home}${/}jre${/}lib${/}javamail.address.map", "read";
  permission java.io.FilePermission "${java.home}${/}jre${/}lib${/}javamail.providers", "read";
  permission java.io.FilePermission "${java.home}${/}jre${/}lib${/}mailcap", "read";
  permission java.io.FilePermission "${java.home}${/}lib${/}javamail.address.map", "read";
  permission java.io.FilePermission "${java.home}${/}lib${/}javamail.providers", "read";
  permission java.io.FilePermission "${java.home}${/}lib${/}mailcap",  "read";
  permission java.io.FilePermission  "${user.home}${/}.mailcap", "read";
  permission java.io.FilePermission "${was.install.root}${/}lib${/}activation-impl.jar", "read";
  permission java.io.FilePermission "${was.install.root}${/}lib${/}mail-impl.jar", "read";
  permission java.io.FilePermission "${was.install.root}${/}plugins${/}com.ibm.ws.prereq.javamail.jar", "read";
  // Si se utiliza un proveedor de correo aislado, 
  // añada más permisos de lectura de archivo para cada jar definido
  // para el proveedor de correo aislado
  // permission java.io.FilePermission "path${/}mail.jar, "read";
  
  // Permitir conexión a servidor de correo con SMTP
  permission java.net.SocketPermission "*:25", "connect,resolve";
  // Permitir conexión a servidor de correo con SMTPS
  permission java.net.SocketPermission "*:465", "connect,resolve";
  
  // Permitir conexión a servidor de correo con IMAP
  permission java.net.SocketPermission "*:143", "connect,resolve";
  // Permitir conexión a servidor de correo con IMAPS
  permission java.net.SocketPermission "*:993", "connect,resolve";
  
  // Permitir conexión a servidor de correo con POP3
  permission java.net.SocketPermission "*:110", "connect,resolve";
  // Permitir conexión a servidor de correo con POP3S
  permission java.net.SocketPermission "*:995", "connect,resolve";
  
  // Permitir utilización de System.getProperties()
  // permission java.util.PropertyPermission "*", "read,write";
  // En caso contrario, utilice esto para permitir la lectura de las propiedades del sistema
  permission java.util.PropertyPermission "*", "read";
};

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rmai_security
File name: rmai_security.html