1、青岛农业大学毕业论文(设计)题目基于OPENSSL的安全WEB服务器的设计与实现姓名学院理学与信息科学学院专业计算机科学与技术班级08级03班学号20082854指导教师2012年6月16日基于OPENSSL的安全WEB服务器的设计与实现摘要随着计算机网络技术的飞速发展,基于计算机网络诸多业务,如电子商务、电子政务、网上银行迅猛的发展,为人们的生活和工作带来了很多的方便。然而,由于INTERNET的开放性、灵活性、共享性等特点,也为人们带来了巨大的安全威胁。如何在网络中共享信息的同时更加有效地保障我们的信息不被他人窃取、利用保护个人的信息安全,已成为人们共同关注的问题。默认情况下WEB服务使用
2、的传输协议是HTTP,而HTTP协议是没有任何加密措施的,服务器和客户之间通讯的所有的信息全部采用明文传输,恶意的攻击者可以通过安装监听程序来获得我们和服务器之间的通讯内容。因此,如何保证服务器和客户之间通讯的安全性,保证双方交易信息的保密性、完整性已成为亟待解决的问题。本设计基于LINUX平台,利用OPENSSL开放源码库,实现了具有安全性的WEB服务器,实现了服务器和客户之间的安全通信。服务器端通过出示数字证书进行身份认证,SERVER同时限定CLIENT也要出示身份验证,实现了更具有可信性的双向认证;通过采用SSL中的加密算法对传输的数据进行加密,以保证双方传输数据的机密性;采用相关哈希
3、函数如MAC,对数据进行验证,以保证数据的完整性,确保信息数据在传输途中不会被非法篡改。从而为完成服务器与浏览器之间的安全通讯提供了保障。关键词信息安全;安全套接接字层;OPENSSL;HTTPSTHEDESIGNANDIMPLEMENTATIONOFSECUREWEBSERVERBASEDONOPENSSLABSTRACTWITHTHERAPIDDEVELOPMENTOFCOMPUTERNETWORKTECHNOLOGY,BUSINESSSUCHASECOMMERCE,EGOVERNMENT,EBANKBASEDONCOMPUTERNETWORK,HASBROUGHTALOTOFCONVEN
4、IENCEFOROURDAILYLIFEHOWEVER,DUETOTHEOPENNESS,FLEXIBILITY,ANDSHARINGOFTHEINTERNET,ITALSOEXPOSESUSTOTHETHREATOFLEAKINGOURPERSONALINFORMATIONITCAUSESHIGHLYHEIGHTENEDCONCERNSTOENSUREOURPERSONALINFORMATIONSECUREDINCOMPUTERNETWORKS,RECENTLYHTTPISUSEDTODELIVERMESSAGESINWEBSERVERS,WHICHHASNOPROTECTIONINANYW
5、AYALLMESSAGES,WHICHCANBEMONITOREDBYATTACKERS,AREPLAINTEXTINCOMMUNICATIONBETWEENSERVERANDCLIENTTHUS,ITHASBECOMEANEMERGENCYTOSECURECONFIDENTIALITY,INTEGRITYOFTHEINFORMATIONINTRANSACTIONSINTHISARTICLE,WECONSTRUCTTHEPROJECTUSINGOPENSSLTOIMPLEMENTWEBSERVERPROGRAM,WHICHENSUREASECURECOMMUNICATIONBETWEENTHE
6、SERVERANDCLIENTDOUBLESIDEDAUTHENTICATIONPROTECTSTHEINFORMATIONFROMATTACKERSAMONGTHESERVERANDCLIENTTHROUGHDIGITALCERTIFICATESINTHEFRAMEWORKOFSSL,ASPECIFICENCRYPTIONALGORITHMISUSEDTOACHIEVETHECONFIDENTIALITYANDONEKINDOFHASHALGORITHMSISAPPLIEDTOGUARANTEETHEINTEGRITYOFTHEDATAINTRANSMISSION,WHICHPROVIDES
7、AGUARANTEEFORTHESECURECOMMUNICATIONBETWEENTHESERVERANDBROWSERKEYWORDSINFORMATIONSECURITY;SSL;OPENSSL;HTTPSI目录第一章引言111课题的研究背景112课题研究的目的和意义313课题的研究内容及目标414本文的组织结构4第二章信息安全理论知识521密码学基础5211密码体制5212密码体制的分类6213对称密码体制6214公钥密码体制722消息认证与数字签名8221消息摘要8222数字签名823公钥基础设施9231公钥基础设施的概念9232公钥基础设施的组成10233数字证书1124安全套接字
8、层11241SSL概述11242SSL协议的结构12243SSL记录协议12244SSL握手协议1325本章小结16第三章WEB服务器开发基础1731LINUX操作系统17311LINUX操作系统简介17312GNU编译器套装18313MAKE命令与MAKEFILE文件19314GDB调试工具2132OPENSSL介绍22321OPENSSL的功能23322OPENSSL的组成23323OPENSSL的优缺点2533TCP/IP协议分析25331TCP/IP协议概述25332网络层协议(IP协议)26333传输层协议(TCP和UDP)2634HTTP协议分析27341客户端请求27II342服
9、务器响应28343HTTP消息交换2835HTTPS协议简介2936SOCKET编程30361套接字连接30362套接字属性3137本章小结31第四章基于OPENSSL的安全WEB服务器的设计3341系统实现的功能3342程序的设计思路3343安全WEB服务器程序的模块设计37431初始化模块37432WEB服务模块3744本章小结39第五章基于OPENSSL的安全WEB服务器的实现4051开发环境的搭建40511编译OPENSSL40512编译生成OPENSSL动态链接库40513搭建CA生成证书文件4152详细设计42521初始化编程环境42522创建SOCKET45523创建监听线程46
10、524创建客户端线程48525分析请求48526发送请求文件5053本章小结55第六章总结与展望5661全文总结5662研究展望56致谢58参考文献59引言1第一章引言随着计算机网络技术的发展,21世纪已经成为一个数字化、网络化、信息化的时代,而它的核心是网络。要实现信息化就要依靠完善的网络,因为网络可以实现跨时间、空间的数据传输,从而使信息得到共享。自上个世纪90年代以来,以因特网(INTERNET)为代表的计算机网络得到了飞速的发展,已从最初的教育科研网逐步发展成商业网络,并已成为仅次于全球电话网的世界第二大网络。如今,因特网正在改变我们日常生活和工作的各个方面,加速了全球信息革命的进程。
11、可以毫不夸张的说,因特网是人类自印刷术发明以来在通信方面最伟大的变革。11课题的研究背景据中国互联网络信息中心(CNNIC)于2012年1月16日在北京发布的第29次中国互联网络发展状况统计报告显示,截至2011年12月底,中国网民数量突破5亿,达到513亿,全年新增网民5580万。互联网普及率较上年底提升4个百分点,达到383。图11中国网民规模与普及率此外,20082010年,网络购物用户规模连续3年保持50左右的高速增长。我国网络购物用户规模达到194亿人,网络购物使用率提升至378。与2010年相比,网络购物用户增长3344万人,增长率为208。随着我国电子引言2商务的普及,网民的理财
12、习惯正逐步向网上交易转移,针对网上银行、证券机构和第三方支付的攻击将剧增。图12200712201112我国网购用户数量、增长率及渗透率以上两组数据表明中国有着极其庞大的网络用户群和接近两亿的网购用户。在这个惊人的数字背后,有一个我们不得不面对的问题,那就是网络信息安全。这个问题自从网络诞生以来就一直困扰着我们,只不过如今计算机网络的发展远超出了以前的预计,所以在网络社会日益发达的今天,个人信息安全问题似乎变得尤为重要。2011年12月21日,中国互联网遭遇了一次强大的“地震”,从国内最大的中文技术社区CSDN用户数据库被泄漏开始,几天时间内,国内多家大型网站用户数据库被陆续曝光,在互联网上广
13、泛流传。更为严重的是,被泄漏的用户数据库大多数包含明文保存的用户密码,受影响用户数以亿计。据2011年中国互联网网络安全报告显示,截至2011年12月29日,CNCERT通过公开渠道获得疑似泄露的数据库有26个,涉及帐号、密码278亿条。其中,具有与网站、论坛相关联信息的(例如,被声称属于某个网站的数据)数据库有12个,涉及数据136亿条;无法判断网站、论坛关联性的数据库有14个,涉及数据142亿条。这次“地震”过去仅仅一个月时间,2012年1月25日,新浪微博中再次爆出PUTTY、WINSCP等SSH管理软件中文版本(汉化版)存在后门程序导致用户信息泄露的事件情况。至1月30日、31日,网络
14、安全企业、相关博客、论坛以及业内人士等纷纷披露并确认后门程序存在的情况,同时还披露了黑客通过后引言3门程序窃取大量SSH管理软件用户信息系统相关的账号和口令信息、存储在后门程序服务器的情况。随后,由于黑客的后门程序服务器存在SQL注入漏洞以及目录权限漏洞,导致其存储的窃取信息被更多的人获得。CSDN和天涯社区用户数据泄漏、部分SSH管理软件中文版本存在后门程序导致用户信息泄露等安全事件带来了广泛的社会影响,再一次对互联网企业和互联网用户敲响了安全警钟。互联网安全已经受到非常严峻的挑战。12课题研究的目的和意义互联网技术的快速发展,给我们的计算机信息系统,特别是网络通讯带来了极其危险的安全隐患,
15、面对日益严重的网络安全问题,计算机网络应用必须考虑和解决一个重要的课题,即如何在网络中共享信息的同时更加有效地保障我们的信息不被他人窃取、利用保护个人的信息安全。正如BRUCESCHNEIER所说,安全问题就如同一条链子,必须保证每一个环节的安全才能达到使整个链子具有安全性。所以在解决每一个安全问题之前,都应先分析其可能存在的安全缺陷,进而采取相应的安全措施。而以下的几个方面体现了信息的安全性(1)机密性CONFIDENTIALITY)通过加密等手段,保护信息免受主动的非法窃取、阅读等攻击;(2)完整性(INTEGRITY)确保信息数据在传输途中不会被非法篡改,也可以防止假冒的信息;(3)鉴别
16、(AUTHENTICATION)确认访问者的身份或消息的来源,防止冒充他人的行为发生;(4)不可否认性(NONREPUDIATION)保证消息制造者或发出者不能在事后否认他制造或发出的消息。本课题研究的目的就是通过设计一个安全WEB服务器程序来保证信息传递过程中的安全,从而实现信息的安全传输。本文在LINUX平台下利用OPENSSL源码库,成功地实现了安全WEB服务器的设计,也是在SSL协议的基本框架下搭建的一个网络安全WEB平台,用户可以在请求页面的同时受到SSL安全连接的保护,使用户的个人信息安全得到保障。引言413课题的研究内容及目标本文的撰写分为三部分首先是对密码学基础知识、数字签名(
17、DIGITALSIGNATURE)、信息摘要(MESSAGEDIGEST)、公钥基础设施(PKI)、安全套接字层协议(SSL协议)等信息安全知识的介绍,为下一步安全WEB服务器的设计和实现打下理论基础,做好实践的铺垫;第二部分是进行WEB服务器开发的编程基础,包括对LINUX平台、OPENSSL源码、TCP/IP协议、HTTPS协议、SOCKET编程相关知识的补充;最后则是根据以上两部分的理论研究和阐述,利用OPENSSL源码在LINUX平台下用C语言实现安全WEB服务器。利用此服务器程序来实现用户信息及用户所请求页面信息的机密性、完整性、鉴别和不可否认性。14本文的组织结构本文的组织结构安排
18、如下第一章引言,简要阐明本课题的研究背景、目的和意义,以及要实现的目标。第二章信息安全的理论知识,阐述了诸如密码学基础知识、信息摘要(MESSAGEDIGEST)、数字签名(DIGITALSIGNATURE)、公钥基础设施(PKI)、安全套接字层协议(SSL协议)等相关理论知识。第三章WEB服务器开发的基础,包括对LINUX平台、OPENSSL源码、TCP/IP协议、HTTPS协议、SOCKET编程的介绍。第四章讲述的是基于OPENSSL的安全WEB服务器程序的设计,提出设计思路、结构、目标、各模块整体流程。第五章是根据前面章节服务器程序的设计,实现一个基于OPENSSL的安全WEB服务器程序
19、,并通过测试验证网络的安全性。第六章主要是总结全文,提出本次设计和实践中的不足,对一下步的研究方向及程序改进提出建议。信息安全理论知识5第二章信息安全理论知识在这一章我们主要介绍一些有关的信息安全理论知识,包括密码学基础,消息认证,数字签名,公钥基础设施(PKI)和安全套接字层。21密码学基础密码学CRYPTOLOGY是研究信息系统安全保密的科学。它包含两个分支,一个是对信息进行编码以保护信息的密码编码学(CRYPTOGRAPHY),另外一个是研究分析破译密码的密码分析学(CRYPTANALYSIS)。密码技术的思想是伪装信息,使未授权者不能理解它的真实含义。它分为两个部分,第一部分是信息保密
20、,第二部分是信息认证。信息保密用来抵抗被动攻击,保证信息的机密性,信息认证用来抵抗主动攻击,保证信息的完整性和不可否认性。本小节前一部分主要是实现信息保密,比如对称密码体制的密码算法。而后面的一部分主要是消息认证,像非对称密码体制的密码算法。211密码体制一个密码系统,通常简称为密码体制(CRYPTOSYSTEM),它由五个部分组成(1)明文空间M,它是全体明文的集合。(2)密文空间C,它是全体密文的集合。(3)密钥空间K,它是全体密钥的集合。其中每一个密钥K均由加密密钥KE和解密密钥KD组成,即K。(4)加密算法E,它是一族由M到C的加密变换。(5)解密算法D,它是一族由C到M的解密变换。对
21、于每一个确定的密钥,加密算法将确定一个具体的加密变换,解密算法将确定一个具体的解密变换,而且解密变换就是加密变换的逆变换。对于明文空间M中的每一个明文M,加密算法E在密钥KE的控制下将明文M加密成密文C,即CEM,KE;而解密算法D在密钥KD的控制下将密文C解密成明文M,即MDC,KDDEM,KE,KD。信息安全理论知识6212密码体制的分类密码体制的核心是加解密算法。在加解密过程中,根据密码算法所使用的加密密钥是否相同或者是否能由其中一个很容易推出另一个,可将密码体制分为对称密码体制(又称单钥密码体制)和非对称密码体制(又称双钥密码体制,也称为公钥密码体制)。也就是说,如果一个密码体制的KE
22、KD,或由其中一个很容易推出另一个,则称为单密钥密码体制或对称密码体制,否则称为双密钥密码体制或非对称密码体制。进而,如果在计算机上KD不能由KE推出,这样将KE公开也不会损害KD的安全,于是便可将KE公开。这种密码体制称为公开密钥密码体制,简称为公钥密码体制。213对称密码体制对称密码体制对明文消息加密有两种方式一是明文消息按字符(如二元数字)逐位进行加密,称之为流密码;另一种是将明文消息分组(含有多个字符),逐组地进行加密,称之为分组密码。以往存在的密码绝大多数都是对称密码,它已经存在了很长时间。比如最早使用密码技术的应该是四千年前的古代埃及人。而在公元前约50年,罗马皇帝朱利叶凯撒(JU
23、LIUSCASESAR)发明了一种用于战时秘密通信的方法,后来被称为凯撒密码。随着计算机技术的飞速发展,由于商业应用和大量网络通信的需要,密码技术得到了前所未有的发展。1977年美国国家标准局正式发布数据加密标准DES(DATAENCRYPTIONSTANDARD)作为联邦标准,并免费提交美国公众使用。不得不说自从DES出现后密码学领域得到了重大的革新,从原来的保护加密算法,到如今的保护加密密钥,使密码学这个古老的学科焕发出新的活力。而事实证明对称密码体制的确有着非常重要的特点,集中表现在以下几个方面在对称密码体制中,同一个密钥既用于加密也用于解密。对称加密速度快。因为接收者需要得到对称密钥,
24、所以对称加密容易受到中途拦截窃听的信息安全理论知识7攻击。对称密码体制中密钥的个数大约是以参与者数目的平方的速度增长,因此难将它的应用扩展到大范围的人群中。对称密码体制需要复杂的密钥管理。对称密码技术不适用于数字签名和不可否认性。214公钥密码体制公钥密码体制的概念于1976年由WDIFFIE和MHELLMAN提出,它的产生是密码学历史上的一次革命,它对于保密通信、密钥分发和鉴别等领域有着深远的影响,它的出现是密码发展史上的里程碑。公钥密码体制的出现解决了对称密码体制中密钥分发的难题,使密钥的个数不再是以参与者的数目的平方的速度增长,它提供了一种全新的的加密模式。在公钥密码之前的整个密码学的发
25、展史中,所有的密码算法,都是基于代换和置换这两个工具的。而公钥密码体制不再基于代换和置换,而是基于数学函数。但是我们要注意的是,并不是说公钥密码在防范密码分析上比对称密码更安全。事实上任何密码方案的安全程度都依赖于密钥的长度和破译密码所包含的计算工作量,从抗击密码分析的角度讲,无论对称密码还是公钥密码原则上都没有比对方优越的地方。还有就是也并不能说公钥密码使得对称密码已经过时了。相反,由于当前公开密钥加密在计算上的巨大开销,导致公钥密码必须与对称密码相互取长补短,结合使用。下面是公钥密码体制的一些特点使用公钥密码技术时,用一个密钥加密的东西只能用另外一个密钥解密。需要分发的密钥数目和参与者的数
26、目一样,这样,在参与者数目很大的情况下,公钥密码技术仍然会很好工作。公钥密码技术支持数字签名和消息认证,可以保证消息的不可否认性。公钥密码加密速度相比对称密码加密要慢。信息安全理论知识822消息认证与数字签名在这一节我们主要介绍一下消息认证与数字签名,这两种技术分别保证了消息的完整性和不可否认性。221消息摘要消息摘要(MESSAGEDIGEST)又称为数字摘要DIGITALDIGEST。它是一个固定长度的值,这个值对一段消息或文本来说是唯一的,它由一个单向HASH函数对消息进行运算而产生。如果消息在途中改变了,则接收者通过比较消息的新摘要与原摘要,就可知道消息是否被改变了。因此消息摘要保证了
27、消息的完整性。而其中最关键的部分莫过于HASH函数。HASH函数可以接受可变长度的数据输入,并生成输入数据的固定长度表示。由于其独特的属性,HASH函数有时也叫做单向函数,这使得逆过程的实现非常困难,甚至不可能实现。一些人把消息摘要叫做输入数据的数字指纹。重要的是HASH函数的输出结果都是可以预测的,并没有随机性的存在空间。即如果两次输入同样的数据,那么,HASH函数应该能够生成相同的消息摘要值。输入数据中的一位发生了变化,都会导致生成非常不同的哈希值。HASH函数的输出结果应该是足够小的,以便管理这些生成的摘要。同时,这些摘要又要足够大,这样才不易受到攻击。诸如MD5RFC1321和SHA1
28、这样的哈希算法是当前最常用的算法。MD5会生成128位(16字节)的消息摘要,而SHA1生成160位(20字节)的摘要块。HASH函数并不能提供机密性,并且它们不能使用秘密密钥以生成摘要。HASH函数还可以被视为压缩函数,它能将大的输入数据块表示为可管理的数据块。大型的消息进行数字签名时,都是在其哈希值上执行的,而不是在消息自身上执行,主要是因为性能方面的原因。222数字签名数字签名(DIGITALSIGNATURE)的功用类似写在纸上的签名,但它又不同于普通签名,它使用了公钥加密领域的技术实现,是一种用于鉴别数字信息的方法。信息安全理论知识9一套数字签名通常定义两种互补的运算,一个用于签名,
29、另一个用于认证。数字签名是通过复杂的加密技术而产生的。尽管这些技术难以设计,但他们的基本原理却是非常简单,易于理解。数字签名的安全性基于非对称加密,其加密与解密过程使用不同的密钥。公钥算法用于数据加密时,一般来说加密密钥是公开的,而解密密钥是保密的,并且具有根据加密密钥不能推算出解密密钥的特点。当公开密钥算法用于数字签名时,要求就有所不同。因为数字签名是要求所有人都能够验证的,所以要求用于数字签名的公钥算法的解密密钥是公开的,而用于签名的加密密钥是保密的。为了安全和防止签名伪造,同时要求根据解密密钥不能推算出加密密钥。并非所有的公钥算法都能满足于数字签名的这些要求,目前常用于数字签名的算法有R
30、SA和DSA等。事实上,用于数字签名的公开密钥算法有时也不能用于数据加密,如DSA算法就是这样一个专门用于数字签名的公钥算法。数字签名的计算过程首先是计算出待签名数据的摘要,然后对这个摘要用签名者的私钥加密。摘要提供了一种检测数据是否被改动过的方法,而数字签名则能够防止摘要本身被篡改。这样数字签名就有力地证明了一份数据是否就是签名计算时使用的数据。23公钥基础设施从字面上理解,公钥基础设施(PUBLICKEYINFRASTRUCTURE,PKI)就是利用公钥理论和技术建立的提供安全服务的基础设施。所谓基础设施,就是在某个大环境下普遍适用的系统和准则。例如现实生活中的电力系统,它提供的服务是电能
31、,我们可以把电灯、电视、空调等看成是电力系统这个基础设施的一些应用。公钥基础设施则是希望从技术上解决网上身份认证、信息的机密性、信息的完整性和不可否认性等安全问题,为网络应用提供可靠的安全服务。231公钥基础设施的概念PKI是一套完整的INTERNET安全解决方案。PKI技术采用证书管理公钥,通过第三方的可信任机构认证机构(CERTIFICATIONAUTHORITY,CA),把用户的公钥和用户的其他信息(如名称、EMAIL、身份证号等)捆绑在一起,防止公钥信息安全理论知识10被假冒。PKI的主要目的是通过自动管理密钥和证书,为用户建立起一个安全的网络运行环境。按照X509标准的定义,PKI“
32、是一个包括硬件、软件、人员、策略和规程的集合,用来实现基于公钥密码体制和证书的产生、管理、存储、分发、和撤销等功能”。认证机构(CA)是PKI的核心。它是一个或多个用户信任、提供用户身份验证的第三方机构,承担公钥体系中公钥的合法性检验的责任。232公钥基础设施的组成PKI包括认证机构、注册机构、证书库、档案库以及PKI用户。(1)认证机构(CA)认证机构和公正人类似。认证机构(CA)是PKI一个基本的组成部分,是提供PKI安全服务的中心。CA是计算机硬件、软件和操作人员的集合体,它的两个重要属性是名称和公钥。CA执行4个基本的PKI功能签发证书;维持证书状态信息和签发CRL;发布它的当前证书和
33、CRL;维持有关到期证书的状态信息档案。(2)注册机构(RA)注册机构(RA)是一个可以被CA信任的实体,它能够为用户注册提供担保。RA是为CA验证证书内容的,RA需要验证证书的申请者与在证书中反映的内容是否相符,然后把这些信息提供给CA,由CA签发证书。和CA相似RA也是计算机硬件、软件和操作人员的集合。但和CA不同的是,RA通常由一个人来操作。每一个CA包括一张可信任的RA列表。(3)证书库证书库是CA系统中活动的数字证书的数据库。证书库的主要任务是为收到数字签名消息的个人和商务提供可证实数字证书状态的数据。PKI应用在很大程度上依赖于发布证书和证书状态信息的目录服务。目录提供了一种证书分
34、发、存储、管理、更新的方法。目录服务是X500标准或者该标准子集的典型实现。(4)档案库档案库是一个解决将来争执的信息库,为CA承担长期存储文档信息的责信息安全理论知识11任。档案的主要任务是存储和保护充足的信息,以确定在一份旧的文档中数字签名是可以信任的。档案库声明在某个时刻它收到的信息是正确的,并且在档案库中没有被修改。(5)PKI用户PKI用户有两种证书持有者和证书依赖方。证书依赖方是指信息接收方,依赖方将验证持有的证书是否有效。233数字证书数字证书是公开密钥体制的一种密钥管理媒介。证书提供了一种在INTERNET上验证身份的方式,其作用类似于驾驶执照和身份证。证书包含了能够证明证书持
35、有者身份的可靠信息,是持有者在网络上证明自己身份的凭证。从证书的使用者来看,证书可分为系统证书和用户证书。系统证书指CA系统自身的证书,包括CA的证书、业务受理点的证书以及CA系统操作员的证书;用户证书从应用角度可将其分为个人用户证书、企业用户证书和服务器证书。从证书的用途来看,数字证书可分为加密证书和签名证书。加密证书用于对用户传送信息进行加密,以保证信息的真实性和完整性;签名证书用于对用户信息进行签名,以保证信息的不可否认性。24安全套接字层241SSL概述安全套接层(SECURESOCKETLAYER,SSL)是一种在两台机器之间提供安全通道的协议。它具有保护传输数据以及识别通信机器的功
36、能。安全通道是透明的,意思就是说它对传输的数据不加变更。客户与服务器之间的数据是经过加密的,一端写入的数据完全是另一端读取的内容。透明性使得几乎所有基于TCP的协议稍加改动就可以在SSL上运行,非常方便。SSL的首要用途就是保护使用HTTP的WEB通信。与传统连接的区别是,当在HTTP中建立了TCP连接后,客户端先发送一个请求,服务器随即回应一个文档。而在使用SSL的时候,客户端先创建一个TCP连接,并在其上建信息安全理论知识12立一条SSL通道,然后再在SSL通道上发送同样的请求,而服务器则以相同的方式沿SSL连接予以响应。242SSL协议的结构图21给出了的结构示意图。SSL借助TCP协议
37、来提供端到端的安全服务,SSL并不是一个单独的协议,而是两层结构的协议集合,上层包括SSL握手协议、SSL修改密文规约协议和SSL警告协议,下层包括SSL记录协议。SSL握手协议SSL修改密文规约协议SSL警告协议HTTPSSL记录协议TCPIP图21SSL协议栈243SSL记录协议SSL记录协议为通信提供机密性和完整性保护,图22给出了该协议的工作流程,具体工作过程如下图22SSL记录协议操作流程图1接收到应用层数据后,SSL记录协议首先对其进行分组,分组后数添加SSL头部应用数据DATAFRAGMENT2FRAGMENT3FRAGMENT1分片压缩添加MAC加密信息安全理论知识13据块的长
38、度不超过214(16384)字节。2对数据块进行压缩,压缩过程中不能出现信息的丢失,同时增加的长度不能超过1024字节(压缩处理是可选的,现有SSL30和TLS10都没有指定压缩算法)。3在压缩后的数据上计算机消息认证码MAC,并把MAC附加在数据块之后。4对添加MAC后的数据块进行加密,加密可以采用流加密或组加密的方式。5为加密后的数据添加SSL记录协议的头部。244SSL握手协议SSL握手有三个目的。第一,客户端与服务器需要就一组用于保护数据的算法达成一致。第二,它们需要确立一组由那些算法所使用的加密密钥。第三,握手还可以选择对客户端进行认证。整个工作过程如图23所示图23SSL握手概述(
39、1)客户端将它所支持的算法列表连同一个密钥产生过程用作输入的随机信息安全理论知识14数发送给服务器。(2)服务器根据从列表的内容中选择一种加密算法,并将其连同一份包含服务器公用密钥的证书发回给客户端。该证书还包含了用于认证目的的服务器标识,服务器同时还提供了一个作为密钥产生过程部分输入的随机数。(3)客户端对服务器的证书进行验证,并抽取服务器的公用密钥。然后,再产生一个称做PRE_MASTER_SECRET的随机密码串,并使用服务器的公用密钥对其进行加密。最后,客户端将加密后的信息发送给服务器。(4)客户端与服务器端根据PRE_MASTER_SECRET以及客户端与服务器的随机数值独立计算出加
40、密和MAC密钥。(5)客户端将所有握手消息的MAC值发送给服务器。(6)服务器将所有握手消息的MAC值发送给客户端。第一和第二步实现了第一个目标用于保护数据的算法达成一致。客户端告诉服务器它所支持的算法,而服务器选择其中的一种算法。当客户端收到了服务器在第二步所发的消息时,它也会知道这种算法,所以双方现在就都知道要使用什么算法了。第二个目标,确立一组加密密钥是通过第二和第三步来实现的。在第二步服务器向客户端提供其证书,这样就可以允许客户端给服务器传送密码。经过第三步后,客户端与服务器端就都知道了PRE_MASTER_SECRET。客户端知道PRE_MASTER_SECRET是因为这是它产生的,
41、而服务器则是通过解密而得到PRE_MASTER_SECRET的。其中第3步是握手过程中的关键一步。所有要被保护的数据都依赖于PRE_MASTER_SECRET的安全。原理非常简单客户端使用服务器的公用密钥(从证书中抽取的)来加密共享密钥,而服务器使用其私用密钥对共享密钥进行解密。握手的剩余步骤主要用于确保这种交换过程的安全进行。然后在第4步,客户端与服务器分别使用相同的密钥导出函数(KEYDERIVATIONFUNCTION,KDF)来产生MASTER_SECRET,最后再次通过KDF使用MASTER_SECRET来产生加密密钥。第五与第六步用以防止握手本身遭受篡改。设想一个攻击者想要控制客户
42、端与服务器所使用的算法。客户端提供多种算法的情况相当常见,某些强度弱而某些强度强,以便能够与仅支持弱强度算法的服务器进行通信。攻击者可以删除客户端在第1步所提供的所有高强度算法,于是就迫使服务器选择一种弱强度的信息安全理论知识15算法。第5步与第6步的MAC交换就能阻止这种攻击,因为客户端的MAC是根据原始消息计算得出的,而服务器的MAC是根据攻击者修改过的消息计算得出的,这样经过检查就会发现不匹配。由于客户端与服务器所提供的随机数为密钥产生过程的输入,所以握手不会受到重放攻击的影响。这些消息是首个在新的加密算法与密钥下加密的消息。因此,在此过程结束时,客户端与服务器已就使用的加密算法达成一致
43、,并拥有了一组与那些算法一起使用的密钥。更重要的是,它们可以确信攻击者没有干扰握手过程,所以磋商过程反映了双方的真实意图。以上所描述的每一步都需要通过一条或多条握手消息来实现。图24描述了握手中的各条消息。图24SSL握手消息第1步对应一条单一的握手消息,CLIENTHELLO。第2步对应一系列SSL握手消息,服务器发送的第一条件消息为SERVERHELLO,其中包含了它所选择的算法,接着再在CERTIFICATE消息中发送其证书。最后,服务器发送SERVERHELLODONE消息以表示这一握手阶段的完成。需要SERVERHELLODONE的原因是一些更为复杂的握手变种还要在CERTIFICA
44、TE之后发送其他一些消息。当客户端接收到SERVERHELLODONE消息时,它就知道不会再信息安全理论知识16有其他类似的消息过来了,于是就可以继续它这一方的握手。第3步对应CLIENTKEYEXCHANGE消息。第5与第6步对应FINISHED消息。该消息是第一条使用刚刚磋商过的算法加以保护的消息。为了防止握手过程遭到篡改,该消息的内容是前一阶段所有握手消息的MAC值。然而,由于FINISHED消息是以磋商好的算法加以保护的,所以也要与新磋商的MAC密钥一起计算消息本身的MAC值。以上就是SSL握手协议的整个过程,在此协议的保证下,我们建立一个安全的信息通道才成为可能。25本章小结通过本章
45、的介绍,我们了解了有关信息安全的理论知识,其中重点介绍了密码学体制,公钥基础设施和安全套接字层。安全套接字层中我们主要讲述了SSL协议的握手协议。这些都为以后的设计作了理论的铺垫。WEB服务器开发基础17第三章WEB服务器开发基础在这一章,我们将介绍有关WEB服务器开发的基础知识,包括对LINUX平台、OPENSSL源码、TCP/IP协议、HTTPS协议、SOCKET编程,以便我们更方便快捷地开发出应用程序。31LINUX操作系统LINUX是一个开放源代码的操作系统,它的出现打破了传统商业操作系统长久以来形成的技术垄断和壁垒,进一步推动了人类信息技术的发展。更为重要的是,LINUX树立了“自由
46、开放之路”的成功典范。311LINUX操作系统简介在网络日益发达的今天,LINUX几乎成为了WEB服务器的代名词,当LINUX似乎已经成为习惯,我们不得不感叹于它的强大,不得不佩服LINUSTORVALDS和因特网上广大UNIX程序员的智慧。任何事物的发展都是要有一定的先决条件的,当然LINUX的发展也不例外,其巨大的成功要归功于在它之前诞生的UNIX和GNU。1969年,贝尔实验室(AT基于OPENSSL的安全WEB服务器的实现43返回值调用成功返回1,否则返回0。在开发过程中也可以调用OPENSSL_ADD_SSL_ALGORITHMS或是SSLLEAY_ADD_SSL_ALGORITHM
47、S因为它们都是SSL_LIBRARY_INIT的宏定义。(2)加载SSL错误字符串函数SSL_LOAD_ERROR_STRINGS函数功能调用SSL_LOAD_ERROR_STRINGS,以便可以用ERR_PRINT_ERRORS_FP打印错误信息,以方便调试。函数定义SSL_LOAD_ERROR_STRINGSVOID(3)初始化SSL上下文环境变量函数SSL_CTX_NEW函数功能初始化SSL_CTX结构体,设置SSL协议算法。可设置SSL协议版本号,客户端的算法或服务器端的算法。函数定义SSL_CTXSSL_CTX_NEWSSL_METHODMETH参数说明INSSL_METHOD类型数
48、据,SSL协议算法。OPENSSL支持的算法如表51所示。表51OPENSSL支持的协议算法算法函数说明SSL_METHODSSLV2_SERVER_METHODVOIDSSLV20协议,适用于服务器端的算法SSL_METHODSSLV2_CLIENT_METHODVOIDSSLV20协议,适用于客户端的算法SSL_METHODSSLV3_SERVER_METHODVOIDSSLV30协议,适用于服务器端的算法SSL_METHODSSLV3_CLIENT_METHODVOIDSSLV30协议,适用于客户端的算法SSL_METHODSSLV23_SERVER_METHODVOIDSSLV30协议
49、,适用于服务器端的算法,同时支持SSLV20SSL_METHODSSLV23_CLIENT_METHODVOIDSSLV30协议,适用于客户端的算法,同时支持SSLV20SSL_METHODTLSV1_SERVER_METHODVOIDTLSV10协议,适用于服务器端的算法SSL_METHODTLSV1_CLIENT_METHODVOIDTLSV10协议,适用于客户端的算法返回值调用成功返回SSL_CTX结构体指针,否则返回NULL。(4)设置SSL证书函数SSL_CTX_USE_CERTIFICATE_FILE函数功能以文件的形式设置SSL证书。对于服务器端,用来设置服务器证书;对于客户端用来设置客户端证书。基于OPENSSL的安全WEB服务器的实现44函数定义INTSSL_CTX_USE_CERTIFICATE_FILESSL_CTXCTX,CONSTCHARFILE,INTTYPE参数说明TYPE为证书的编码类型支持两种类型,PEM和ASN1格式。返回值操作成功返回1,否则返回0。(5)设置SSL私钥函数SSL_CTX_USE_PRIVATEKEY_FILE函数功能以文件的形式设置私钥。函数定义INTSSL_CTX_USE_PRIVATEKEY_FILESSL_CTXCTX,CONSTCHARFILE,INTTYPE返回值操作成功返回1,否则返回0。(6)