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:
- Die API versucht, auf <user.home>/mailcap zuzugreifen.
- 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.
- 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.
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";
};