2011-05-04 23 views
6

我在網站上有一個簽名的小程序。因此,將出現Java安全性對話框,並且用戶需要先授予該小程序權限,然後才能完成工作。我想要做的是這樣的:在運行我的小程序之前,我可以檢查Java applet證書是否受信任?

  • 我想要的網站解釋 安全對話框向用戶 它出現之前。頁面將顯示 在div中的一些說明文字, 並且幾秒鐘後,將出現安全對話框 。
  • 如果用戶已經在前一個會話中允許使用證書,則應該運行小程序 ,而不需要任何額外的 對話框。

問題是,只要applet嵌入到頁面中,安全對話框就會出現。我可以延遲嵌入,但是無法從applet本身檢查它的權限,因爲它需要在加載之前執行它。

也許我可以加載第二個不可見的普通小程序,並檢查權限。但是我怎麼去做呢?是否有任何Java類可以檢查證書是否已被客戶端信任?

謝謝。

+0

據我所知,java安全對話框僅在第一個applet啓動時出現。如果用戶選中始終信任證書的複選框 - 安全對話框將不再出現。但是,如果用戶選擇一次信任它 - 它會出現在下一次啓動中。並且出於安全原因,您無法以編程方式停止它。 – MockerTim 2011-05-05 07:39:10

回答

0

您可以通過編程方式檢查JAR文件的證書和簽名,就像加載小程序時的JVM一樣。它不會是容易的,但是,至少在乍看之下,你將不得不這樣做:

  1. 使用一個隱藏的小程序來下載JAR和驗證他們的證書,如將小程序查看器。您可以使用java.security.cert軟件包手動執行此操作。找出如何做到這一點的最佳方法是JarSigner source code,尤其是verifyJar()。喜歡的東西:

    // download the JAR 
    URL url = new URL("jar:http://mywebsite.com/myjar.jar!/"); 
    JarURLConnection jarConnection = (JarURLConnection)url.openConnection(); 
    // get the certificates and other security stuff 
    CodeSigners[] codeSigners = jarConnection.getJarEntry().getCodeSigners(); 
    Certificate[] certificates = jarConnection.getJarEntry().getCertificates(); 
    // verify the signatures 
    // don't know the code, but you can analyze JarSigner example at http://download.oracle.com/javase/tutorial/security/toolfilex/rstep2.html 
    
  2. 使用LiveConnect(?也許別的東西)來設置一個cookie,讓你知道「如果用戶已經允許在以前的會話證書」。

  3. 啓動您的applet,可能取決於(1)商店在(2)中創建的cookie中的結果。

我還沒有這麼多想過,所以可能會有更好的辦法。祝你好運,並回來!

+0

我以爲JarSigner只是用來簽署一個applet?我無法在源代碼中找到如何訪問最終用戶的可信證書。 我不太熟悉證書和密鑰庫的工作方式,甚至不知道密鑰庫究竟是什麼。當我自己爲我的applet簽名時,我在我的開發機器上創建了一個keystore,並運行JarSigner來簽名。當我在我的網站上部署小程序時,用戶選擇接受或拒絕權限請求。這只是一個應用程序設置,有點像'記住我的密碼'一樣嗎?或者它存儲在某個「密鑰庫」中。 – lifeformed 2011-05-05 17:35:04

+0

@terence:'JarSigner'代碼有簽名和驗證的方法。函數'verifyJar()'做到了。如果您不熟悉密鑰庫/證書的工作方式,我強烈建議使用[Signed Applet](http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html)和[驗證簽名](http://download.oracle.com/javase/tutorial/security/apisign/versig.html)。此外,在部署小應用程序時,接受/拒絕是應用程序設置,但它由JVM存儲,而不是您(不完全確定)在哪裏。不是密鑰庫;只保存鍵,而不是設置。 – 2011-05-19 12:42:40

相關問題