《基于OpenSSL的安全Web服务器的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于OpenSSL的安全Web服务器的设计与实现.docx(78页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于OPenSSL的安全Web服务器的设计与实现摘要:随着计算机网络技术的飞速发展,基于计算机网络诸多业务,如电子商 务、电子政务、网上银行迅猛的发展,为人们的生活和工作带来了很多的方便。 然而,由于Internet的开放性、灵活性、共享性等特点,也为人们带来了巨大的 安全威胁。如何在网络中共享信息的同时更加有效地保障我们的信息不被他人窃 取、利用保护个人的信息安全,已成为人们共同关注的问题。默认情况下Web服务使用的传输协议是HTTP,而HTTP协议是没有任何 加密措施的,服务器和客户之间通讯的所有的信息全部采用明文传输,恶意的攻 击者可以通过安装监听程序来获得我们和服务器之间的通讯内容。因
2、此,如何保 证服务器和客户之间通讯的安全性,保证双方交易信息的保密性、完整性已成为 亟待解决的问题.本设计基于LinUX平台,利用OPenSSL开放源码库,实现了具有安全性的 Web服务器,实现了服务器和客户之间的安全通信。服务器端通过出示数字证 书进行身份认证,SerVer同时限定Client也耍出示身份验证,实现了更具有可信 性的双向认证;通过采用SSL中的加密算法对传输的数据进行加密,以保证双 方传输数据的机密性;采用相关哈希函数如MAC,对数据进行验证,以保证数 据的完整性,确保信息数据在传输途中不会被非法篡改。从而为完成服务器与浏 览跆之间的安全通讯提供了保障。关键词:信息安全;安全
3、套接接字层:OpenSSL: HTTPSThe Design and Implementation of Secure Web Server Based onOpenSSLAbstract: With the rapid development of computer network technology, business such as e-commerce, e-govemment, e-bank based on computer network, has brought a lot of convenience for our daily life. However, due to
4、the openness, flexibility, and sharing of the Internet, it also exposes us to the threat of leaking our personal information. It causes highly heightened concerns to ensure our personal information secured in computer networks, recently.HTTP is used to deliver messages in Web servers, which has no p
5、rotection in any way. All messages, which can be monitored by attackers, are plaintext in communication between server and client. Thus, it has become an emergency to secure confidentiality, integrity of the information in transactions.In this article, we construct the project using OpenSSL to imple
6、ment Web server program, which ensure a secure communication between the server and client Double-sided authentication protects the information from attackers among the server and client through digital certificates. In the framework of SSL, a specific encryption algorithm is used to achieve the con
7、fidentiality and one kind of hash algorithms is applied to gu 公钥基础设施(PKI)、安全 套接字层协议(SSL协议)等相关理论知识。第三章Web服务器开发的基础,包括对Linux平台、OPCnSSL源码、TCP/IP 协议、HTTP(S)协议、SoCket编程的介绍。第四章讲述的是基于OpenSSL的安全Web服务器程序的设计,提出设计思 路、结构、目标、各模块整体流程。第五章是根据前面章节服务器程序的设计,实现一个基于OPenSSL的安全 Web服务器程序,并通过测试验证网络的安全性。第六章主要是总结全文,提出本次设计和实践中的
8、不足,对一下步的研究方向及程序改进提出建议。信息安全理论知识第二章信息安全理论知识在这章我们主要介绍i些有关的信息安全理论知识,包括密码学基础,消 息认证,数字签名,公钥基础设施(PKI)和安全套接字层。2.1 密码学基础密码学(CryPtoIOgy)是研究信息系统安全保密的科学。它包含两个分支,一 个是对信息进行编码以保护信息的密码编码学(Cryptography),另外一个是研 究分析破译密码的密码分析学(CryPlanalySiS)O密码技术的思想是伪装信息,使未授权者不能理解它的真实含义。它分为两 个部分,第一部分是信息保密,第二部分是信息认证。信息保密用来抵抗被动攻 击,保证信息的机
9、密性,信息认证用来抵抗主动攻击,保证信息的完整性和不可 否认性。本小节前一部分主耍是实现信息保密,比如对称密码体制的密码算法。 而后面的一部分主要是消息认证,像非对称密码体制的密码算法。2.1.1 密码体制-个密码系统,通常简称为密码体制(Cryptosystem),它由五个部分组成: (1)明文空间M,它是全体明文的集合。(2)密文空间C,它是全体密文的集合。(3)密仍空间K,它是全体密仍的集合。其中每一个密钥K均由加密密 钥Ke和解密密例Kd组成,即K=o(4)加密算法E,它是一族由M到C的加密变换。(5)解密算法D,它是一族由C到M的解密变换。对于每-个确定的密例,加密算法将确定-个具体
10、的加密变换,解密算法将 确定-个具体的解密变换,而且解密变换就是加密变换的逆变换。对于明文空间 M中的每一个明文M,加密算法E在密钥KC的控制下将明文M加密成密文C, 即C=E(M,KJ;而解密算法D在密钥Kd的控制下将密文C解密成明文M,即 M=D(CK)=D(E(M,KJ, Kd)2.1.2 密码体制的分类密码体制的核心是加解密算法。在加解密过程中,根据密码算法所使用的加 密密钥是否相同或者是否能由其中一个很容易推出另一个,可将密码体制分为对 称密码体制(又称单钥密码体制)和非对称密码体制(又称双钥密码体制,也称 为公钥密码体制)。也就是说,如果一个密码体制的Ke=Kd,或由其中一个很容易
11、推出另一个, 则称为单密钥密码体制或对称密码体制,否则称为双密钥密码体制或非对称密码 体制。进而,如果在计算机上Kd不能由Ke推出,这样将Ke公开也不会损害Kd 的安全,于是便可将(公开。这种密码体制称为公开密钥密码体制,简称为公 钥密码体制.2.1.3 对称密码体制对称密码体制对明文消息加密有两种方式:是明文消息按字符(如二元数 字)逐位进行加密,称之为流密码:另一种是将明文消息分组(含有多个字符), 逐组地进行加密,称之为分组密码。以往存在的密码绝大多数都是对称密码,它已经存在了很长时间。比如最早 使用密码技术的应该是四千年前的古代埃及人。而在公元前约50年,罗马皇帝 朱利叶凯撒(Juli
12、usCasesar)发明了一种用于战时秘密通信的方法,后来被称 为凯撒密码。随着计算机技术的飞速发展,由于商业应用和大量网络通信的需耍,密码技 术得到了前所未有的发展。1977年美国国家标准局正式发布数据加密标准DES (Data Encryption Standard)作为联邦标准,并免费提交美国公众使用。不得不 说白从DES出现后密码学领域得到了重大的革新,从原来的保护加密算法,到 如今的保护加密密钥,使密码学这个古老的学科焕发出新的活力。而事实证明对称密码体制的确有着非常重要的特点,集中表现在以下几个方 面; 在对称密码体制中,同一个密钥既用于加密也用于解密。 对称加密速度快。 因为接收
13、者需要得到对称密钥,所以对称加密容易受到中途拦截窃听的攻击。 对称密码体制中密钥的个数大约是以参与者数目的平方的速度增长,因 此难将它的应用扩展到大范围的人群中。 对称密码体制需耍复杂的密钥管理。 对称密码技术不适用于数字签名和不可否认性。2.1.4 公钥密码体制公钥密码体制的概念于1976年由W.Diffie和M.Hellman提出,它的产生是 密码学历史上的-次革命,它对于保密通信、密钥分发和鉴别等领域有着深远的 影响,它的出现是密码发展史上的里程碑。公钥密码体制的由现解决了对称密码体制中密例分发的难题,使密钥的个数 不再是以参与者的数目的平方的速度增长,它提供了 种全新的的加密模式。在
14、公钥密码之前的整个密码学的发展史中,所有的密码算法,都是基于代换和置换 这两个工具的。而公钥密码体制不再基于代换和置换,而是基于数学函数。但是我们要注意的是,并不是说公例密码在防范密码分析上比对称密码更安 全。事实上任何密码方案的安全程度都依赖于密仍的长度和破译密码所包含的计 算工作量,从抗击密码分析的角度讲,无论对称密码还是公钥密码原则上都没白 比对方优越的地方。还有就是也并不能说公钥密码使得对称密码已经过时了。相 反,由于当前公开密钥加密在计算上的巨大开销,导致公钥密码必须与对称密码 相互取长补短,结合使用。下面是公钥密码体制的一些特点: 使用公例密码技术时I用一个密仍加密的东西只能用另外
15、一个密例解 密 需要分发的密仍数目和参与者的数目一样,这样,在参与者数Ll很大的 情况下,公钥密码技术仍然会很好工作。 公钥密码技术支持数字签名和消息认证,可以保证消息的不可否认性。 公钥密码加密速度相比对称密码加密要慢。2.2 消息认证与数字签名在这一节我们主要介绍一下消息认证与数字签名,这两种技术分别保证了消 息的完整性和不可否认性。2.2.1 消息摘要消息摘要(Message Digest)又称为数字摘耍(DigitalDigeSt)O它是一个固定 长度的值,这个值对一段消息或文本来说是唯一的,它由一个单向HaSh函数对 消息进行运算而产生。如果消息在途中改变了,则接收者通过比较消息的新
16、摘要 与原摘要,就可知道消息是否被改变了。因此消息摘要保证了消息的完整性。而 其中最关键的部分莫过于Hash函数。Hash函数可以接受可变长度的数据输入,并生成输入数据的固定长度表示。 由于其独特的属性,Hash函数有时也叫做单向函数,这使得逆过程的实现非常 困难,甚至不可能实现。一些人把消息摘要叫做输入数据的数字指纹。重要的是 Hash函数的输出结果都是可以预测的,并没有随机性的存在空间。即如果两次 输入同样的数据,那么,Hash函数应该能够生成相同的消息摘要值。输入数据 中的一位发生了变化,都会导致生成非常不同的哈希值。Hash函数的输出结果应该是足够小的,以便管理这些生成的摘要。同时,
17、这些摘要又要足够大,这样才不易受到攻击。诸如MD5(RFC 1321)和SHA-I这 样的哈希算法是当前最常用的算法。MD5会生成128位(16字节)的消息摘要, 而SHA-I生成160位(20字节)的摘要块。HaSh函数并不能提供机密性,并且 它们不能使用秘密密仍以生成摘要。Hash函数还可以被视为压缩函数,它能将大的输入数据块表示为可管理的 数据块。大型的消息进行数字签名时,都是在其哈希值上执行的,而不是在消息 自身上执行,主耍是因为性能方面的原因。2.2.2 数字签名数字签名(DigitalSignatUre)的功用类似写在纸上的签名,但它又不同于普 通签名,它使用了公钥加密领域的技术实
18、现,是一种用于鉴别数字信息的方法。7信息安全理论知识-套数字签名通常定义两种互补的运算,一个用于签名,另一个用于认证。数字签名是通过复杂的加密技术而产生的。尽管这些技术难以设计,但他们 的基本原理却是非常简单,易于理解。数字签名的安全性基于非对称加密,其加 密与解密过程使用不同的密钥。公仞算法用于数据加密时,一般来说加密密例是公开的,而解密密仍是保密 的,并且具有根据加密密钥不能推算出解密密例的特点。当公开密例算法用于数 字签名时,要求就有所不同。因为数字签名是要求所有人都能够验证的,所以要 求用于数字签名的公钥算法的解密密钥是公开的,而用于签名的加密密钥是保密 的。为了安全和防止签名伪造,同
19、时要求根据解密密钥不能推算出加密密钥。并 北所有的公钥算法都能满足于数字签名的这些要求,目前常用于数字签名的算法 有RSA和DSA等。事实上,用于数字签名的公开密钥算法有时也不能用于数据 加密,如DSA算法就是这样一个专门用于数字签名的公钥算法。数字签名的计算过程首先是计算出待签名数据的摘耍,然后对这个摘要用签 名者的私钥加密。摘要提供了一种检测数据是否被改动过的方法,而数字签名则 能够防止摘耍本身被篡改。这样数字签名就有力地证明了一份数据是否就是签名 计算时使用的数据。2.3 公钥基础设施从字面上理解,公仍基础设施(PUbliCKeyInfraStrUCtUre, PKl)就是利用公 钥理论
20、和技术建立的提供安全服务的基础设施。所谓基础设施,就是在某个大环 境下普遍适用的系统和准则。例如现实生活中的电力系统,它提供的服务是电能, 我们可以把电灯、电视、空调等看成是电力系统这个基础设施的一些应用。公钥 基础设施则是希望从技术上解决网上身份认证、信息的机密性、信息的完整性和 不可否认性等安全问题,为网络应用提供可靠的安全服务。2.3.1 公钥基础设施的概念PKl是一套完整的Internet安全解决方案。PKl技术采用证书管理公钥,通 过第三方的可信任机构认证机构(CertifiCation Authority, CA),把用户的 公例和用户的其他信息(如名称、E-maik身份证号等)捆
21、绑在一起,防止公例被假冒。PKI的主要目的是通过自动管理密钥和证书,为用户建立起 个安全的 网络运行环境。按照X.509标准的定义,PKl “是一个包括硬件、软件、人员、 策略和规程的集合,用来实现基于公钥密码体制和证书的产生、管理、存储、分 发、和撤错等功能。认证机构(CA)是PKl的核心。它是一个或多个用户信任、提供用户身份 验证的第三方机构,承担公钥体系中公例的合法性检验的责任。2.3.2 公钥基础设施的组成PKl包括认证机构、注册机构、证书库、档案库以及PKl用户。(1)认证机构(CA)认证机构和公正人类似-认证机构(CA)是PKl-个基本的组成部分,是 提供PKl安全服务的中心。CA
22、是计算机硬件、软件和操作人员的集合体,它的 两个重要属性是名称和公钥。CA执行4个基本的PKl功能:签发证书;维持证书状态信息和签发CRL; 发布它的当前证书和CRL:维持有关到期证书的状态信息档案。(2)注册机构(RA)注册机构(RA)是一个可以被CA信任的实体,它能够为用户注册提供担 保。RA是为CA验证证书内容的,RA需要验证证书的申请者与在证书中反映 的内容是否相符,然后把这些信息提供给CA,由CA签发证书。和CA相似RA 也是计算机硬件、软件和操作人员的集合。但和CA不同的是,RA通常由一个 人来操作。每一个CA包括一张可信任的RA列表。(3)证书库证书库是CA系统中活动的数字证书的
23、数据库。证书库的主要任务是为收到 数字签名消息的个人和商务提供可证实数字证书状态的数据。PKl应用在很大程度上依赖于发布证书和证书状态信息的目录服务。目录提 供了一种证书分发、存储、管理、更新的方法。目录服务是X.500标准或者该标 准子集的典型实现。(4)档案库档案库是一个解决将来争执的信息库,为CA承担长期存储文档信息的责IO信息安全理论知识任。档案的主要任务是存储和保护充足的信息,以确定在-份旧的文档中数字签 名是可以信任的。档案库声明在某个时刻它收到的信息是正确的,并且在档案库 中没有被修改。(5) PKl用户PKl用户有两种:证书持有者和证书依赖方。证书依赖方是指信息接收方, 依赖方
24、将验证持有的证书是否有效。2.3.3 数字证书数字证书是公开密钥体制的-种密例管理媒介。证书提供了一种在Internet 上验证身份的方式,其作用类似于驾驶执照和身份证。证书包含了能够证明证书 持有者身份的可靠信息,是持有者在网络上证明自己身份的凭证。从证书的使用者来看,证书可分为系统证书和用户证书。系统证书指CA系 统自身的证书,包括CA的证书、业务受理点的证书以及CA系统操作员的证书; 用户证书从应用角度可将其分为个人用户证书、企业用户证书和服务器证书。从证书的用途来看,数字证书可分为加密证书和签名证书。加密证书用于对 用户传送信息进行加密,以保证信息的真实性和完整性;签名证书用于对用户信
25、 息进行签名,以保证信息的不可否认性。2.4 安全套接字层2.4.1 SSL 概述安全套接层(SeCUreSoCketLayer, SSD是一种在两台机器之间提供安全通 道的协议。它具有保护传输数据以及识别通信机器的功能。安全通道是透明的, 意思就是说它对传输的数据不加变更。客户与服务器之间的数据是经过加密的, 一端写入的数据完全是另一端读取的内容。透明性使得几乎所有基于TCP的协 议稍加改动就可以在SSL上运行,非常方便。SSL的首要用途就是保护使用HTTP的Web通信。与传统连接的区别是, 当在HTTP中建立了 TCP连接后,客户端先发送-个请求,服务器随即回应 一个文档。而在使用SSL的
26、时候,客户端先创建一个TCP连接,并在其上建Il信息安全理论知识立一条SSL通道,然后再在SSL通道上发送同样的请求,而服务器则以相同 的方式沿SSL连接予以响应。2.4.2 SSL协议的结构图2-1给出了的结构示意图。SSL借助TCP协议来提供端到端的安全服务, SSL并不是一个单独的协议,而是两层结构的协议集合,上层包括SSL握手协 议、SSL修改密文规约协议和SSL警告协议,下层包括SSL记录协议。SSL握手彷议SSL修改密文规约协议SSL警告协议HTTP.SSL记录协议TCPIP图2T SSL协议栈2.4.3 SSLi己录协议SSL记录协议为通信提供机密性和完整性保护,图2-2给出了该
27、协议的工作 流程,具体工作过程如下:应用数据分片压缩添加MAC添加SSL头部图2-2 SSL记录协议操作流程图加密(1) 接收到应用层数据后,SSL记录协议首先对其进行分组,分组后数据块的长度不超过展4(16384)字节。(2) 对数据块进行压缩,压缩过程中不能出现信息的丢失,同时增加的长度不能超过1024字节(压缩处理是可选的,现有SSL3.0和TLSLO 都没有指定压缩算法)。(3) 在压缩后的数据上计算机消息认证码MAC,并把MAC附加在数据块之后。(4) 对添加MAC后的数据块进行加密,加密可以采用流加密或组加密的 方式。(5) 为加密后的数据添加SSL记录协议的头部。2.4.4 SS
28、L握手协议SSL握手有三个目的。第一,客户端与服务器需要就一组用于保护数据的 算法达成一致。第二,它们需要确立一组由那些算法所使用的加密密钥。第三, 握手还可以选择对客户端进行认证。整个工作过程如图2-3所示:客户服务器Qg机数*.(2)选中的加密算法,随机数吧(4)计算密钥(4)计克密钥-9)握手消息的MAC值(6) M图2-3 SSL握手概述(1)客户端将它所支持的算法列表连同一个密钥产生过程用作输入的随机 数发送给服务器。(2)服务器根据从列表的内容中选择一种加密算法,并将其连同一份包含 服务器公用密钥的证书发回给客户端。该证书还包含了用于认证目的的服务器标 识,服务器同时还提供了一个作
29、为密例产生过程部分输入的随机数。(3)客户端对服务器的证书进行验证,并抽取服务器的公用密钥。然后, 再产生一个称做pre_master_secret的随机密码申,并使用服务器的公用密例对 其进行加密。最后,客户端将加密后的信息发送给服务器。(4)客户端与服务器端根据pre_master_secret以及客户端与服务器的随机 数值独立计算出加密和MAC密钥。(5)客户端将所有握手消息的MAC值发送给服务器。(6)服务器将所有握手消息的MAC值发送给客户端。第一和第二步实现了第一个目标:用于保护数据的算法达成一致。客户端告 诉服务器它所支持的算法,而服务器选择其中的一种算法。当客户端收到了服务 器
30、在第二步所发的消息时,它也会知道这种算法,所以双方现在就都知道耍使用 什么算法了。第二个目标,确立一组加密密钥是通过第一和第三步来实现的。在 第二步服务器向客户端提供其证书,这样就可以允许客户端给服务器传送密码。 经过第三步后,客户端与服务器端就都知道了 pre.master.secret。客户端知道 pre_mastcr_secret是因为这是它产生的,而服务器则是通过解密而得到 pre_master_secret的。其中第3步是握手过程中的关键一步。所有要被保护的 数据都依赖于pre_master_secret的安全。原理非常简单:客户端使用服务器的 公用密钥(从证书中抽取的)来加密共享密
31、钥,而服务器使用其私用密钥对共享 密钥进行解密。握手的剩余步骤主要用于确保这种交换过程的安全进行。然后在第4步, 客户端与服务器分别使用相同的密钥导出函数(key derivation function, KDF ) 来产生master_secret.最后再次通过KDF使用master-SeCret来产生加密密钥。第五与第六步用以防止握手本身遭受篡改。设想一个攻击者想要控制客户端 与服务器所使用的算法。客户端提供多种算法的情况相当常见,某些强度弱而某 些强度强,以便能够与仅支持弱强度算法的服务器进行通信。攻击者可以删除客户端在第1步所提供的所有高强度算法,于是就迫使服务器选择种弱强度的 算法。
32、第5步与第6步的MAC交换就能阻止这种攻击,因为客户端的MAC 是根据原始消息计算得出的,而服务器的MAC是根据攻击者修改过的消息计 算得出的,这样经过检查就会发现不匹配。由于客户端与服务器所提供的随机数 为密钥产生过程的输入,所以握手不会受到重放攻击的影响。这些消息是首个在 新的加密算法与密钥下加密的消息。因此,在此过程结束时,客户端与服务器已就使用的加密算法达成一致,并 拥有了一组与那些算法一起使用的密钥。更重要的是,它们可以确信攻击者没有 干扰握手过程,所以磋商过程反映了双方的真实意图。以上所描述的每步都需要通过 条或多条握手消息来实现。图2-4描述了 握手中的各条消息。客户服务器H握手
33、:Fin至jgj_-图2-4 SSL握手消息第1步对应一条单一的握手消息,ClientHellOo第2步对应一系列SSL握手消息,服务器发送的第一条件消息为 ServerHello,其中包含了它所选择的算法,接着再在Certificate消息中发送其 证书。最后,服务器发送SerVerHeIlODOne消息以表示这一握手阶段的完成。需 要ServerHelloDone的原因是一些更为复杂的握手变种还要在Certificate之后发送其他些消息。当客户端接收到SerVerHeHODOne消息时,它就知道不会再 有其他类似的消息过来了,于是就可以继续它这一方的握手。笫 3 步对应 ClIentKe
34、yExchange 消息。第5与第6步对应Finished消息。该消息是第一条使用刚刚磋商过的算 法加以保护的消息。为了防止握手过程遭到篡改,该消息的内容是前一阶段所有 握手消息的MAC值。然而,由尸Finished消息是以磋商好的算法加以保护的, 所以也要与新磋商的MAC密钥一起计算消息本身的MAC值。以上就是SSL握手协议的整个过程,在此协议的保证下,我们建立一个安 全的信息通道才成为可能。2.5本章小结通过本章的介绍,我们了解了有关信息安全的理论知识,其中重点介绍了密 码学体制,公钥基础设施和安全套接字层。安全套接字层中我们主要讲述了 SSL 协议的握手协议。这些都为以后的设计作了理论的铺垫。15Wcb服务器开发基础第三章Web服务器开发基础在这章,我们将介绍有关Web服务器开发的基础知识,包括对Linux平 台、OPenSSL源码、TCPZlP协议、HTTP(S)协议、Socket编程,以便我们更方 便快捷地开发出应用程序。3.1 Linux操作系统Linux是一个开放源代码的操作系统,它的出现打破了传统商业操作系统长 久以来形成的技术垄断和壁垒,进一步推动了人类信息技术的发展.更为重要的 是,LinUX树立了 “自由开放之路的成功典范。3.1.1 LinUX操作系统简介在网络日益发