2013-10-03 68 views
4

我遇到了一個Java的安全問題。我有一個代理使用pdfbox-1.7.1.jar來解密我知道的密碼的PDF。罐子已經擺在/ JVM/lib/ext目錄服務器和我的客戶機上,我得到一個堆棧跟蹤的這個小美女:Domino代理使用第三方罐子Java安全奮力/ 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 把罐子在代理本身並不能幫助。 代理的簽名者是服務器上的完整的管理。 安全異常,似乎在「insertProviderAt」

指出這是我的嘗試:

grant { 
permission java.security.AllPermission; 
} 

解決我的問題,但我絕不會得到這個過去我眼尖的管理。

我試圖降低許可的範圍僅僅是數據庫,但這裏的文檔:http://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html並沒有真正告訴我如何輸入Notes數據庫。

我看着斯蒂芬使用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數據庫無效,但僅對網頁有效。

我也在努力減少權限到這是真正需要,並着眼於文檔的位置:http://docs.oracle.com/javase/1.4.2/docs/guide/security/permissions.html

意味着我必須做一些像

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

但我沒有了解{name}應該是什麼。

我也讀了Mikkel對http://lekkimworld.com/2013/06/20/java_in_notes_domino_explained_on_java_security_and_how_it_relates_to_notes_domino.html

文章,但我的大腦在大約頁面的中間炒。特別是,我不確定如何實際執行此方法。你能握住我的手,讓我走開嗎?

雖然我吧,我是對的假設,每當我提出了新的jar包/ JVM/lib/ext目錄,所有我需要做的是一個

tell http restart 

有JVM重裝?我假設的Domino是使用XPages中,代理單個JVM和HTTP任務,這是正確的。

而且,我是正確的,我需要重新啓動在的java.policy任何新政策,該服務器是有效的?

任何想法?

+1

什麼是實際的安全異常失敗?你的代理有什麼安全級別?在最後的xspnsf部分,你是否嘗試將瓶子移入NSF?什麼版本的Domino? –

+0

重申您的最後一個假設:Web代理(即執行的webQueryOpen,webQueryOpen或?OpenAgent)在HTTP任務的JVM中運行。計劃和觸發的代理在AMGR任務的單獨JVM中運行。我還沒有完成xpages工作,所以我不確定他們是否與Web代理共享相同的JVM。 –

+0

@理查德 - 這對我來說是新的,謝謝。那麼至少有2個,也許3個JVM在運行,並且安全設置適用於所有這些JVM?另外,當告訴http重新啓動JVM(s)時,對於小我來說更令人困惑。 –

回答

3

感謝Richard,西蒙,馬克·邁爾斯和朱利奧的看問題。

我終於得到全面理解的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文件(我沒有管理,btw)更優雅的方式。

我改性這是創建的麻煩時,我通過加入一種新的方法dopriviledgeddecrypt(),它是圍繞這是造成麻煩的方法的狡猾包裝調用其解密()方法的類。然後,我將所有調用者修改爲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; 
    } 
}); 
} 

} 
+0

」grant codeBase「xspnsf:...」會影響單個指定的數據庫。只適用於更高版本。 –

+0

西蒙,這個設置適用於xpages,但不是普通的香草筆記數據庫。至少這是我在測試時發現的。 –