Empfohlene Methoden für Sicherheitsberechtigungen der JavaMail-API

Die JavaMail-API muss bei vielen ihrer Aktivitäten auf bestimmte Konfigurationsdateien zugreifen. Die Binärpakete von JavaMail und JavaBeans Activation Framework enthalten bereits die erforderlichen Konfigurationsdateien. Die API JavaMail ermöglicht dem Benutzer, benutzerspezifische und installationsspezifische Konfigurationsdateien zu definieren, um besondere Voraussetzungen zu erfüllen.

Die beiden Positionen, an die Sie diese Konfigurationsdateien kopieren können, sind die Verzeichnisse <user.home> und <java.home>/lib. Wenn die JavaMail-API beispielsweise auf eine Datei mit dem Namen "mailcap" zugreifen muss, wenn sie eine Nachricht sendet, ist der Ablauf wie folgt:
  1. Die API versucht, auf <user.home>/mailcap zuzugreifen.
  2. Schlägt der erste Versuch fehl, weil die Sicherheitsberechtigung nicht ausreicht oder die Datei nicht vorhanden ist, setzt die API die Suche im Verzeichnis <java.home>/lib/mailcap fort.
  3. Falls auch der zweite Versuch scheitert, sucht die API an der Position META-INF/mailcap im Klassenpfad. Diese Position führt zu den Konfigurationsdateien, die in den Dateien "mail-impl.jar" und "activation-impl.jar" enthalten sind.
WebSphere Application Server verwendet die Konfigurationsdateien der JavaMail API, die in den Dateien "mail-impl.jar" und "activation-impl.jar" enthalten sind, und es sind keine Mailkonfigurationsdateien in den Verzeichnissen <user.home> und <java.home>/lib enthalten. Um die ordnungsgemäße Funktionsweise der JavaMail API zu gewährleisten, erteilt WebSphere Application Server allen installierten Anwendungen die Leseberechtigung für die Dateien "mail-impl.jar" und "activation-impl.jar".
Der JavaMail-Code versucht, auf die Konfigurationsdateien in <user.home> und <java.home>/lib zuzugreifen, was zum Auslösen einer Ausnahme in der Zugriffssteuerung führen kann, da in der Standardkonfiguration standardmäßig keine Dateileseberechtigung für diese beiden Positionen erteilt wird. Diese Aktivität beeinträchtigt nicht die Funktion der JavaMail API, führt jedoch möglicherweise dazu, dass eine große Menge an mailbezogenen Sicherheitsausnahmen im Systemprotokoll aufgezeichnet werden. Dadurch können schwer wiegende Fehler, nach denen Sie suchen, verdeckt werden. Im Folgenden sehen Sie ein Beispiel für die Sicherheitsnachricht SECJ0314W:
[02/31/08 12:55:38:188 PDT] 00000058 SecurityManag W   SECJ0314W: Die aktuelle Java-2-Sicherheitsrichtlinie hat eine potenzielle Zugriffsschutzverletzung in Bezug auf die Java-2-Sicherheitsberechtigungen gemeldet.
Weitere Informationen
können Sie der Veröffentlichung "Problem Determination Guide" entnehmen.

Permission:

      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  in  {file:/D:/o063919/lib/runtime.jar}



Stack Trace: 

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)
Anmerkung: Wenn diese Situation ein Problem für Sie darstellt, sollten Sie für weitere Positionen Lesezugriffsberechtigungen hinzufügen. Auf diese Weise werden die meisten, vielleicht sogar alle nicht schwer wiegenden Sicherheitsausnahmebedingungen von JavaMail aus der Protokolldatei entfernt.
Die folgenden Berechtigungen sind für JavaMail erforderlich:
grant codeBase "file:${application}" {
  // Zugriff auf Standardkonfigurationsdateien zulassen
  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";
  // Wenn Sie einen isolierten Mail-Provider verwenden, fügen
  // Sie zusätzliche Dateileseberechtigungen für jede definiert
  // JAR-Datei für den isolierten Mail-Provider hinzu.
  // permission java.io.FilePermission "path${/}mail.jar, "read";
  
  // Verbindung zum Mail-Server über SMTP zulassen
  permission java.net.SocketPermission "*:25", "connect,resolve";
  // Verbindung zum Mail-Server über SMTPS zulassen
  permission java.net.SocketPermission "*:465", "connect,resolve";
  
  // Verbindung zum Mail-Server über IMAP zulassen
  permission java.net.SocketPermission "*:143", "connect,resolve";
  // Verbindung zum Mail-Server über IMAPS zulassen
  permission java.net.SocketPermission "*:993", "connect,resolve";
  
  // Verbindung zum Mail-Server über POP3 zulassen
  permission java.net.SocketPermission "*:110", "connect,resolve";
  // Verbindung zum Mail-Server über POP3S zulassen
  permission java.net.SocketPermission "*:995", "connect,resolve";
  
  // Verwendung von System.getProperties() zulassen
  // permission java.util.PropertyPermission "*", "read,write";
  // Andernfalls die folgende Anweisung verwenden, um das Lesen
  // von Systemeigenschaften zuzulassen
  permission java.util.PropertyPermission "*", "read";
};

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rmai_security
Dateiname:rmai_security.html