分享
 
 
 

用J2SE 1.4 进行 Internet 安全编程(二)

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

导出和导入证书

为了解释清楚如何输出和输入证书,我会使用我自己的 HTTPS 服务器。这个服务器在第一部分中讨论过。然后,跟着下面的内容开始:

1、运行 HTTPS 服务器,像在第一部分中讨论的那样。

2、运行 ReadHttpsURL1:Java ReadHttpsURL1 localhost。你同样会得到上面所述的异常。

3、使用下面的 keytool 命令导出服务器证书:

o 从 serverkeys 文件中导出别名为 qusay 的证书

o 将导出的证书保存在 server.cert 文件中,这个文件会由 keytool 创建

如你看到的那样,我根据要求输入了密码。成功输入密码之后,服务器证书被成功的导出并保存在 server.cert 中。

Prompt keytool -eXPort -keystore serverkeys -alias qusay -file server.cert

Enter keystore passWord: hellothere

Certificate stored in file

4、将文件 server.cert 拷贝到 ReadHttpsURL1 所在的目录。使用 keytool 创建一个新的 keystore 并将服务器的 server.cert 证书导入其中。这里的命令示例:

Prompt keytool -import -keystore trustedcerts -alias qusay -file server.cert

这个命令会产生下面那样的输出。它要求输入密码,这是一个新的密码,用于 trustedcerts 这个 keystore 的。这个 keystore 由 keytool 创建。在输出信息的最后,它询问我是否愿意相信这个证书,我回答 yes。

Enter keystore password: clientpass

Owner: CN=localhost, OU=Training and Consulting, O=javacourses.com, L=Toronto, ST=Ontario, C=CA

Issuer: CN=localhost, OU=Training and Consulting, O=javacourses.com, L=Toronto, ST=Ontario, C=CA

Serial number: 3dcf988a

Valid from: Mon Nov 11 06:46:18 EST 2002 until: Sun Feb 09 06:46:18 EST 2003

Certificate fingerprints:

MD5: 37:35:4D:3A:2B:7E:B5:09:A5:41:B3:FA:E4:3C:1D:C4

SHA1: CB:7C:77:36:79:A2:37:26:E2:98:61:C2:9D:10:50:69:

99:F9:B9:1B

Trust this certificate? [no]: yes

Certificate was added to keystore

5、现在运行 ReadHttpsURL1 并告诉它哪里能找到证书。使用下面的命令:

Prompt java -Djavax.net.ssl.trustStore=trustedcerts ReadHttpsURL1 localhost

这将会与你的 HTTPS 服务器联接、校验证书,假如正确,它会下载默认页面 index.Html。

--------------------------------------------------------------------------------

注重:信任治理器负责决定远端的证书是否值得信任。它使用下面的规则:

1、假如 javax.net.sll.trustStore 系统属性指定了信任库,那么信任治理器会使用提供的文件来检查证书。假如那个系统属性存在但指定的文件不存在,那么就没有使用任何信任库,会抛出一个 CertificateException 异常。

2、假如 javax.net.sll.trustStore 系统属性没有定义,那么它会去寻找默认的信任库:

o 假如在你的 java.home 目录的 lib/security 子目录下存在名为 jssecacerts 的信任库,那么使用的就是它。

o 假如 jssecacerts 不存在,但是 cacerts 存在 (它随 J2SDK 一起发行,含有数量有限的可信任的基本证书),使用的就是 cacerts。

在我的 windows 2000 客户机中,java.home 目录是 c:\Program File\java\jre1.4.1\lib\security,在上例中,假如你将 trustedcerts 更名为 jssecacerts 并将其移动到 lib/security 子目录中,那么你以后就不需要在命令行指定 javax.net.ssl.trustStore 属性了。

假如你不知道 java.home 在哪里,这里有一小段代码可以让你找到它:

public class FindJavaHome {

public static void main(String argv[]) {

System.out.println(System.getProperty("java.home"));

}

}

--------------------------------------------------------------------------------

URL 类

示例代码 1 中的 ReadHttpsURL1 使用低层的套接字打开到 SSL 服务器的连接。这样做有一个缺点,假如不进行一番解析,我们就不能在命令行清楚的写出像 https://www.jam.ca 这样的 URL。这里有一个更简单的办法在客户端应用程序中使用 SSL 和 JSSE。

java.net.URL 类支持 HTTPS 地址。例如,下面的代码段创建一个 HTTPS 地址并建立一个输入流的读入器:

URL url = new URL("https://www.sun.com");

BufferedReader in

= new BufferedReader(new InputStreamReader(url.openStream()));

是不是很简单?我希望当你学习 Java 的新东西时,你能欣赏到它的美好之处。

示例代码 1 中的 ReadHttpsURL1 可以由下面使用了 URL 类的示例代码 2 代替:

示例代码 2:ReadHttpsURL2.java

import java.net.*;

import java.io.*;

public class ReadHttpsURL2 {

public static void main(String argv[]) throws Exception {

if(argv.length != 1) {

System.out.println("Usage: java ReadHttpsURL2 ");

System.exit(0);

}

URL url = new URL(argv[0]);

BufferedReader in

= new BufferedReader(new InputStreamReader(url.openStream()));

String line;

StringBuffer sb = new StringBuffer();

while ((line = in.readLine()) != null) {

sb.append(line);

}

in.close();

System.out.println(sb.toString());

}

}

假如你想试试 ReadHttpsURL2,执行它的命令和上面讨论的类似。注重,无论如何,既然我们使用 URL 类,你就能在命令行指定 URL,包括协议的名称。这里是一个例子:

Prompt java ReadHttpsURL2 https://localhost

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有