如何讓applet訪問網絡
Filed under: 未分類
Warning: Division by zero in /var/www/html/wwwroot/itrenzheng.hk/wp-content/themes/code-blue_20/functions.php on line 16
Warning: Division by zero in /var/www/html/wwwroot/itrenzheng.hk/wp-content/themes/code-blue_20/functions.php on line 16
Warning: Division by zero in /var/www/html/wwwroot/itrenzheng.hk/wp-content/themes/code-blue_20/functions.php on line 16
我們知道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的安全為什麽會是這樣?
Comments
Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/html/wwwroot/itrenzheng.hk/wp-includes/class-wp-comment-query.php on line 399
Tell me what you're thinking...
and oh, if you want a pic to show with your comment, go get a gravatar!