网络工程毕业设计(论文)-基于OpenSSL的安全Web服务器开发.doc_第1页
网络工程毕业设计(论文)-基于OpenSSL的安全Web服务器开发.doc_第2页
网络工程毕业设计(论文)-基于OpenSSL的安全Web服务器开发.doc_第3页
网络工程毕业设计(论文)-基于OpenSSL的安全Web服务器开发.doc_第4页
网络工程毕业设计(论文)-基于OpenSSL的安全Web服务器开发.doc_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于OpenSSL的安全Web服务器开发 CHANGSHA UNIVERSITY OF SCIENCE & TECHNOLOGY 毕业设计(论文)题目:基于OpenSSL的安全Web服务器开发 学生姓名: 学 号: 班 级: 专 业: 网络工程指导教师: 2011 年 6 月基于OpenSSL的安全Web服务器开发学生姓名: 学 号: 200758080107班 级: 085810701所在院(系): 计算机与通信工程学院指导教师: 完成日期: 2011.6.6网络工程专业长沙理工大学毕业设计(论文)论文题目 基于OpenSSL的安全Web服务器开发 班 级 姓 名 年 月基于OpenSSL的安全Web服务器开发摘 要当今社会,互联网成了人们获得信息及数据交换的主要来源。人们在享受互联网带来便利的同时,也遭受它带来的安全问题。因为传播在互联网上的数据是采用明文传输的,互联网上的数据可以轻而易举的被人截获,然后读取其中的内容,造成信息的泄密。因此,互联网的安全问题越来越引起人们的重视,本课题也是在此需求下应运而生的。访问互联网的方式主要通过客户端浏览器来进行,在服务端有支持相应协议的程序来对浏览器的请求进行响应,这个程序就是WEB服务器。WEB服务器能够获得浏览器的请求,并对请求进行响应。不仅如此,WEB服务器要保证数据的安全传输。通过基于SSL的HTTPS协议,WEB服务器实现了数据传输过程中的加密解密,保证了数据的安全传输。本课题通过Java语言提供的OpenSSL来实现WEB服务器的安全功能。开发环境基于MyEclipse,使用的技术有:Java OpenSSL、套接字编程、安全套接字编程、多线程编程,实现的功能主要有:WEB服务功能,具体包括监听客户端浏览器请求,并按请求内容进行响应;数据的安全传输,通过调用Java的SSL API ,实现数据在客户端和服务器之间的安全传输。经过本课题的研究设计,成功完成了基于OpenSSL的Web安全服务器的开发,实现了数据的安全传输,为互联网的安全尽了一份力。关键词 WEB服务器; OpenSSL;HTTPS;安全传输 THE DEVELOPMENT OF A OPENSSL-BASED SAFETY WEB SERVERABSTRACTTodays society, Internet became the main source of data exchange. People enjoy the convenience of Internet, but also suffer from safety problems. Because the data transmission on Internet is transmitted in clear text, Internet data can easily be intercepted and read , resulting in information disclosure. Therefore, the security of Internet cause for concern more and more, the issue also came into being in this need .The main methods of accessing Internet is through the client browser ,and, there is support in the appropriate protocol server program on the browsers request to respond, it is Web server. Web server can get the browsers request, and response the request. Moreover, Web server also ensure the security of data transmission. Through the HTTPS protocol based on SSL, Web server implements the process of encryption and decryption in data transmission, and ensure the security of data transmission.This issue implement the security features Web server through OpenSSL provided by Java language.Its development environment bases on MyEclipse, using technologies: Java OpenSSL, socket programming, secure sockets programming, multithread programming, functions are: Web Services, including listening the client browsers requests and response it; secure transmission of data between client and server by calling Javas SSL API.After the design and research of the issue, I completed the development of openssl-based safty web server , and did my best to ensure datas transmission in safty.Key Words:Web server;OpenSSL;Https;Secure transmission目 录第1章 绪 论11.1引言11.2论文的组织结构2第2章 技术背景32.1开发语言32.2开发环境32.3使用技术42.3.1套接字Socket42.3.2SSL安全套接字52.3.3OpenSSL62.3.4多线程8第3章 系统分析103.1可行性分析103.1.1技术可行性103.1.2市场可行性113.2需求分析133.2.1功能需求133.2.2性能需求133.3运行环境153.3.1硬件环境153.3.2软件环境15第4章 系统总体设计164.1系统设计总体目标164.2设计模式164.3功能设计18第5章 系统详细设计与实现205.1系统基本功能205.2系统功能实现205.2.1监听功能205.2.2并发功能215.2.3请求处理235.2.4安全传输255.3功能整合285.3.1功能流程285.3.2类和主要方法介绍29第6章 系统测试316.1测试环境316.1.1测试平台316.1.2测试软件316.2测试316.2.1HTTP测试326.2.2HTTPS测试346.2.3性能测试36第7章 结束语387.1总结387.2展望38致 谢39参考文献40源码附件41 基于OpenSSL的安全Web服务器开发第1章 绪 论1.1 引言随着计算机及通讯技术的飞速发展,信息安全已经渗透到社会经济生活的各个方面,对社会进步与经济发展起着越来越重要的作用,也使人们的工作甚至生活方式发生了巨大的变革。网络规模的激增,网络复杂性和异构性的焦点化,使得网络安全问题上升到了的战略性位置。信息安全是自古以来就存在的概念,比如以前为了保证传递书信的保密性,使用腊封或其它方式将书信封装在信封内;还有使用暗号口令确认接受信息的人的身份等等方法。需要注意的是,信息安全技术是跟信息的载体形式和传送媒介密切相关的,信息载体的变化和信息传送媒介的变化必然会导致信息安全技术的变化发展。 在过去的二十多年中,信息技术取得令人惊异的发展,越来越多的有价值的信息和资料以数字信息存放在计算机等数字信息存储设备中。与此同时,信息共享技术也获得了巨大的突破,以 Internet 的发展为代表,短短的时间内,从美国军方的一个专用网络发展到联系着全世界千千万万人的膨大信息网络。 这些客观的变化导致对信息安全的要求发生了重大的变化。 随着信息数字化以及计算机应用的发展, 对存储在计算机中的文件和其它数字信息的保护需求成为了一种必然,尤其对一个能够通过公共网络进入的共享系统来说,这种需求显得尤为迫切。针对这种需求目前发展起来的技术有防病毒技术和防火墙技术等等。有些文献将这些保护数据、阻挡非法数据访问的技术统称为计算机安全或系统安全技术。 信息安全技术的另外一个重要变化是由于网络和通信设施的产生和应用引起的。 这些网络和通信设施用来在用户各种终端以及计算机之间传输数据信息, 这个传输过程很容易受到非法窃听等攻击,这就需要对在网络中传输的数据采取安全的保护措施。针对这种需求发展起来的技术有 VPN、SSL 等。1.2 论文的组织结构 本系统是按照面向对象的开发流程来设计和开发的,所以本文也是按照这个开发流程来写的。首先对该系统进行可行性分析性,包括技术可行性、市场可行性,并在此介绍课题背景、所用技术。确定了系统开发的可行性后,就开始对系统进行需求分析,首先以文字的形式尽可能完善的定义需求,然后以更直观形象的用例分析来进行功能需求的定义和补充。接下来,花费比较小的代价进行原型的设计,这个阶段能对需求进行细化和查漏补缺,至此,需求已经定义好了。接下来是进行性能分析和运行环境的介绍。然后进行系统的概要设计,此阶段先介绍系统的总体功能模块,然后介绍各个子功能模块。此时,以及对系统有了个清晰的轮廓,就该进行系统的详细设计。详细设计主要是系统总体架构的设计,此阶段包括了系统开发环境的搭建,类包结构的设计。接下来进行功能模块的详细设计,此处对各层的主要类和帮助类进行了介绍。设计完毕后,剩下的是代码的编写和功能的测试。由于系统模块比较多,所以接下来对本系统一个关键功能的详细实现过程进行分析。最后是介绍系统功能的测试。第2章 技术背景2.1 开发语言本设计采用Java语言来进行开发。Java是Sun公司推出的一种编程语言。它是一种通过解释方式来执行的语言,语法规则和C+类似。同时,Java也是一种跨平台的程序设计语言。用Java语言编写的程序叫做“Applet”(小应用程序),用编译器将它编译成类文件后,将它存在WWW页面中,并在HTML档上作好相应标记,用户端只要装上Java的客户软件就可以在网上直接运行“Applet”。 Java非常适合于企业网络和Internet环境,现在已成为Internet中最受欢迎、最有影响的编程语言之一。 Java有许多值得称道的优点,如简单、面向对象、分布式、解释性、可靠、安全、结构中立性、可移植性、高性能、多线程、动态性等。Java摈弃了C+中各种弊大于利的功能和许多很少用到的功能。 Jave可以运行与任何微处理器,用Java开发的程序可以在网络上传输,并运行于任何客户机上。Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface,简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.5,最近版本为Java1.7。2.2 开发环境本设计采用MyEclipse 6.0进行开发。MyEclipse 企业级工作平台,简称MyEclipse,是对Eclipse IDE的扩展,利用它我们可以在数据库和 J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的J2EE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。在结构上,MyEclipse 的特征可以被分为7 类: 1. J2EE模型 2. WEB开发工具 3. EJB开发工具 4. 应用程序服务器的连接器 5. J2EE项目部署服务 6. 数据库服务 7. MyEclipse 整合帮助 对于以上每一种功能上的类别,在Eclipse 中都有相应的功能部件,并通过一系列的插件来实现它们。MyEclipse 结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。2.3 使用技术基于以上需求分析,本系统的实现主要采用了多线程、套接字Socket技术、网络输入输出流、文件输入输出流、SSL安全套接字以及Java OpenSSL API1。2.3.1 套接字SocketSocket的英文原义是“插槽、插座”。在网络通信中通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过“套接字”向网络发出请求或者应答网络请求。Socket利用网间网通信设施实现进程通信,但它对通信设施的细节毫不关心,只要通信设施能提供足够的通信能力,就可以了。Socket提供了进程通信的端点。进程通信之前,双方首先必须各自创建一个端点,否则没有办法建立联系并相互通信2。最重要的是,Socket 是面向客户/服务器模型而设计的,针对客户和服务器程序提供不同的Socket 系统调用。客户随机申请一个Socket,系统为之分配一个Socket号;服务器拥有全局公认的 Socket ,任何客户都可以向它发出连接请求和信息请求。Socket利用客户/服务器模式巧妙地解决了进程之间建立通信连接的问题。服务器Socket为全局所公认非常重要。假如通信双方没有任何一方的Socket 固定,就好比打电话的双方彼此不知道对方的电话号码,要通话是不可能的3。套接字成对出现,其中一个运行于客户机端,称之为ClientSocket,另一个运行于服务器端,称之为ServerSocket。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。常用的Socket类型有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。本程序采用TCP协议,因为流控和差控的存在使得传输更具有稳定性。UDP虽然效率更高,但是有掉包的情况出现,这是本方案所不允许的。2.3.2 SSL安全套接字SSL是Secure Socket Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输4。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。目前,利用公开密钥技术的SSL协议,已成为Internet上保密通讯的工业标准。安全套接层协议能使用户/服务器应用之间的通信不被攻击者窃听,并且始终对服务器进行认证,还可选择对用户进行认证。SSL协议要求建立在可靠的传输层协议(TCP)之上。SSL协议的优势在于它是与应用层协议独立无关的,高层的应用层协议(例如:HTTP,FTP,TELNET等)能透明地建立于SSL协议之上5。SSL协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性。通过以上叙述,SSL协议提供的安全信道有以下三个特性:(1)数据的保密性 信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。没有了密钥,就无法解开加密的数据。数据加密之后,只有密钥要用一个安全的方法传送。加密过的数据可以公开地传送。 (2)数据的一致性 加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。 (3)安全验证 加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。2.3.3 OpenSSLOpenSSL是一个开放源代码的SSL协议的产品实现,它采用C语言作为开发语言,具备了跨系统的性能。OpenSSL 项目最早由加拿大人 Eric A. Yang和 Tim J. Hudson 开发,现在由 OpenSSL 项目小组负责改进和开发,这个小组是由全球的一些技术精湛的志愿技术人员组成,它们的劳动都是无偿的,在此我们应该向他们表示崇高的敬意。 OpenSSL最早的版本在1995年发布,1998年后开始由OpenSSL项目组维护和开发。当前最新的版本是 0.9.7b版本,完全实现了对 SSLv1、SSLv2、SSLv3和 TLS的支持。OpenSSL的源代码库可以从 OpenSSL 的官方网站自由下载, 并可以免费用于任何商业或非商业的目的。由于采用C语言开发,OpenSSL 的源代码库具有良好的跨平台性能,支持Linux、Unix、Windows、Mac 和VMS等多种平台。目前,OpenSSL已经得到了广泛的应用,许多类型的软件中的安全部分都使用了OpenSSL 的库,如VOIP的OpenH323 协议、Apache服务器、Linux 安全模块等等。我们有理由预期,OpenSSL 和其所倡导的开放源码的思想必将被众多的支持者更加发扬光大。 虽然OpenSSL使用SSL作为其名字的重要组成部分,但其实现的功能确远远超出了SSL协议本身。OpenSSL 事实上包括了三部分:SSL 协议、密码算法库和应用程序。SSL 协议部分完全实现和封装了 SSL 协议的三个版本和 TLS 协议,SSL 协议库的实现是在密码算法库的基础上实现的。使用该库,你完全可以建立一个SSL 服务器和 SSL 客户端。该部分在 Linux 下编译会形成一个明文 libssl.a 的库,在 Windows 下则是名为 ssleay32.lib的库。 密码算法库是一个强大完整的密码算法库,它是 OpenSSL 的基础部分,也是很值得一般密码安全技术人员研究的部分,它实现了目前大部分主流的密码算法和标准。主要包括公开密钥算法、对称加密算法、散列函数算法、X509 数字证书标准、PKCS12、PKCS7 等标准。事实上,OpenSSL 的 SSL 协议部分和应用程序部分都是基于这个库开发的。目前,这个库除了可以使用本身的缺省算法外,在 0.9.6版本之后,还提供了 Engine 机制,用于将如加密卡这样外部的加密算法实现集成到 OpenSSL 中。密码算法库在 Linux 编译后其库文件名称为 libcrypto.a,在 Windows 下编译后其库文件为 libeay32.lib。应用程序部分是 OpenSSL 最生动的部分,也是 OpenSSL 使用入门部分。该部分基于上述的密码算法库和 SSL 协议库实现了很多实用和范例性的应用程序,覆盖了众多的密码学应用。主要包括了各种算法的加密程序和各种类型密钥的产生程序(如 RSA、Md5、Enc等等)、证书签发和验证程序(如 Ca、X509、Crl 等)、SSL 连接测试程序(如 S_client 和S_server等)以及其它的标准应用程序(如 Pkcs12 和Smime 等)。在某些时候,不需要做二次开发,仅仅使用这些应用程序便能得到我们的应用要求,比如采用Ca程序就能基本上实现一个小型的CA功能。这些应用程序同时也是很好的使用OpenSSL加密算法库和 SSL协议库的优秀例子,比如 Ca、Req和X509程序就是使用OpenSSL的库开发一个 CA 中心服务器的优秀例子,又如S_client和S_server程序就是利用SSL协议库建立 SSL安全连接的优秀例子。2.3.4 多线程在计算机编程中,一个基本的概念就是同时对多个任务加以控制6。许多程序设计问题都要求程序能够停下手头的工作,改为处理其他一些问题,再返回主进程。可以通过多种途径达到这个目的。最开始的时候,那些掌握机器低级语言的程序员编写一些“中断服务例程”,主进程的暂停是通过硬件级的中断实现的。尽管这是一种有用的方法,但编出的程序很难移植,由此造成了另一类的代价高昂问题。中断对那些实时性很强的任务来说是很有必要的。但对于其他许多问题,只要求将问题划分进入独立运行的程序片断中,使整个程序能更迅速地响应用户的请求。最开始,线程只是用于分配单个处理器的处理时间的一种工具。但假如操作系统本身支持多个处理器,那么每个线程都可分配给一个不同的处理器,真正进入“并行运算”状态。从程序设计语言的角度看,多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器。程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行得更快,毋需作出任何特殊的调校。根据前面的论述,大家可能感觉线程处理非常简单。但必须注意一个问题:共享资源!如果有多个线程同时运行,而且它们试图访问相同的资源,就会遇到一个问题。举个例子来说,两个进程不能将信息同时发送给一台打印机。为解决这个问题,对那些可共享的资源来说(比如打印机),它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定,在完成了它的任务后,再解开(释放)这个锁,使其他线程可以接着使用同样的资源。多线程是为了同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。线程是在同一时间需要完成多项任务的时候实现的。每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。进程也可能是整个程序或者是部分程序的动态执行。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。线程是程序中一个单一的顺序控制流程.在单个程序中同时运行多个线程完成不同的工作,称为多线程。线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文.多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定. 线程的运行中需要使用计算机的内存资源和CPU。第3章 系统分析3.1 可行性分析3.1.1 技术可行性技术可行性分析是根据新系统的目标来衡量是否具备所需要的技术,包括系统开发人员数量和水平,硬件方面,软件方面及其它应用技术。为本系统的开发我特地进行了深入的调查研究。WEB服务器的技术功能是监听客户端浏览器的请求,获取请求的报文,解析报文得到报文的要求。如果是请求获得某一HTML文档,Web服务器会接收到一个HTTP请求,然后返回一个HTTP响应,例如送回一个HTML页面。为了处理一个请求,Web服务器可以响应一个静态页面或图片,进行页面跳转,或者把动态响应的产生委托给一些其它的程序例如CGI脚本,JSP脚本, ASP脚本,服务器端脚本,或者一些其它的服务器端技术。无论它们的目的如何,这些服务器端的程序通常产生一个HTML的响应来让浏览器可以浏览7。Web服务器的代理模型比较简单。当一个请求被送到Web服务器里来时,它只要把请求传递给可以很好的处理请求的程序。Web服务器仅仅提供一个可以执行服务器端程序和返回(程序所产生的)响应的环境,而不会超出职能范围。服务器端程序通常具有事务处理,数据库连接和消息等功能8。 虽然Web服务器不支持事务处理或数据库连接池,但它可以配置各种策略来实现容错性和可扩展性,例如负载平衡,缓冲。集群特征经常被误认为仅仅是应用程序服务器专有的特征9。从上面看了,在技术上,对相关资源及需求方向有了进一步的认识。相关参考资料比较充足,并且开发人员对用户所提出的要求也都能够满足。主要是采用J2SE技术,利用流行的开发模式。综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。3.1.2 市场可行性Netcraft和SecuritySpace是国际上公认的两大Web服务器分析统计权威机构。 通过对两大组织2009年1月份至2009年7月份的统计数据的对比分析,同时参考相关的研究报告,不难看出,以免费开源形式在业已成熟的Web服务器全球市场环境中博得一席之地的Web服务器,依然旗帜林立,阵容不俗。 归属此类阵营的主要Web服务器包括: 久负盛名的Apache, 功能丰富的WN, 精彩纷呈的Zope, 内建多线程支持的AOL Web服务器,灵活多变的Caudium, 设计精致的Xitami, 历史悠久的NCSA httpd, 小巧玲珑的thttpd, 同时还有支持Java特性的Jetty,Roxen和Resin等等。下面将对那些获得市场认同的、比较成功的开源Web服务器分别就其较有特色的功能特性作一简要的分析和介绍,或许能够从中得到些许启发,在自己的设计中予以适当地斟酌和借鉴10。(1)CERN httpd与Jigsaw :在万维网兴起的初期,CERN的开源Web服务器由于对http 1.0协议、通用网关协议CGI的支持,以及作为Proxy服务器等的多重功用性曾经风靡一时,起到了奠基石和里程碑的作用。CERN httpd在1996年发展到3.0版本之后,W3C组织停止了该系列服务器的研发, 另起炉灶,重新设计和开发了新型的Web服务器Jigsaw。Jigsaw实际上是W3C组织对新的Web服务器标准的参考实现,目的是为了展示新的协议(如HTTP 1.1、PICS、WebDAV乃至HTTP NG等)的功能特性,并作为其实现的样板和原型。 迄今为止,Jigsaw业已发展到目前的2.2.5版。 这是一个对于未来的Web技术发展具有前瞻性的设计理念,确保每一种设想、进展和跳跃都能得到初步的验证和迅速的实现,而不是闭门造车。在Jigsaw Web服务器的设计上,它采取了与众不同的体系结构, 根据Java的语言特性,将系统的服务层次划分为核心协议层(Daemon)、资源层(Resource)、过滤器层(Filter)和工具层(Utility),从而便于进一步的扩展。目前的Jigsaw支持最新的HTTP 1.1协议、CGI1.1协议,支持HTTP协议扩展框架、PICS协议、WebDAV协议等,同时具有Proxy功能和级联Proxy功能(包括对轻量级多播ICP的支持)。在安全性方面,Jigsaw 2.0已经内嵌了SSL的支持和HTTP基本认证以及摘要认证等。(2)Apache服务器:Apache Web服务器自1996年取代NCSA httpd成为Web服务器的领衔者之后,一直稳居市场头把金交椅的位置。由于Apache巨大的用户群基础和不断推陈出新的持续改进策略,使得它在激烈的竞争中立于不败之地,并逐渐赢得对手的尊重、扶植,如IBM公司和HP公司的操作系统都捆绑了Apache作为其Web服务器的选件。Apache目前存在两个版本: 1.3版和2.0 版。2.0版和1.3版本相比,在系统的架构上进行了彻底的重构,在核心层,支持Unix的线程机制,提供了多进程和多线程的混合应用模式,提升了系统的可伸缩性; 能够支持多种协议栈; 对于非Unix操作系统(包括BeOS、OS/2和Windows)提供了更好的支持;更新了Apache API, 以提供更强劲的功能; 通过过滤器机制提供更大的模块灵活性;全面支持IPv6; 提供可以定制的多种语言的错误信息响应;简化系统配置文件的复杂度;支持Windows NT/XP/2000的Unicode编码机制等。同时在系统的技术支持和知识库搜寻方面,由于Apache拥有世界上最大的用户群,任何的问题和疑难都能够比较容易地找到令你满意的答案,而任何的安全漏洞也会在巨大的开发群体的智慧池中灰飞烟灭。(3)Thttpd服务器:Thttpd是ACME公司设计的一款比较精巧的开源Web服务器。它的初衷是提供一款简单、小巧、易移植、快速和安全的HTTP服务器,而事实上,Thttpd也正是这样一款服务器。它在Unix系统上运行的二进制代码程序,仅仅400k左右,在同类Web服务器中应该是相当精巧的。在可移植性方面,它能够在几乎所有的Unix系统上和已知的操作系统上编译和运行。Thttpd在默认的状况下,仅运行于普通用户模式下,从而能够有效地杜绝非授权的系统资源和数据的访问,同时通过扩展它也可以支持HTTPS、SSL和TLS安全协议。Thttpd尤为称道的是已经全面支持IPv6协议, 并且具有独特的Throttling功能,可以根据需要限制某些URL和URL组的服务输出量。此外,Thttpd全面支持HTTP 1.1协议(RFC 2616)、CGI 1.1、HTTP 基本验证(RFC2617)、虚拟主机及支持大部分的SSI(Server Side Include)功能,并能够采用PHP脚本语言进行服务器端CGI的编程。3.2 需求分析3.2.1 功能需求Web系统在现在网络中广泛使用,而Web服务器则是Web系统的一个重要组成部分。完整的Web结构应包括:HTTP协议,Web服务器,通用网关接口CGI、Web应用程序接口、Web浏览器11。Web服务器是指驻留在因特网上某种类型计算机的程序。它是在网络中信息提供者基干HTTP的为实现信息发布、资料查询、数据处理等诸多应用搭建基本平台的服务器,其主要功能是提供网上信息浏览服务。当Web浏览器(客户端)连到服务器并请求文件时,服务器将处理该请求并将文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该文件(即文件类型)12。Web服务器在Web页面处理中大致可分为三个步骤:第一步,Web浏览器向一个特定的服务器发出Web页面请求;第二步,Web服务器接收到Web页面请求后,寻找所请求的Web页面,并将所请求的Web页面传送给Web浏览器;第三步,Web服务器接收到所请求的Web页面,并将它显示出来。Web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息的基础上运行脚本和程序。在Web上,常见的大多数表单核搜索引擎上都是用的是CGI脚本。具体功能需求:(1)获取浏览器请求。能获取浏览器的请求,支持GET、HEAD、POST、DELETE等命令。(2)安全传输。建立安全连接,在传输过程中的数据要进行加密,数据在传输过程中即使被截获也要保证数据不会泄露。(3)发送资源。将客户请求的资源准确的发送给客户,不造成数据的损失遗漏。3.2.2 性能需求作为一种资源的组织和表达机制,Web已成为Internet最主要的信息传送媒介。因此Web的性能已经成为判断一个网站成功与否的一个重要评估标准。而Web服务器则是决定Web性能的重要环节。Web服务器性能就是指一个Web服务器响应用户请求的能力。为了提高Web服务器的性能人们进行了诸多尝试,已经取得了可喜的成果。本文虽无很高的性能需求,不过也需要满足基本的性能要求,为此提出了在具体应用环境中优化Web服务器的方法和策略13。系统的开发必须便于系统既能满足目前的需要,又能适应将来扩展的需要,因此系统性能应符合以下原则:(1)实用性:要求访问速度和可以容纳的最大同时请求数都能达到一定的 要求,要能符合实际管理要求。 (2)易维护:要求系统能提供方便、灵活的维护手段,方便应用人员和设计开发人员的维护和管理。(3)实时性。实时监控客户端浏览器发起的请求,能立即解析该请求并能在最短的时间内回复。(4)安全性。在传输过程中的数据要进行加密,数据在传输过程中即使被截获也要保证数据不会泄露。(5)并发性。在同一时间内可以接受和处理多个请求。(6)网络通信量。尽量减少网络上传送的数据量,节省网络资源。(7)与平台无关性。适用于运行在不同操作系统的计算机上。影响Web应用服务器性能的因素:Web服务器的性能就是指一个Web服务器响应用户请求的能力,服务器的性能对于一个Web系统来说至关重要。为了提高Web服务器的性能人们进行了许多尝试,也采用了许多技术和方法,但是这些技术和方法往往缺乏适用性。通过对前人的研究分析可以发现,在Web服务器的优化方而存在这种问题的原因主要有两个:一方面是服务器性能评测造成的,一方面是选用优化方案时考虑不全面造成的。现行的服务器性能评测工具在对Web服务器进行评测时,其实是由一台或几台计算机模拟客户机,与被测的Web服务器进行通信,它们其实组成的只是一个局域网的环境,这与真正的广域网的环境有一定的差别。另外,评测工具在选择网络负载时,虽然已经尽可能的接近真实负载,但是与持续的高频率负载要求仍有差距;再者,在性能测试指标的选择与分析上也不够合理,造成了分析结果不够公正、可靠。而在选用优化Web服务器的方法时,往往只是考虑Web服务器这一个方面,很少结合具体的应用环境。所以就造成了评测结果不够科学,应用环境考虑不够全面,Web服务器性能优化缺乏针对性。因此在具体的应用环境下优化Web服务器的性能需要另外考虑以下两个主要因素:网络特性和Web负载特点。3.3 运行环境3.3.1 硬件环境 服务器 CPU:PIV 2.0 G以上 ,内存:1 G 客户机 CPU:Celeron 1.6 G以上,内存:512 M 硬盘空间:80MB以上 3.3.2 软件环境 操作系统: Windows Vista/Windows 7浏览器:Internet Explorer 8 程序开发语言:JAVAJDK版本:jdk1.5及以上第4章 系统总体设计4.1 系统设计总体目标系统设计的首要目标是实现需求的基本功能,系统的基本功能包括:(1)获取浏览器请求。能获取浏览器的请求,支持GET、HEAD、POST、DELETE等命令;(2)安全传输。建立安全连接,在传输过程中的数据要进行加密,数据在传输过程中即使被截获也要保证数据不会泄露;(3)发送资源。将客户请求的资源准确的发送给客户,不造成数据的损失遗漏;Web使用HTTP协议作为其传输协议,而HTTP采用明文传输,网络中传输的重要数据有被截获的危险。为保护重要数据的传输安全,应该使用经SSL加密后的HTTP,即HTTPS。Java语言对SSL进行了很好的实现封装,提供了调用OpenSSL的API,这大大简化了安全传输的功能实现,方便了安全的Web服务器的设计实现。4.2 设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样14。可复用面向对象软件系统现在一般划分为两大类:应用程序工具箱和框架(Framework),我们平时开发的具体软件都是应用程序,Java的API属于工具箱;而框架是构成一类特定软件可复用设计的一组相互协作的类,EJB(Enterprise Java Beans)是Java应用于企业计算的框架。框架通常定义了应用体系的整体结构类和对象的关系等等设计参数,以便于具体应用实现者能集中精力于应用本身的特定细节。框架主要记录软件应用中共同的设计决策,框架强调设计复用,因此框架设计中必然要使用设计模式。 另外,设计模式有助于对框架结构的理解,成熟的框架通常使用了多种设计模式。 本设计采用了工厂设计模式,工厂模式是我们常用的模式,工厂模式在Java程序系统可以说是随处可见。图4.1工厂设计模式模型为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。我们以类Sample为例, 如果我们要创建Sample的实例对象:Sample sample=new Sample();可是,实际情况是,通常我们都要在创建sample实例时做点初始化的工作,比如赋值 查询数据库等。首先,我们想到的是,可以使用Sample的构造函数,这样生成实例就写成:Sample sample=new Sample(参数);但是,如果创建sample实例时所做的初始化工作不是象赋值这样简单的事,可能是很长一段代码,如果也写入构造函数中,那你的代码很难维护(就需要Refactor重整)。这时我们就需要Factory工厂模式来生成对象了,不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample, 按照面向接口编程,我们需要将Sample抽象成一个接口.现在Sample是接口,有两个子类MySample 和HisSample .我们要实例化他们时,如下:Sample mysample=new MySample();Sample hissample=new HisSample();这样在以后新增实例类时,可以非常方便的修改程序。4.3 功能设计安全的WEB服务器的主要功能有:(1)获取浏览器请求。能获取浏览器的请求,支持GET、HEAD、POST、DELETE等命令。(2)安全传输。建立安全连接,在传输过程中的数据要进行加密,数据在传输过程中即使被截获也要保证数据不会泄露。(3)发送资源。将客户请求的资源准确的发送给客户,不造成数据的损失遗漏。总体功能结构(如图4.3所示)包括普通HTTP传输和安全HTTPS传输两部分。其中HTTP功能包括三大模:建立连接,通过监听本地的某一端口(本程序采用默认80端口)来获取浏览器发起的连接;在获取连接之后可以查看连接的类型,如获取本地某一资源想HTML页面等;将客户端请求的资源返回给客户端,如HTML页面,将文件以文本的方式通过网络流发给客户端浏览器,传输结束后断开连接。HTTPS的功能要比HTTP传输多一点,主要是在开始的连接方面:HTTPS要实现安全传输首先要建立安全通道,首先客户端请求安全连接,服务器返回公开密钥的公开的加密密钥,客户端生成对称密钥,将此密钥用公开密钥加密后传输给服务器,服务端用公开密钥的非公开部分解密报文后获得对称密钥,此后双方以此对称密钥进行加密传输,后续过程就是普通HTTP请求回复的过程15。WEB服务器HTTP传输HTTPS传输监听80端口,等待请求建立安全连接,并处理请求监听443端口等待连接请求,发送证书返回请求资源后或其他资源后断开连接返回请求资源或其他信息后断开连接获取请求,并建立连接图4.2 总体功能结构为满足功能需求,功能设计需要对需求进行一一实现:对浏览器的请求通过读取浏览器的输入流的字符串来进行解析,具体为获得第一行数据,以空格分隔,第一段字符串与GET、HEAD、POST、DELETE进行匹配,然后执行相应的操作。安全传输是本设计的主要目标,安全传输通过调用Java OpenSSL API来实现。在原有的ServerSocket的基础上,Java语言对OpenSSL进行了封装。ServerSocket只要提供端口号,通过new的方式就可以实例出服务器监听器;SSLServerSocket的实例化比较复杂:首先要获得密钥管理器,通过密钥管理器把证书加载到密钥商店,然后同安全套接字上下文解析证书加载到服务器,最后创建出安全的服务器监听器。发送资源的设计是通过输入输出流的方式,WEB服务器的输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论