| |
Java安全通信、数字证书及应用实践 |
|
时间: 2004-08-03 来自:csdn |
 |
|
15d9
四、利用数字证书给 applet签名
现在假设我们公司给 xx公司做一个项目,这个项目中需要用到applet,且这些applet需要特权以实现一些特殊的功能(如读出客户端用户系统中C:\winNT\system.ini文件中的内容并显示)。那么我们可以颁发一个数字证书,并给这个数字证书签名,然后用签名后的这个数字证书来签名我们的applet,使客户信任。具体过程如下:
1、生成一个用于此项目签名 applet 的数字证书,别名定为: mission_water
生成一个用于此项目签名的数字证书如下:
keytool –genkey –dname “CN=美森软件-水公司项目,OU=美森系统软件有限公司,O=美森系统软件有限公司,L=成都市,ST=四川省,C=中国” –alias Mission_Water –keyalg RSA –keysize 1024 –keystore abnerCALib –keypass 200100 –storepass 100200 –validity 3650
2、用我们的 CA(missinCA) 来签发这个数字证书
然后,运行我们在前面第三节中给定的程序,注意:运行此程序前,请修改以下参数:
然后运行,程序会在 abnerCALib证书库中产生一个别名为:Mission_Water_Signed的数字证书,这个证书是经过我们的CA(MissionCA)签发的。
下面,我们用以下指令导出这个证书:
| keytool -export -alias Mission_Water_Signed -file Mission_Water_Signed.cer -keystore abnerCALib -rfc | 会生成一个 Mission_Water_Signed.cer 文件。
3、用签发后的数字证书来签名我们的 applet
我们现在来做一个简单的 applet,它的代码如下:
package com.applet;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.io.*;
public class ShowFileApplet extends JApplet {
private boolean isStandalone = false;
private String content = "文件的内容是:"; //自定义的提示信息
private String fileName = "C:\\WINNT\\system.ini";//读出这个文件的内容
private TextArea ta = new TextArea(10,80);//自定义的输出框
public String getParameter(String key, String def) {
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
public ShowFileApplet() {
}
public void init() {
try {
jbInit();
myInit();//自己定义的方法
}
catch(Exception e) {
e.printStackTrace();
}
}
private void jbInit() throws Exception {
this.setSize(new Dimension(400,300));
}
/**
* 自定义的初始化方法,读入系统中的一个文件的内容并保存起来,然后,增加一个
* 可视化的输出框
*/
private void myInit(){
String s;
BufferedReader in;
try {
in = new BufferedReader(new FileReader(fileName));
while ( (s = in.readLine()) != null) {
content +=s + "\n";
}
}catch (IOException ex) {
ex.printStackTrace();
}
System.out.println(content);
ta.setText(content);
getContentPane().add(ta);
}
/*
*重载的方法,输出内容
**/
public void paint(Graphics g){
ta.setText(content);
}
public String getAppletInfo() {
return "Applet Information";
}
public String[][] getParameterInfo() {
return null;
}
//static initializer for setting look & feel
static {
try {
}
catch(Exception e) {
}
}
} | 好了,这个 applet写好了,下面我们来把这个applet编译打包成jar文件。
编译此 applet文件,会在当前目录(当前目录为classes目录)下生成一个com\applet的目录结构,在applet目录下有一个ShowFileApplet.class,进入当前目录,执行:
| jar cvf myapplet.jar com/applet/*.* | 于是在当前目录下产生一个 myapplet.jar文件。
然后再在当前目录(当前目录为 classes目录)下新建一个applet目录,专门存放applet的jar文件,把前面生成的数字证书库abnerCALib这个文件也copy到applet目录下面来,同时把刚才生成的myapplet.jar文件也移到applet目录下面来。然后进入该目录执行:
jarsigner -keystore abnerCALib myapplet.jar Mission_Water_Signed
Enter Passphrase for keystore: 100200
Enter key password for Mission_Water_Signed: 200100 | 即用 Mission_Water_Signed这个我们的CA签发的数字证书给这个applet签名了。
157
|
|
|
|
|
|
|
|