您所在的位置: 首页>>开发>>JAVA>>JAVA专区>>J2SE>>

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

http://developer.51cto.com  2006-03-22 10:47  Qusay H. Mahmoud 著 边城狂人 译  ccw  我要评论(0)
  • 摘要:这篇文章介绍了 SSL 并描述了 JSSE 框架及其实现,详细说明了 SSL 和 JSSE,并且说明了如何开发服务器端支持 SSL 应用程序。
  • 标签:J2SE
实验一下 HttpServer 类:

1. 将 HttpServer 的代码保存在文件 HttpServer.java 中,并选择一个目录把它存放在那里。

2. 使用 javac 编译 HttpServer.java

3. 建立一些 HTML 文件作为例子,要有一个“index.html”,因为它是这个例子中默认的 HTML 文档。

4. 运行 HttpServer。服务器运行时使用 8080 端口。

5. 打开网页浏览器,并发出请求:http://localhost:8080 或者 http://127.0.0.1:8080/index.html。

注意:你能想到 HttpServer 可能接收到一些恶意的 URL 吗?比如像 http://serverDomainName:8080/../../etc/passwd 或者 http://serverDomainName:8080//somefile.txt 等。作为一个练习,修改 HttpServer 以使其不允许这些 URL 的访问。提示:写你自己的 SecurityManager 或者使用 java.lang.SecurityManager。你可以在 main 方法的第一行添加语句 System.setSecurityManager(new Java.lang.SecurityManager) 来安装这个安全的管理器。试试吧!

扩展 HttpServer 使其能够处理 https://URL

现在,我要们修改 HttpServer 类,使它变得安全。我希望 HTTP 服务器能处理 https://URL 请求。我在前面就提到过,JSSE 让你可以很容易的把 SSL 整合到应用中去。

创建一个服务器证书

就像我前面提到的那样,SSL 使用证书来进行验证。对于需要使用 SSL 来保证通信安全的客户端和服务器,都必须创建证书。JSSE 使用的证书要用与 J2SE 一起发布的 Java keytool 来创建。用下列命令来为 HTTP 服务器创建一个 RSA 证书。

prompt> keytool -genkey -keystore serverkeys -keyalg rsa -alias qusay

这个命令会产生一个由别名 qusay 引用的证书,并将其保存在一个名为 serverkeys 的文件中。产生证书的时候,这个工具会提示我们一些信息,如下面的信息,其中加黑的内容是我写的。

Enter keystore password: hellothere

What is your first and last name?

[Unknown]: ultra.domain.com

What is the name of your organizational unit?

[Unknown]: Training and Consulting

What is the name of your organization?

[Unknown]: javacourses.com

What is the name of your City or Locality?

[Unknown]: Toronto

What is the name of your State or Province?

[Unknown]: Ontario

What is the two-letter country code for this unit?

[Unknown]: CA

Is CN=ultra, OU=Training and Consulting,

O=javacourses.com, L=Toronto, ST=Ontario, C=CA correct?

[no]: yes

Enter key password for

(RETURN if same as keystore password): hiagain

正如你所看到的,keytool 提示为 keystore 输入密码,那是因为让服务器能访问 keystore 就必须让它知道密码。那工具也要求为别名输入一个密码。如果你愿意,这些密码信息能由 keytool 从命令行指定,使用参数 -storepass 和 -keypass 就行了。注意我使用了“ultra.domain.com”作为姓名,这个名字是为我的机器假想的一个名字。你应该输入服务器的主机名或者 IP 地址。

在你运行 keytool 命令的时候,它可能会花几秒钟的时间来产生你的密码,具体速度得看你机器的速度了。

既然我为服务器创建了证书,现在可以修改 HttpServer 使其变得安全了。如果你检查 HttpServer 类,你会注意到 getServer 方法用来返回一个服务器套接子。也就是说,只需要修改 getServer 方法让它返回一个安全的服务器套接字就可以了。在代码示例 2 中加黑的部分就是所做的改变。请注意我将端口号改成了 443,这是 https 默认的端口号。还有一点非常值得注意:0 到 1023 之间的端口号都是保留的。如果你在不同的端口运行 HttpsServer,那么 URL 应该是:https://localhost:portnumber。但如果你在 443 端口运行 HttpsServer,那么 URL 应该是:https://localhost。


共6页: 上一页 [1] [2] [3] 4 [5] [6] 下一页
【内容导航】
J2SE开发应用专栏
走向银光 —— 一步一步学Silverlight2
让你的代码“炫”起来——WPF开发教程
WebSphere 实现SOA的利器
初探敏捷开发
 
 验证码: (点击刷新验证码)   匿名发表
  • Visual C++ 6.0完全自学宝典

  • 作者:强锋科技,朱洪波
  • Visual C++ 6.0是微软公司为程序人员提供的Visual Studio 6.0工具套件中的重要组成部分。本书由浅入深地介绍使用Visual C++ 6.0..
Copyright©2005-2008 51CTO.COM 版权所有