java Applet 數字簽證提升許可權

來源:互聯網
上載者:User

本文描述怎樣通過數位簽章提升java的存取權限,本文環境:

os:Ubuntu9.10 64b

Firefox:3.5.8 jre環境:JRE 1.6.0_18(64b)

測試java代碼和jsp頁面代碼如下:

Java代碼  
  1. public class TestApplet extends Applet {  
  2.     private static final long serialVersionUID = 1L;  
  3.     private void info(String msg) {  
  4.         System.out.println(msg);  
  5.     }  
  6.     @Override  
  7.     public void init() {  
  8.         super.init();  
  9.         readFile("Linux".equalsIgnoreCase(System.getProperty("os.name")) ? "/etc/hostname" : "c:\\boot.ini");  
  10.     }  
  11.     private void readFile(final String filePath) {  
  12.         info("讀取檔案:" + filePath);  
  13.         String text = AccessController.doPrivileged(new PrivilegedAction<String>() {  
  14.             @Override  
  15.             public String run() {  
  16.                 StringBuilder buffer = new StringBuilder();  
  17.                 BufferedReader reader = null;  
  18.                 try {  
  19.                     reader = new BufferedReader(new FileReader(filePath));  
  20.                     while(reader.ready()) buffer.append(reader.readLine());  
  21.                 } catch (Exception e) {  
  22.                     throw new IllegalStateException(e);  
  23.                 } finally {  
  24.                     if (reader != null) {  
  25.                         try {  
  26.                             reader.close();  
  27.                         } catch (IOException e) {  
  28.                             e.printStackTrace();  
  29.                         }  
  30.                     }  
  31.                 }  
  32.                 return buffer.toString();  
  33.             }  
  34.         });  
  35.         info("讀取結果為:" + text);  
  36.     }  
  37. }  
Html代碼  
  1. <%@ page language="java" pageEncoding="UTF-8"%>  
  2. <%  
  3. String path = request.getContextPath();  
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
  5. %>  
  6. <html>  
  7.     <body>  
  8.     <applet id="hh" alt="Applet" width="100" height="100"   
  9.         code="org.skzr.TestApplet"   
  10.         archive="skzr-applet-sign.jar"  
  11.         codebase="<%=basePath %>demo" mayscript>  
  12.     </applet>  
  13.     </body>  
  14. </html>  

 

因為考慮到大家一般是windows 32位環境所以:匯出時使用我的linux64下僅有的32位jdk:jdk1.6.0_14-32

把以上類匯出為包:skzr-applet.jar

簽名:(使用同一個32位jdk:jdk1.6.0_14-32)

1 建立keystore:

  /prog/java/jdk1.6.0_14-32/bin/keytool -genkey -keystore skzr-applet.keystore -alias skzr-applet

2 簽名:

 /prog/java/jdk1.6.0_14-32/bin/jarsigner -keystore skzr-applet.keystore skzr-applet.jar skzr-applet

把demo放入tomcat的webapps下,開啟http://localhost:8080/demo/index.jsp測試

 

index.jsp裡面使用未簽名包:skzr-applet.jar在控制台可以發現異常:

java.lang.IllegalStateException: java.security.AccessControlException: access denied (java.io.FilePermission
/etc/hostname read),因為我的是linux所以讀取此檔案

index.jsp裡面使用已簽名包:skzr-applet-sign.jar在控制台可以發現正確讀取了檔案:下面是控制台輸出:

Html代碼  
  1. 讀取檔案:/etc/hostname  
  2. 讀取結果為:skzr  
  3. basic: Applet initialized  

 至此許可權提升完畢 ^ ^

google chrome for linux

 firefox 3.5.8

至於Windows下是一樣的效果

 

 例子demo demo.zip
其中skzr-applet.jar未簽名 skzr-applet-sign.jar是簽名後的包
總結:

1 jre的策略檔案不需要更改的
如果真的簽名了,用戶端載入運行jar時會出現詢問是否信任此簽名的提示的!

問題在於,你如果簽名了整個applet jar那麼每一次重新發布都需要重新簽名,比較繁瑣,好的辦法是,把需要提升許可權的打為一個jar,一般這個jar不會經常更改的,簽名此jar就可以了,其他的(如介面UI)的jar就算修改了也不需要重新簽名的

2 要點:需要提升許可權的類一定要放入一個jar包,簽名一次即可

3 注意執行需要許可權的代碼需要一個特殊的方法執行,
AccessController.doPrivileged(...)如果信任此簽名,將可以執行此代碼

  • demo.zip (248.8 KB)
  • 下載次數: 332
  • 查看圖片附件

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.