频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

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

作者: Qusay H. Mahmoud 著 边城狂人 译 出处:ccw  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2006-03-22 11:01
关 键 词:J2SE
阅读提示:这篇文章展示了如何使用 JSSE (SSL 协议的框架和实现) 开发安全的客户端应用程序。这篇文章中的例子展示了将 SSL 整合到 C/S 应用程序是多么简单的事情。这篇文章中讲到一个网页浏览器,QBrowser,可以处理 HTTP 和 HTTPS 请求。

客户端

Java 安全套接扩展 (Java Secure Socket Extension, JSSE) 使 Internet 安全通信成为现实。它是 SSL 3.0 (Secure Socket Layer) 及 TLS 1.0 (Transport Layer Security,由 SSL 3.0 改善而来) 的框架和实现。这个包让 Java 开发人员能够开发安全的网络应用;为基于 TCP/IP 的何应用协议,如 HTTP、FTP、Telnet、或者 NTTP,在客户端和服务器端之间建立安全的数据通道。

在这篇文章的第一部分 (服务器端),作者已经详细说明了 SSL 和 JSSE,并且说明了如何开发服务器端支持 SSL 应用程序。那一部分中我们开发了一个 HTTPS 服务器,这是一个非常有用的应用程序,在这一部分中同样会用到它。

在这篇文章涉及到客户端的内容,它首先简述 JSSE,然后会做这样一些事情

l在客户端使用 JSSE API

l一步步的开发一个支持 SSL 的客户端应用程序

l开发简单的支持 SSL 的客户端应用程序

l从服务器端导出证书并在客户端导入

l开发一个支持 SSL 的网页浏览器

JSSE

Java 安全套接扩展 (JSSE) 提供了 SSL 和 TLS 协议的框架及实现。JSSE 将复杂的、根本的加密算法抽象化了,这样就降低了受到敏感或者危险的安全性攻击的风险。正如你在本文中看到的那样,由于它能将 SSL 无缝地结合在应用当然,使安全应用的开发变得非常简单。JSSE 框架可以支撑许多不同的安全通信协议,如 SSL 2.0 和 3.0 以及 TLS 1.0,但是 J2SE v1.4 只实现了 SSL 3.0 和 TLS 1.0。

用 JSSE 编写客户端应用程序

JSSE API 提供了扩充的网络套接字类、信用和密匙管理,以及为简化套接字创建而设计的套接字工厂框架,以此扩充 java.security 和 java.net 两个包。这些类都包含在 javax.net 和 javax.net.ssl 包中。

javax.net.sll.SSLSocketFactory 类是一个创建安全套接字的对象工厂。可以通过下面两种方法获得 SSLSocketFactory 的实例:

1、调用 SSLSocketFactory.getDefault 来获得默认的工厂。默认的工厂被配置为只允许服务器端验证 (不允许客户端验证)。注意许多电子商务网站不需要客户端验证。

2、使用指定的配置来构造一个新的工厂 (这不在本文讲述的范围内)。

建立 SSLSocketFactory 实例之后,你就可以通过 SSLSocketFactory 实例的 createSocket 方法创建 SSLSocket 对象了。这里有一个例子,该例通过 SSL 端口 443 (这是 HTTPS 的默认端口) 创建套接字并连接到 Sun 的 WWW 服务器。

// Get a Socket factory

SocketFactory factory = SSLSocketFactory.getDefault();

// Get Socket from factory

Socket socket = factory.createSocket("www.sun.com", 443);

使用低层的 SSL 套接字

现在,让我们看一个使用低层套接字在 HTTPS 服务器上打开一个 SSL 套接字连接的完整例子。在这个例子中,打开了一个到 HTTPS 服务器的 SSL 套接字连接,并且读入默认文档的内容。示例代码 1 展示了这个应用程序,其中用于打开 SSL 套接字的代码已经加黑显示了。你将会看到,应用程序中其余代码就是常规的输入/输出流代码。

代码示例 1:ReadHttpsURL1

import java.net.*;

import javax.net.*;

import javax.net.ssl.*;

public class ReadHttpsURL1 {

static final int HTTPS_PORT = 443;

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

if (argv.length != 1) {

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

System.exit(0);

}

// Get a Socket factory

SocketFactory factory = SSLSocketFactory.getDefault();

// Get Socket from factory

Socket socket = factory.createSocket(argv[0], HTTPS_PORT);

BufferedWriter out

= new BufferedWriter(new OutputStreamWriter(

socket.getOutputStream()));

BufferedReader in

= new BufferedReader(new InputStreamReader(socket.getInputStream()));

out.write("GET / HTTP/1.0\n\n");

out.flush();

String line;

StringBuffer sb = new StringBuffer();

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

sb.append(line);

}

out.close();

in.close();

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

}

}

用这个应用程序进行实验

1、拷贝 ReadHttpsURL1 类的代码并粘贴到一个新文件中,将该文件改名为 ReadHttpsURL1.java,并保存在一个你指定的目录下。

2、使用 javac 编译 ReadHttpsURL1.java。

3、运行 ReadHttpsURL1 并提供一个域名作为参数,如:

Prompt> java ReadHttpsURL1 www.sun.com

几秒种后,你会看到许多 HTML 代码显示在屏幕上。注意,即使我们提供的是域名 www.sun.com,我们打开的连接也是 https://www.sun.com,这是因为我们使用的端口号 443 是 HTTPS 的默认端口号。

再试试另一个例子,如:

Prompt> java ReadHttpsURL1 www.jam.ca

这次运行会抛出如下所示的异常,你能猜到是为什么吗?

Exception in thread "main" javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Couldn't find trusted certificate at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.a(DashoA6275)

缘于一个很好的理由,它不能运行——因为远端的服务器发送了一个客户端不认识的证书。我在本文的第一部分提到过,当客户端连接服务器的时候,服务器发送它的证书到客户端请求验证。这样,第一个例子中,你进入了 www.sun.com,服务器的确发送了证书,但 Java 检查了默认的证书库并认出了这个证书是由可信任的 CA 产生的,默认情况下,Java 信任这个 CA。第二个例子中,你进入的是 www.jam.ca,那个网端的证书不是它自己产生的,就是由一个 Java 不知道的 CA 产生的,因此不受信任。

注意,如果系统时钟没有设置正确,那么它的时间就可能在证书的有效期之外,服务器会认为证书无效并抛出 CertificateException 异常。

为了让示例正确运行,你得从 www.jam.ca 导入证收到 Java 信任的证书库中。


共6页: 1 [2] [3] [4] [5] [6] 下一页
【内容导航】
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看52078次)
·UML类图详解 (查看46604次)
·Java编程开发手册 (查看24992次)
·UML统一建模语言 (查看23997次)
·C#技术开发指南 (查看22188次)
·Java编程开发手册 (1195个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (304个砖)
·PB开发教程 (220个砖)
·.NET开发手册 (217个砖)
·Java编程开发手册 (653个好)
·Java基础教程 (569个好)
·.NET开发手册 (249个好)
·PB开发教程 (209个好)
·Delphi开发技术手册 (174个好)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有