当前位置: 首页 > 面试题库 >

Domino Agent使用/ jvm / lib / ext中的第三方jar挣扎于Java安全性

金泉
2023-03-14
问题内容

我遇到了Java安全问题。我有一个使用pdfbox-1.7.1.jar解密我知道密码的PDF的代理。该jar已放置在服务器和我的客户机上的/ jvm /
lib / ext中,这使我对堆栈跟踪有了一点点的了解:

java.lang.SecurityException
at java.lang.SecurityManager.checkPermission(SecurityManager.java:582)
at COM.ibm.JEmpower.applet.AppletSecurity.checkSecurityPermission(AppletSecurity.java:1332)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1613)
at COM.ibm.JEmpower.applet.AppletSecurity.checkPermission(AppletSecurity.java:1464)
at java.lang.SecurityManager.checkSecurityAccess(SecurityManager.java:1725)
at java.security.Security.insertProviderAt(Security.java:190)
at java.security.Security.addProvider(Security.java:210)
at org.apache.pdfbox.pdmodel.encryption.SecurityHandlersManager.getInstance(SecurityHandlersManager.java:146)
at org.apache.pdfbox.pdmodel.PDDocument.openProtection(PDDocument.java:1365)
at org.apache.pdfbox.pdmodel.PDDocument.decrypt(PDDocument.java:798)
at com.magerman.hremail.prep1docc.PDFDecryptor.decrypt(Unknown Source)
at com.magerman.hremail.prep1docc.MetaAttachment.decrypt(Unknown Source)
at com.magerman.hremail.prep1docc.MetaDocContainingAttachments.removePasswordOfPDFAttachments(Unknown Source)
at com.magerman.hremail.prep1docc.EPDFPreparerFactory.generateAttachmentsTriggerDocs(Unknown Source)
at com.magerman.hremail.prep1docc.EPDFPreparerFactory.run(Unknown Source)
at com.magerman.hremail.prep1docc.BaseClass.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)

客户端和服务器都使用8.5.3。代理安全级别设置为3。将jar放入代理本身无济于事。代理的签名者是服务器上的完全管理员。安全异常似乎指向“
insertProviderAt”

这是我尝试的:

推杆

grant {
permission java.security.AllPermission;
}

解决了我的问题,但我永远都无法摆脱鹰眼的管理员。

我试图缩小仅数据库的权限范围,但此处的文档:http
:
//docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html并未真正告诉我如何输入注释数据库。

我在这里查看了Stephan Wissel关于Xpages
Java安全性的文章:http :
//www.wissel.net/blog/d6plinks/SHWL-8JYAT5,并将以下内容插入了我的/jvm/lib/security/java.policy文件中:

grant codeBase "xspnsf://server:0/development/hre-mail/hre-mail2_0/hre-mail_(2_0)_dev.nsf/-" { 
permission java.security.AllPermission;
};

但是那也不起作用,因为我的codeBase语法对nsf数据库无效,而对网页无效。

我还试图将Permission减少到真正需要的权限,并在此处查看文档:http
:
//docs.oracle.com/javase/1.4.2/docs/guide/security/permissions.html

暗示我必须做类似的事情

java.security.SecurityPermission "insertProvider.{name}"

但我不知道{name}应该是什么。

我还在http://lekkimworld.com/2013/06/20/java_in_notes_domino_explained_on_java_security_and_how_it_relates_to_notes_domino.html上阅读了米克尔的文章

但是我的大脑在页面中间炸了一下。特别是,我不确定如何实际实现此方法。你能握住我的手,然后引导我走吗?

我正在假设,只要我将新的jars放在/ jvm / lib / ext中,我所要做的就是

tell http restart

重新加载JVM?我假设Domino对Xpage,Agent和HTTP Task使用单个JVM,这是正确的。

另外,我是否需要重新启动服务器才能使java.policy中的任何新策略生效?

有任何想法吗?


问题答案:

感谢Richard,Simon,Mark Myers和giulio提出的问题。

我终于得到全面理解的Mikkel的文章(通过读取它 确实 慢)上:

http://lekkimworld.com/2013/06/20/java_in_notes_domino_explained_on_java_security_and_how_it_relates_to_notes_domino.html

解决方案比我想象的要容易,我对反射示例感到困惑。

比修改java.policy文件(我没有管理,顺便说一句),这是一种更为优雅的方法。

我通过添加新的方法dopriviledgeddecrypt()来修改正在创建麻烦的类,该类正在调用其crypto()方法,该方法是引发麻烦的方法的狡猾包装器。然后,我将所有调用者都修改为PDFDecryptor.decrypt(),以便他们调用PDFDecryptor.dopriviledgeddecrypt()。最后一步涉及将整个类导出到jar文件,然后将其放置在您正在开发的计算机上(在客户端中)和将运行此代码的所有服务器上的\
jvm \ lib \ ext文件夹中。

我也无法确定是否存在用于修改java.policy文件的语法,以使其仅影响单个Notes数据库。(更新:我现在知道这是不可能的)

package com.magerman.hremail.prep1docc;

public class PDFDecryptor {

/**
 * Instantiates a new pDF decryptor.
 * 
 * @param inputFile
 *            the input file
 * @param inputPassword
 *            the input password
 */
public PDFDecryptor(final File inputFile, final String inputPassword) {
originalFile = inputFile;
password = inputPassword;
}

/**
 * Decrypt. Given an inputted PDF File, will try to remove the security of
 * the PDF and save in-place. Done after the attachments have been extracted
 */
public final void decrypt() {
// naughty code here
}


public final void doproviledgeddecrypt() throws Exception {
AccessController.doPrivileged(new PrivilegedExceptionAction() {
    public Object run() throws Exception {
    PDFDecryptor.this.decrypt();
    return null;
    }
});
}

}


 类似资料:
  • 如有任何帮助,将不胜感激。 谢谢-杰克

  • 我正在努力和Chromium正在构建并崩溃我的计算机,因为这是一个持续数天的过程。 但是,我不能把在之后,因为它将不可访问,如果我将它放在之前,则内容字符串将变得过时。 我该如何解决这个问题?

  • 在使用Eclipse导出JAR时,这似乎是一个常见问题。现在,我的背景。 我正在尝试编写用于Unity应用程序的Java插件。当我做了一个没有外部库的简单插件(除了classes.jar,这样我就可以调用UnityPlayerPractivity)时,它运行得非常好。“现在,让我们使用一些UTIL库”。所以我编写了一个插件,它使用Jackson库解析和处理JSON数据,这样我就可以将其序列化为Ja

  • 我一直试图通过示例来学习xcode和swift,我已经尝试了我搜索的大量示例,但所有这些示例都以这样或那样的方式失败了...通常是错误的swift版本或语法。我想做一个非常简单的应用程序,对我的个人气象站进行api调用,并将json数据打印到我的single view应用程序上的文本框或框架中。我想学习的细节和介绍,我走。我想完善的故事板和视图,因为我学习新的概念。 https://api.wea

  • 有时我尝试在EJB-JAR中添加第三方库。到目前为止,在我看来,这是不可能的,但我不确定,为什么不可能。 oracle站点本身显示了EJB-JAR的以下打包:EJB打包,它不像war那样有自己的lib目录。我已经尝试将libary放在根目录中(使用eclipse+JBoss7)。我的第一个问题是,是否可以在EJB-JAR中添加额外的libarie,就像在WAR文件中一样?这让我感到困惑,因为可以将

  • 我从其他团队收到了一个jar文件,需要在AEM中使用。我不能在AEM中直接使用jar,所以我在链接的帮助下将jar转换为捆绑包。”https://helpx.adobe.com/experience-manager/kb/ConvertAJarIntoOsgiBundle.html“,现在我的bundle已经准备好,并通过felix控制台上传到AEM中。bundle处于活动状态。现在我需要使用bu