e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 程序开发 >> JAVA教程 >> J2SE 1.4网络安全编程 >> 教程正文
 
教程搜索
 
 
相关教程
  • Jboss下MS SQL Server配置指导
  • 在win2000下的安装 JSP
  • 玩转Java的CLASSPATH
  • JSWDK环境安装与配置
  • 在Windows/NT上建立JSP环境
  • Resin+Apache的安装运行jsp/servlet
  • Tomcat4.01全攻略
  • Linux环境下安装运行JSP/servlet
  • JDB 的简单使用
  • JDK安装
  • win2000server install j2ee
  • JBuilder 6 :Borland方式的Java集成开
  • JAVA一步一步的WEB编程关于JSP与JavaB
  • 在FreeBSD4.X上安装JDK1.3.1
  • 安装配置篇Apache+Tomcat
  • Win2000下Tomcat4.1.12+Apache2.0.43的
 
 

图文教程


  • 将其他Email邮件转移到Gmail邮箱中

  • Vista破解TCP/IP后进不了系统咋办

  • Vista下用DriveSpacio查看磁盘空间

  • Windows抢了谁的饭碗 非主流操作系统To

  • 地球还是火星 平常心看“非主流”
 
 
赞 助 商
 
 
J2SE 1.4网络安全编程
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2007-8-9
第一部份:服务器端 作者: Qusay H. Mahmoud 2002年11月 译者:FlyBean 任何在计算机网络或者互联网上传输的数据都可能被截听。其中一些信息可能是敏感的,比如信用卡号和其它私人数据。为了在企业环境以及电子商务应用中更好地使用互联网,应用必须使用加密、认证和安全通讯协议来保护用户数据。安全超文本传输协议,一个基于安全套接口层的 HTTP 协议,早已成功地应用于电子商务应用。 JAVA安全套接口扩展(JSSE)是一套提供安全互联网通信功能的JAVA包,是用100%纯JAVA实现的安全套接口层(SSL)的框架。这些包允许作为JAVA开发人员的您开发安全的网络应用,运行任何基于TCP/IP的应用协议,如:HTTP、FTP、Telnet或NNTP等,在客户机与服务器之间建立安全的数据通道。 一个好消息是Java 2 SDK标准版1.4版本(J2SE 1.4)已经集成了JSSE。这意味着如果您已经安装了J2SE 1.4,那么您无需下载任何额外的包,就可以创建基于SSL的安全的互联网应用。本系列文章共分为两个部份,它提供了一个易于实践的教程,说明了如何为今日和未来的市场开发安全的互联网应用。本文所关注的是服务器,下一篇文章关注的是客户机。本文将以介绍SSL的详细概述开始,向你展示以下内容:
  • 使用 JSSE API;
  • 将 SSL 集成进您已有的客户机 - 服务器应用;
  • 开发简单的 HTTP 服务器;
  • 修改 HTTP 服务器,使之能处理 HTTPS 请求;
  • 使用 J2SE 中的 keytool 程序产生您自己的证书;
  • 开发、配置和运行一个安全的 HTTP 服务器。
SSL概述

SSL协议是由Netscape于1994年开发的,它允许客户机(通常是Web浏览器)和HTTP服务器通过安全的连接进行通信。作为在不安全的公网上所交换信息的保护手段,它提供加密、来源认证和数据完整性。当前存在多个SSL版本:SSL 2.0存在安全缺陷,现在已经极少使用;SSL 3.0得到了广泛的支持;最后,作为SSL 3.0的改进版本,传输层安全(TLS)被采纳为互联网标准,并被几乎所有新近的软件所支持。

加密保护数据不受未经授权的访问,这是通过在传输前将数据转换为表面上没有任何意义的数据形式来实现的。数据在一端被加密(客户机或服务器)、传送并由另一端解密,然后处理。

来源认证是检验数据发送者身份的一种方法。当浏览器或其它客户机第一次试图通过安全连接进行通信时,服务器以证书 的形式发送客户机一套凭证。

证书是由可信赖的机构,称之为认证中心 (CA)发布和验证的。证书代表着一个人的公开身份。它就象一个签名文件:我证明在文件中的公钥属于在该文件中命名的实体。签名:(认证中心)。知名的CA包括Verisign、Entrust和Thawte。请注意:当前SSL/TLS使用的证书是X.509证书。

数据完整性是指确保在传输过程中数据不被修改。

SSL和TCP/TP协议栈

正如SSL的名称-安全套接口层所指出的,SSL连接与TCP的套接口连接类似。由于在协议栈中SSL连接恰恰位于TCP连接之上和应用层之下(如图1所示),因此,您可以认为SSL连接是安全的TCP连接。然而,需要注意的是,SSL并不支持诸如带外数据(out-of-bound)的TCP特性。


协商式加密

正是由于SSL的特性使得它成为安全的电子商务事务处理事实上的标准传输手段。SSL对协商式加密以及认证算法的支持就是其中的两个特性。SSL的设计者意识到并非所有的参与者都使用相同的客户端软件,因此并非所有的客户机将包括特定的加密算法。对服务器而言,也是如此。客户机与服务器是一个连接的两端。在它们最初的握手时,它们将协商所使用的加密/解密算法(加密套件)。如果双方没有共同的满足需要的算法,那么在这种情况下,连接的尝试将失败。

需要注意的是,尽管SSL允许客户机与服务器双方相互认证,但通常只有服务器是在SSL层中认证的。而客户机则通常是通过使用SSL保护的通道传递口令的方式,在应用层中认证的。这种模式在银行、证券交易以及其它安全的WEB应用中普遍使用。

图2图解说明了SSL完整的握手协议。它展示了在SSL握手过程中消息交换的顺序。

消息的含义:

1. ClientHello:客户机向服务器发送信息,诸如SSL协议版本、会话ID以及加密套件信息,如加密算法和所支持的密钥长度;

2. ServerHello:服务器选择客户机和服务器都支持的最佳的加密套件,并将信息发送给客户机;

3. Certificate:服务器向客户机发送包含了服务器公钥的证书。此消息是可选的,在要求服务器认证时需要使用。换句话说,它被用来向客户机确认服务器的身份;

4. Certificate Request:仅当服务器要求客户机认证自身时,此消息才被发送。大多数电子商务应用并不要求客户机对自己进行认证。

5. Server Key Exchange:如果包含了服务器公钥的证书不能满足密钥交换的需要,此消息被发送;

6. ServerHelloDone:此消息告知客户机,服务器已经完成了最初的协商过程;

7. Certificate:仅当服务器要求客户机认证自身时,此消息才被发送。

8. Client Key Exchange:客户机为客户机和服务器产生一个共享的秘密密钥(Secret key)。如果使用了RSA加密算法,客户机就使用服务器的公钥加密此秘密密钥,并发送给服务器。服务器使用它的私钥或秘密密钥解密此消息,并取出共享的秘密密钥。现在,客户机和服务器共享分布式安全的秘密密钥;

9. Certificate Verify:如果服务器被要求对客户端进行认证,此消息允许服务器完成认证过程;

10. Change Cipher Spec:客户机要求服务器切换到加密模式;

11. Finished:客户机通知服务器,它已做好安全通信的准备;

12. Change Cipher Spec:服务器要求客户机切换到加密模式;

13. Finished:服务器通知客户端,它已做好安全通信的准备。此消息标志着SSL握手完成了。

14. Encrypted Data:客户机与服务器可以开始通过安全通信通道进行加密信息交换。

JSSE

Java安全套接口扩展(JSSE)是用100%纯JAVA实现的SSL和TLS协议的框架。它提供了用于数据加密、服务端认证、消息完整性以及可选的客户端认证的机制。JSSE引人注目的一点是:JSSE抽象了复杂的基础加密算法,从而使敏感的、危险的安全攻击的风险最小化。另外,它允许您将SSL无缝地集成进您的应用,从而使得安全应用的开发相当简单。JSSE框架具有支持众多不同的安全通讯协议的能力,这些协议包括SSL 2.0、3.0以及TLS 1.0。但是,J2SE V1.4.1实现了SSL 3.0和TLS 1.0。


使用JSSE编程

JSSE API通过提供扩展的网络套接口类、信任和密钥管理、以及封装了套接口创建行为的套接口工厂框架,来补充了java.security和java.net包。这些类是包含在javax.net和javax.net.ssl包中。

SSLSocket和SSLServerSocket

javax.net.ssl.SSLSocket是java.net.Socket类的子类。因此,它支持所有标准Socket方法,并增加了一些专用于安全套接口的方法。除用于创建服务器套接口外,javax.net.ssl.SSLServerSocket类似于SSLSocket类。

有两种方法创建SSLSocket实例:

1. 通过调用SSLSocketFactory类的实例的某个createSocket方法;

2. 通过SSLServerSocket的accept方法。

SSLSocketFactory和SSLServerSocketFactory

javax.net.ssl.SSLSocketFactory类是创建安全套接口的对象工厂,javax.net.ssl.SSLServerSocketFactory 是创建服务端套接口的对象工厂。

可以通过以下两种方法得到SSLSocketFactory实例:

1. 调用SSLSocketFactory.getDefault()方法获取默认的工厂;

2. 使用指定配置行为,构建新的工厂。

注意:默认的工厂被配置为仅允许服务器认证。

增加已有的客户机/服务器应用的安全性

将SSL集成进已有的客户机/服务器应用中,增加它们的安全性是很简单的:仅需少数几行JSSE代码。在下面的例子中,以黑体 突出显示的代码行展示了增加服务器安全性所必需的代码。

import java.io.*;

import javax.net.ssl.*;

public class Server {

int port = portNumber;

SSLServerSocket server;

try {

SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); server = (SSLServerSocket) factory.createServerSo

1 2 3 4 下一页
  • 上一篇教程: 用于Web服务的核心Java API
  • 下一篇教程: 更多的时间
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.