Meilleures pratiques concernant les droits d'accès de sécurité de l'API JavaMail

Dans la plupart de ses activités, l'API JavaMail doit accéder à certains fichiers de configuration. Les packages binaires JavaMail et JavaBeans Activation Framework contiennent déjà les fichiers de configuration nécessaires. Toutefois, l'API JavaMail permet à l'utilisateur de définir des fichiers de configuration personnalisés et spécifiques de l'installation afin de satisfaire des besoins spéciaux.

Ces fichiers de configuration peuvent être placés dans deux répertoires : <user.home> et <java.home>/lib. Ainsi, si elle doit accéder à un fichier appelé mailcap lors de l'envoi d'un message, l'API :
  1. essaiera d'accéder à <user.home>/mailcap
  2. si la première tentative échoue pour des raisons de droits d'accès insuffisants ou parce que le fichier n'existe pas, l'API fera une recherche dans <java.home>/lib/mailcap
  3. en cas d'échec de la deuxième tentative, l'API fera une recherche dans META-INF/mailcap sur le chemin des classes. A cette adresse se trouvent les fichiers de configuration contenus dans les fichiers mail-impl.jar et activation-impl.jar.
WebSphere Application Server utilise les fichiers de configuration de l'API JavaMail contenus dans les fichiers mail-impl.jar et activation-impl.jar et il ne place aucun fichier de configuration de messagerie dans <user.home> et <java.home>/lib. Pour garantir le bon fonctionnement de l'API JavaMail, WebSphere Application Server octroie à toutes les applications installées des droits de lecture sur les fichiers mail-impl.jar et activation-impl.jar.
Le code de JavaMail tente d'accéder aux fichiers de configuration files présents dans <user.home> et <java.home>/lib, ce qui peut faire lever une exception de contrôle d'accès, puisque par défaut la configuration n'accorde pas de droits de lecture sur les fichiers situés à ces deux emplacements. Cette activité n'affecte pas le fonctionnement de l'API JavaMail, mais peut se traduire par un encombrement du journal système avec un grand nombre d'exceptions de sécurité liée à la messagerie, qui peuvent avoir le fâcheux inconvénient d'éclipser d'autres messages d'erreurs bien plus nuisibles, elles. Voici un exemple de message de sécurité, SECJ0314W :
[02/31/08 12:55:38:188 PDT] 00000058 SecurityManag W   SECJ0314W: Current Java 2 Security policy reported a 
potential violation of Java 2 Security Permission. 
Pour plus d'informations, reportez-vous au guide d'identification des incidents.

Droit d'accès :

      D:\o063919\java\jre\lib\javamail.providers : access denied (java.io.FilePermission 
D:\o063919\java\jre\lib\javamail.providers read)


Code :

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



Trace de pile :

java.security.AccessControlException: accès refusé (java.io.FilePermission D:\o063919\java\jre\lib\javamail.providers read)
	sur java.security.AccessControlContext.checkPermission(AccessControlContext.java(Compiled Code))
	sur java.security.AccessController.checkPermission(AccessController.java(Compiled Code))
	sur java.lang.SecurityManager.checkPermission(SecurityManager.java(Compiled Code))
	sur com.ibm.ws.security.core.SecurityManager.checkPermission(SecurityManager.java(Compiled Code))
	sur 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)
	sur javax.mail.Session.loadFile(Session.java:1004)
	sur javax.mail.Session.loadProviders(Session.java:861)
	at javax.mail.Session.<init>(Session.java:191)
	sur javax.mail.Session.getInstance(Session.java:213)
	sur com.ibm.ws.mail.SessionFactory.getObjectInstance(SessionFactory.java:67)
	sur javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:314)
	sur com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookupExt(Helpers.java:894)
	sur com.ibm.ws.naming.util.Helpers.processSerializedObjectForLookup(Helpers.java:701)
	sur com.ibm.ws.naming.jndicos.CNContextImpl.processResolveResults(CNContextImpl.java:1937)
	sur com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1792)
	sur com.ibm.ws.naming.jndicos.CNContextImpl.doLookup(CNContextImpl.java:1707)
	sur com.ibm.ws.naming.jndicos.CNContextImpl.lookupExt(CNContextImpl.java:1412)
	sur com.ibm.ws.naming.jndicos.CNContextImpl.lookup(CNContextImpl.java:1290)
	sur com.ibm.ws.naming.util.WsnInitCtx.lookup(WsnInitCtx.java:145)
	sur javax.naming.InitialContext.lookup(InitialContext.java:361)
	sur emailservice.com.onlinebank.bpel.EmailService20060907T224337EntityAbstractBase$JSE_6.execute(EmailService20060907T224337EntityAbstractBase.java:32)
	sur com.ibm.bpe.framework.ProcessBase6.executeJavaSnippet(ProcessBase6.java:256)
	sur emailservice.com.onlinebank.bpel.EmailService20060907T224337EntityBase.invokeSnippet(EmailService20060907T224337EntityBase.java:40)
Remarque : Si cette situation pose un problème, vous pouvez ajouter plus d'autorisations d'accès en lecture pour davantage d'emplacements. Elles devraient éliminer la plupart ou la totalité des exceptions de sécurité liées à JavaMail dans le fichier journal.
Les droits requis par JavaMail sont les suivants :
grant codeBase "file:${application}" {
  // Autorise l'accès aux fichiers de configuration par défaut
  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";
  // En cas d'utilisation d'un fournisseur de messagerie isolé, 
  // ajoute des droits de lecture de fichier supplémentaires pour chaque fichier JAR défini
  // pour le fournisseur de messagerie isolé
  permission java.io.FilePermission "path${/}mail.jar, "read";
  
  // Autorise la connexion au serveur de messagerie avec SMTP
  permission java.net.SocketPermission "*:25", "connect,resolve";
  // Autorise la connexion au serveur de messagerie avec SMTPS
  permission java.net.SocketPermission "*:465", "connect,resolve";
  
  // Autorise la connexion au serveur de messagerie avec IMAP
  permission java.net.SocketPermission "*:143", "connect,resolve";
  // Autorise la connexion au serveur de messagerie avec IMAPS
  permission java.net.SocketPermission "*:993", "connect,resolve";
  
  // Autorise la connexion au serveur de messagerie avec POP3
  permission java.net.SocketPermission "*:110", "connect,resolve";
  // Autorise la connexion au serveur de messagerie avec POP3S
  permission java.net.SocketPermission "*:995", "connect,resolve";
  
  // Autorise l'utilisation de System.getProperties()
  permission java.util.PropertyPermission "*", "read,write";
  // Sinon, utilise le droit suivant pour autoriser la lecture des propriétés système
  permission java.util.PropertyPermission "*", "read";
};

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rmai_security
Nom du fichier : rmai_security.html