程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 如何讓applet訪問網絡?

如何讓applet訪問網絡?

編輯:關於JAVA

對Java Applet和Java Web Start進行數字簽名

  我們知道Java Applet和Java Web Start程序在運行的時候受到安全限制,例如不能夠訪問本地文件系統,不能夠隨意訪問網絡。本文將演示如何對代碼做數字簽名,讓客戶在運行時選擇是否信任你的簽名,以使你的程序具有更多的權限。在這裡我們不打算購買證書。

  我的計算機環境如下:

  Windows2000 professional sp3

  SUN JDK1.4.0

  IE6.0

  Java_HOME、PATH、CLASSPATH等環境變量均已設置

  客戶端需求:

  客戶端浏覽器需要安裝Java插件,這裡的Java插件是安裝JDK時一起安裝的。如果客戶端不需要做Java開發,可以去下載SUN的網站下載JRE到客戶端安裝。

  接下來看看下面這個Applet,它只有一個按鈕,點擊這個按鈕程序就在本地建立一個文件,如果成功,彈出一個對話框顯示成功消息,如果發生異常(安全異常或者IO異常),也彈出一個顯示錯誤的對話框。源文件如下:

  源文件test\TestApplet.Java

  package test;

  import Java.applet.*;

  import Java.io.*;

  import Java.awt.event.*;

  import Javax.swing.*;

  public class TestApplet

  extends Applet {

  public void init() {

  JButton button = new JButton(“Create a file”);

  button.addActionListener(new ActionListener(){

  public void actionPerformed(ActionEvent evt){

  File file = new File(“c:\\a.txt”);

  try {

  file.createNewFile();

  JOptionPane.showMessageDialog(null,“成功創建文件c:\\a.txt”,

  “消息”,JOptionPane.INFORMATION_MESSAGE );

  }catch (Exception ex) {

  JOptionPane.showMessageDialog(

  null,ex.getMessage(),“錯誤”,JOptionPane.ERROR_MESSAGE);

  }

  }

  });

  add(button);

  }

  }

  在與test目錄的父目錄編譯這個Applet

  javac test\TestApplet.Java

  打包,生成test.jar文件

  jar -cvf test.jar test

  以下是使用Applet的HTML頁面test.Html

  test.Applet1 will appear below in a Java enabled browser.

  codebase = “。”

  code = “test.TestApplet.class”

  name = “TestApplet”

  archive = “test.jar”

  width = “400”

  height = “300”

  hspace = “0”

  vspace = “0”

  align = “middle”

  》

  現在就讓我們運行一下,打開test.Html。點擊按鈕,你看到了什麼?非常不幸,我們沒有經過數字簽名的Applet在默認情況下沒有寫本地文件的權限。那麼讓我們准備簽名代碼吧。

  首先用keytool命令產生用來簽名的key。下面這個命令產生一個叫“mykey”的key,它存儲在我們新建的叫“mystore”的keystore中。

  keytool -genkey -alias mykey -keystore mystore

  接下來它會問一些問題包括keystore的密碼,key的密碼等,如下所示:

  輸入keystore密碼: storepass

  您的名字與姓氏是什麼?

  [Unknown]: AYellow

  您的組織單位名稱是什麼?

  [Unknown]: 我的組織單位

  您的組織名稱是什麼?

  [Unknown]: 我的組織

  您所在的城市或區域名稱是什麼?

  [Unknown]: 北京

  您所在的州或省份名稱是什麼?

  [Unknown]: 北京

  該單位的兩字母國家代碼是什麼

  [Unknown]: CN

  CN=AYellow, OU=我的組織單位, O=我的組織, L=北京, ST=北京, C=CN 正確嗎?

  [否]: Y

  輸入的主密碼

  (如果和 keystore 密碼相同,按回車): keypass

  完成後會在當前目錄下生成一個叫mystore的文件,這個文件包含了我們的key。用jarsigner命令簽名我們的代碼test.jar(需要輸入keystore和key的密碼):

  jarsigner -keystore mystore test.jar mykey

  Enter Passphrase for keystore: storepass

  Enter key passWord for mykey: keypass

  再次運行Applet,在Applet加載的時候會出現一個對話框,說該Applet由不可信任的發行者簽名並宣稱代碼是安全的,是不是要對Applet授權。選擇“授權於會話”,然後點擊我們的按鈕,看看是不是成功的創建了文件?

  對於Java Web Start程序,簽名jar文件的過程是一樣的。但是需要在jnlp文件中做一些修改。例如在jnlp根元素下加上一下部分:

  運行程序,在第一次啟動的時候出現以下對話框:

  選擇“啟動”,以後啟動時這個對話框再也不會出現,因為Java Web Start啟動後相當於一個安裝在本地的程序,既然第一次客戶選擇了信任,以後這個對話框就再沒有必要出現了。當然,對於上面的Applet例子我們也可以選擇“總是授權”。

  與大家討論:仔細查看一下,我們可以發現Applet和Java Web Start出的對話框的措辭是不一樣的,而且很顯然前者措辭不當,在這種情況下,客戶很可能對不可信任的程序授權,造成安全上的隱患。如果前面我們創建 keystore的時候在“我的組織”中填上“Microsoft”,又會怎麼樣?對於一個不可信任的程序,前者默認的按鈕居然是“授權”,而後者是“退出”。Applet的安全為什麼會是這樣?

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved