logo资料库

java ssl实现.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
SSL安全代理的Java实现——丁月华 熊前兴 lO3 SSL安全代理的Java实现 丁月华 熊前兴 (武汉理工大学武汉430063) 摘 要 文章介绍了SSL协议和Java语言所提供的安全平台,在此基础上介绍了SSL安全 代理实现的基本原理。 关键词SSL Java代理 Abstract:This paper introduces SSL protocol and the security platform of Java.Based on the intro· duction,this paper also illustrates the theory of implementation of SSL proxy. Key words:SSL;Java;Proxy 1 SSL协议简介 安全套接层(Secure Socket Layer,SSL)是 Netscape公司率先采用的一种网络安全协议,它 可对网页与服务器之间传输的数据加密。SSL协 议提供的服务可归纳为3个方面:用户和服务器 的合法性认证、加密数据和保护数据的完整 性 。因此采用SSL协议传输密码和信用卡号 等敏感信息以及身份认证信息是一种较理想的选 择。SSL是介于HTTP协议与TCP协议之间的一 个可选层。它在OSI模型中的位置如表1所示。 SSL在TCP之上建立了一个加密通道,通过 该通道的数据均经过了加密/解密过程。具体来 讲,SSL协议从结构上又可以分为两部分:握手协 议(Handshake Protoco1)和记录协议(Record Pro- toco1)。其中握手协议用于协商密钥,协议的大部 分内容都是描述通信双方如何安全地协商会话密 表1 SSL所在层次图 应用层 表示层 会话层 传输层 网络层 链路层 物理层 HTTP/LDAP/IMAP SSL握手协议 SSL记录层 TCP IP Ethernet/Token Ring LAN/MAN/WAN 钥。记录协议则定义了传输的格式。简单地讲, SSL协议的工作流程是:SSL客户端(也是TCP的 客户端)在TCP连接建立后,发出一个消息(Cli- ent Hello),该消息中包含了SSL可实现的密码算 法列表、压缩方法列表、SSL版本号、产生的32字 节随机数、会话ID和其它一些必要的消息。SSL 的服务器端将回应一个消息(Server Hello),其中 确定了该次通信所要用的密码算法和压缩算法, 然后发出服务器端的证书(其中包含了身份和公 钥)。客户端在收到该消息后会生成一个秘密消 BulkTask任务负责处理Bulk—only协议。在 该传输方式下,有3种类型的数据在PC机和u 盘之间传送:CBW,CSW和普通数据。CBW (Command Block Wrapper,即命令块包)是从Pc 机发送到u盘的命令,这里为SCSI传输命令集。 BulkTask任务必须执行相应的命令,完成以后,向 PC机发出反映当前命令执行状态的CSW(Corn- mand Status Wrapper),PC机根据CSW来决定是 否继续发送下一个CBW或是数据。 收稿13期:2003-10-08 湖北省2002年自然科学基金项目资助(2002AB042) BulkTask任务的流程图如图7所示。 5 结论 采用模块化方法,构造了一个符合USB1.1 标准,使用灵活方便的USB接口。该设计已成功 实现并被相关部门采用。 参考文献 1李贵山,陈金鹏编.PCI局部总线及其应用.西安:西 安电子科技大学出版,2003.8~251 2(美)阿多森(Adoron,D)著.精英科技译.USB系统 体系.北京:中国电力出版社,2000.15~197 维普资讯 http://www.cqvip.com
交通与计算机2003年第6期 第21卷(总第115期) 息,并用SSL服务器的公钥加密后传回服务器。 服务器用自己的私钥解密后,会话密钥协商成功, 则双方可以用同一份会话密钥通信了。SSL协议 的握手阶段主要应用的是非对称密钥加密,一旦 客户端认定了服务器端的身份,双方就开始应用 事先商量好的对称密钥来进行加密通讯。图1简 一 Server Hello 二 Certificate(0ptiona1) 客 二 Certificate Request(0Dtiona1) 服 二Server Key Exehange(optiona1) 户 二 Server Hello Done 务 端 Certificate(optiona1) 器 Client Kev Exchange : 端 Certificate Verif,/(0ptiona1) change Cipher Spec 二 Finished 一 一 Change Cipher Spee Finished 二 Encrypted Data 图1握手协议 要说明了SSL协议中的握手协议: 2 Java语言的安全体系 Java平台已经内置了Java安全体系结构核 心和Java加密体系结构(JCA) ,两者构成Java 所带的安全平台,如图2所示。 认证和l Java安全l Java~密1.Java 授权服I套接扩展I扩J~JCE I安全平台 务JAAS l JSSE l l Java加密体系结构(JCA) 图2 Java安全体系结构的标准组件 2.1 JCA JCA(JavaCryptography Architecture)提供了用 Java平台实现基本加密功能的工具。加密功能的 范围包括用基本加密函数与算法保护数据完整 性,防止破坏数据。JCA中还有标识数据与代码 源的加密签名生成算法。用JCA提供的基本加 密功能接口可以开发实现含消息摘要、数字签名、 密钥生成、密钥转换、密钥库管理、证书管理和使 用等功能的应用程序。但大多数情况下JCA只 是定义了这些接口,并没有有效地实现这些功能, 这些功能往往由加密服务提供者(CSP)来实现。 CSP遵照JCA中定义的加密接口实现一个或几个 加密功能,CSP实现的加密功能封装成扩展JCA 定义的一些标准加密服务提供者接口而成的加密 引擎类的形式提供,因此,应用程序员可以通过 JCA定义的API来使用这些功能,这样对加解密 功能的调用和具体CSP无关。加密引擎表示特 定加密算法和一组调用算法所用参数,完成一些 加密功能。具体加密算法通过加密引擎提供的静 态getlnstance()方法调用,其algorithm参数表示 特定算法名,如DES,该方法返回加密引擎的具体 对象实例。 2.2 JSSE JSSE(Java Secure Socket Extension)提供了 SSL的加密功能 。如果需要与SSL服务器或 SSL客户通信,可以使用此扩展包中的API。如 果服务器和客户的实现中都需要增加加密功能, 则不仅可以使用JSSE,也可以使用JCE的密码功 能。JSSE提供了实现SSL通信的标准Java API。 JSSEv1.0结构包括下列包: iavax.net.ssl:包含JSSE API的一组核心类 和接口。 javax.net:支持基本客户机套接与服务器套 接工厂功能所必需的。 javax.security.cert:支持基本证书管理功能 所必需的。 在JDK1.4后,JSSE已整合到JDK中了。利 用JSSE可象处理协议一样创建和使用SSLSock— et,从程序设计的角度来看,SSL协议中的握手协 议都是透明的,开发人员申请一个SSLSocket,当 创建了SSLSocket后,协议的握手也随之完成。 2.3 JCE CE Java Cryptography Extension是一组包,它 为加密、密钥生成、密钥一致和消息认证代码 (Message Authentication Code,MAC)算法提供了 一个框架和实现。JCE还支持安全流和封装的对 象。在JCE框架内,可把其他配备了密码系统的 库作为服务提供者插入。JCE的下载包中包含 Sun JCE服务提供者。其他供应商(如IBM)也提 供他们自己的JCE服务,开发者可把这些实现插 入到JCE框架中。Java密码架构(JCA)和Java 密码扩展(JCE)的设计目的是为Java提供与实现 无关的加密函数API。JCA是Java2运行环境的 一部分,而JCE(在jdk1.4之前)是对没包含在 JDK中JCA的扩展。JCE为JCA增加了简单的加 密和解密API。在JCA的基础上提供加密算法、 密钥交换、密钥产生和消息鉴别服务等扩展接口。 2.4 JAAS 维普资讯 http://www.cqvip.com
SSL安全代理的Java实现——丁月华 熊前兴 lO5 JAAS(Java Authentication and Authorization Service)可以在Java平台上提供用户身份鉴别。 它提供了灵活和可伸缩的机制来保证客户端或服 务器端的Java程序。Java早期的安全框架强调 的是通过验证代码的来源和作者,保护用户避免 受到下载下来的代码的攻击。JAAS强调的是通 过验证谁在运行代码以及他/她的权限来保护系 统免受用户的攻击,允许开发者根据用户提供的 鉴别信任状,准许用户对程序进行访问。 3 SSL安全代理的实现原理 3.1 SSL安全代理的基本原理 根据SSL协议规范,SSL安全代理由服务器 端和客户端两部分组成。SSL安全代理的客户端 和浏览器在同一台机器上。SSL安全代理的服务 器端和Web服务器在同一台机器上。SSL安全 代理客户端可以接收网络浏览器发出的HTTP请 求,SSL安全代理客户端对这个请求进行分析,如 果请求通过,SSL安全代理客户端根据系统配置 决定明文转发或者是加密后转发。如SSL采用加 密,系统对该请求和传输的数据提供128位强度 SSL的加密并将该加密的信息与指定的SSL安全 代理服务器端发送,服务器端支持128位强度的 SSL,并将该请求转换成明文发送给客户请求的 目的服务器。SSL安全代理服务端的工作过程与 客户端的类似,处理来自SSL安全代理客户端的 请求,对Web资源进行访问控制。SSL安全代理 的原理图如图3所示。 SSL客户端 SSL服务器端 图3 SSL安全代理原理 SSL由下面几个功能部分组成: 1)SSL Proxy客户端代理。客户代理接收所 有来自内部的普通Socket连接,然后将这些连接 以转发给服务器代理,Socket SSL客户端同时可 对服务器进行认证。 2)SSL服务器端代理。服务器代理需要一个 特殊的客户端建立连接。它只接收的SSL Socket 连接请求,然后用128位的服务器证书提供服务 器认证。它可以有选择地对客户端进行认证,同 时也可以对要求连接的客户地址进行限制。 3)在客户端和服务器端都提供本地的属性 和各项参数的设置功能。这些参数包括:是否启 用加密;是否对客户进行认证;代理监听端口; SSL代理连接端口;提供可供选择的加密算法的 设置以及是否启用父代理;父代理主机名;父代理 连接端口。 4)日志记录。对代理所处理的任何请求和 转发的地址和连接端口及发生时间都写入到系统 日IP志文件当中,可供安全审计使用。 5)支持H,兀、P协议的GET和POST请求方 式。SSL安全代理Proxy的两端的配合使用,用户 可以用SSLProxy安全代理对任何需要的连接进 行加密。而用户只要开启两端的软件,并在浏览 器的连接属性中设定代理服务器的IP地址和连 接端口号之后,用户完全可以同平常一样地使用 和浏览网络,而所有对信息保密等功能的实现对 用户都是透明的。实现对Web资源的访问控制 和其它安全功能只需要设置简单的配置,而不需 要改动原有Web应用的核心内容与运作方式,无 需重新编写服务器端的应用程序,具有高度的透 明性。 我们可以这样理解,SSL客户端和SSL服务 器端是两个刚好相反的过程,SSL服务器端从 web服务器得到页面内容(明文或者是低4O位的 加密),然后加密成128位的高加密信息。而SSL 客户端将从信道上得到的加密信息解密成web服 务器上的页面内容(明文或者是低40位的加 密)。这样我们就保证了在信道上传输的信息是 有高可靠安全保障的加密信息。 3.2 SSL客户端与SSL服务器端模拟 下面说明一下SSL客户端的原理:首先我们 只考虑最简单的情况(暂时不考虑用户对网站的 提交),如果用户只接受来自网页的信息,当用户 在IE地址栏键入网页地址后,SSL客户端会去自 动捕获这样一个地址,然后去代替用户获取网页 的内容,SSL客户端从SSL服务器端获取了被 SSL服务器加密的信息后并传送解密到自己的 serverSocket,用户可以从这个ServerSocket读取被 解密的信息。我们可以这样说,SSL客户端一方 面是SSL服务器端的客户端(SSLSocket),另一方 维普资讯 http://www.cqvip.com
交通与计算机2003年第6期 第2l卷(总第115期) 面它又是我们普通用户的服务器(ServerSocket), 起到转传兼解密的作用。 前面介绍了SSL客户端,而SSL服务器端可 以理解为SSL客户端的逆过程,SSL服务器端接 收到来自于SSL客户端的请求,会去web服务器 获取客户所需信息,获取后传递到自己的SSLSer. verSoeket,将信息加密成密文,然后将信息传递给 SSL客户端。和SSL客户端一样,SSL服务器端 一方面是web服务器的客户端,一方面又是SSL 客户端的服务器,起到转传兼加密的作用。 下面这段程序模拟了SSL服务器端最简单的 功能,运行该程序后,可以看到原来没有加密的网 页变成了加密的网页。 package mainp; importjava.io. ; importjava.net. ; import javag.net.ss1. ; import java.security.cert. ; importjaVELX.net.ss1. ; public class https{ public static void main(String[]args)throws IOExcep— tion{ SSLServerSocketFactory ssf=(SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); SSLServerSocket ss=(SSLServerSocket)ssf.createServer— Socket(8080); int id=1; while(mille){)//在8080端口监听 try{ SSLSocket S=(SSLSocket)SS.accept(); OutputStream outstream=S.getOutputStream(); PrintWriter out=new PrintWriter(outstream); URL url=new URL f”http.//www.whut.edu. cn”);//这里只是简单的示例,默认用户均可访问这个网 站 BufferedReader in=new BufferedReader(flew Input— StreamReader(ur1.openStream())); String line; while((1ine=in.readLine())!=nul1) { System.out.println(1ine); out.write(1ine);//每当从http:/www.whut.edu.cn读 取一行就写入sslserversocket一行 out.flush(); } out.close(); in.close(); S.close(); String[]tempcipher=SS.getEnabledc phersuites();// 这里可知道ssl通道支持的ssl加密算法 for(int i=0;i
分享到:
收藏