版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 毕 业 设 计题目:ssl协议的分析实现及应用姓 名: 学 号: k009271012 学 院: 北京市西城经济科学大学 专 业: 计算机网络与安全管理 指 导 教 师: 2011年 5 月 30 日本人声明声明内容如下:我声明,本设计及其研究工作是由本人在导师指导下独立完成的,在完成设计时所利用的一切资料均已在参考文献中列出。摘要目前,随着internet的快速发展,互联网上的信息安全越来越引起人们的关注。特别是近年来网上银行、电子商务和电子政务的发展,如何保证传输信息,特别是交易信息的保密性、完整性已成为继续解决的问题。安全套接层协议(security socket layer prot
2、ocol , 简称ssl)是internet上进行保密通信的一个安全协议。关键词: 加密算法,数据传输,ssl协议,ssl实现,ssl缺陷目 录:1 .引言11.1 ssl协议概述11.2 ssl协议的体系结构12 .ssl协议工作原理23 .ssl记录协议34. ssl握手协议45. ssl协议的实现65.1 openssl初始化65.2选择会话协议65.3创建会话环境65.4 建立ssl套接字75.5 完成ssl握手75.6 进行数据传输75.7 结束ssl通信76. ssl协议的缺陷86.1密钥管理问题86.2加密强度问题86.3数字签名问题86.4必须建立在可靠连接基础上86.5多方通
3、信表现欠佳87.结束语9参考文献101 .引言 ssl是一种在客户端和服务器端之间建立安全通道的协议。ssl一经提出,就在internet上得到广泛的应用。ssl最常用来保护web的安全。为了保护存有敏感信息web的服务器的安全,消除用户在internet上数据传输的安全顾虑。openssl是一个支持ssl认证的服务器它是一个源码开放的自由软件,支持多种操作系统。openssl软件的目的是实现一个完整的、健壮的、商业级的开放源码工具,通过强大的加密算法来实现建立在传输层之上的安全性。openssl包含一套ssl协议的完整接口,应用程序应用它们可以很方便的建立起安全套接层,进而能够通过网络进行安
4、全的数据传输。1.1 ssl协议概述ssl 是secure socket layer英文缩写,它的中文意思是安全套接层协议,指使用公钥和私钥技术组合的安全网络通讯协议。ssl协议是网景公司(netscape)推出的基于 web应用的安全协议,ssl协议指定了一种在应用程序协议(如http、telenet、nmtp和ftp等)和tcp/ip协议之间提供数据安全性分层的机制,它为tcp/ip连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证,主要用于提高应用程序之间数据的安全性,对传送的数据进行加密和隐藏,确保数据在传送中不被改变,即确保数据的完整性。ssl 以对称密码技术和公开密码技术
5、相结合,可以实现如下三个通信目标:1.(秘密性: ssl客户机和服务器之间传送的数据都经过了加密处理,网络中的非法窃听者所获取的信息都将是无意义的密文信息。2.完整性: ssl利用密码算法和散列(hash)函数,通过对传输信息特征值的提取来保证信息的完整性,确保要传输的信息全部到达目的地,可以避免服务器和客户机之间的信息受到破坏。3.认证性:利用证书技术和可信的第三方认证,可以让客户机和服务器相互识别对方的身份。为了验证证书持有者是其合法用户(而不是冒名用户), ssl要求证书持有者在握手时相互交换数字证书,通过验证来保证对方身份的合法性。1.2 ssl协议的体系结构ssl协议位于tcp/ip
6、协议模型的网络层和应用层之间,使用tcp来提供一种可靠的端到端的安全服务,它是客户/服务器应用之间的通信不被攻击窃听,并且始终对服务器进行认证,还可以选择对客户进行认证。ssl协议在应用层通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作,在此之后,应用层协议所传送的数据都被加密。ssl实际上是共同工作的两层协议组成,如表1.1所示。从体系结构图可以看出ssl安全协议实际是ssl握手协议、ssl修改密文协议、ssl警告协议和ssl记录协议组成的一个协议族。握手协议修改密 文协议报警协议 ssl记录协议 tcp ip 表1.1 ssl体系结构 ssl记录协议为ssl连接提供了两种服务:
7、一是机密性,二是消息完整性。为了实现这两种服务, ssl记录协议对接收的数据和被接收的数据工作过程是如何实现的呢? ssl记录协议接收传输的应用报文,将数据分片成可管理的块,进行数据压缩(可选),应用mac,接着利用idea、des、3des或其他加密算法进行数据加密,最后增加由内容类型、主要版本、次要版本和压缩长度组成的首部。被接收的数据刚好与接收数据工作过程相反,依次被解密、验证、解压缩和重新装配,然后交给更高级用户。 ssl修改密文协议是使用ssl记录协议服务的ssl高层协议的3个特定协议之一,也是其中最简单的一个。协议由单个消息组成,该消息只包含一个值为1的单个字节。该消息的唯一作用就
8、是使未决状态拷贝为当前状态,更新用于当前连接的密码组。为了保障ssl传输过程的安全性,双方应该每隔一段时间改变加密规范。 ssl告警协议是用来为对等实体传递ssl的相关警告。如果在通信过程中某一方发现任何异常,就需要给对方发送一条警示消息通告。警示消息有两种:一种是 fatal错误,如传递数据过程中,发现错误的mac,双方就需要立即中断会话,同时消除自己缓冲区相应的会话记录;第二种是warning消息,这种情况,通信双方通常都只是记录日志,而对通信过程不造成任何影响。ssl握手协议可以使得服务器和客户能够相互鉴别对方,协商具体的加密算法和mac算法以及保密密钥,用来保护在ssl记录中发送的数据
9、。ssl握手协议允许通信实体在交换应用数据之前协商密钥的算法、加密密钥和对客户端进行认证(可选)的协议,为下一步记录协议要使用的密钥信息进行协商,使客户端和服务器建立并保持安全通信的状态信息。ssl握手协议是在任何应用程序数据传输之前使用的。ssl握手协议包含四个阶段:第一个阶段建立安全能力;第二个阶段服务器鉴别和密钥交换;第三个阶段客户鉴别和密钥交换;第四个阶段完成握手协议。 2 .ssl协议工作原理ssl协议处于互联网多层协议集的传输层上,运行在tcp/ip协议之上而在其他高层协议(如http、telnet、ftp和imap等)之下,如表2.1所示。在建立一次ssl连接之前,首先建立tcp
10、/ip连接。ssl协议可以让应用层协议透明地加以应用。运行时,支持ssl协议的服务器可以同一个支持ssl协议的客户机彼此认证自己,还允许这两个机器之间建立安全的加密连接,同时保证信息在传输过程中的完整性。 ssl协议可以分为4个子协议:ssl握手协议、ssl更改密码规程协议、ssl报警协议和ssl记录协议,其中最重要的两个协议是握手协议和记录协议。ssl记录协议定义了数据传送的格式,它位于一些可靠的传输层协议之上(如tcp),用于各种更高层协议的封装。ssl握手协议位于ssl记录协议之上,并被ssl记录协议所封装。它描述建立安全连接的过程,在客户和服务器传送应用层数据之前,该协议允许服务器与客
11、户机之间协商加密算法和会话密钥,完成通信双方的身份验证等功能。应用层协议(http、telnet、ftp、imap等)ssl握手协议ssl更改密码规程协议ssl报警协议ssl记录协议tcp协议ip协议表2.1 ssl协议的分层结构3 .ssl记录协议ssl记录协议(record protocol)定义了传输的格式,包括记录头和记录数据格式的规定。发送方记录层的工作过程如图3.1所示: 分 片添加 mac压 缩加 密添加ssl 记录头计算mac图3.1 记录层的工作过程1记录层从上层接收到任意大小的应用层数据块,把数据快分成不超过214字节的分片。2记录层用当前的会话状态中给出的压缩算法静分片压
12、缩成一个压缩快,压缩操作是可选的。3每个会话都有相应“加密规格”指定了对称加密算法和mac算法。记录层用指定的mac算法对压缩块计算mac,用指定的对称加密算法加密压缩块和mac,形成密文块。4对密文块添加ssl记录头,然后送到传输层,传输层受到这个ssl记录层数据单元后,记上tcp报头,得到tcp数据包。mac数据 实际数据 附加数据图3.2 ssl记录协议中数据项的格式4. ssl握手协议客户机服务器server_hellocertificateserver_key_exchange*certificate_request*hello_donecertificate_verifyclien
13、t_key_exchangecertificate*change_cipher_specfinishedcertificate_verify*finishedchange_cipher_specclient_hellono_certificate*step1:确定一些相关参数,包括协议版本、会话id、加密规格、压缩算法和初始随机数step2:服务器端发送自身证书(或临时公钥)及证书请求,最后发送hello阶段结束信号。step3:客户端验证服务器端证书、发送自身证书、交换对称密钥。step4:双方确定加密规格,结束握手协议。图4.1 ssl建立新会话时的握手过程建立新会话时的握手过程握手协议用
14、于数据传输之前。它可以进行服务器与客户之间的身份鉴别,同时通过服务器和客户协商,决定采用的协议版本、加密算法,并确定加密数据所需的对称密钥,随后采用公钥加密技术产生共享机密信息(例如对称密钥)。每次连接,握手协议都要建立一个会话。会话中包含了一套可在多次会话中使用的加密安全参数,从而减轻了每次建立会话的负担。然而,必须指出的是,ssl中的每次连接时,在握手协议中产生的对称密钥都是独特的,这种每次更换密钥的方法显然在更大程度上确保了系统的不易攻破性。根据是否验证对方的证书,ssl的握手过程可以分为以下三种验证模式:客户和服务器都被验证;只验证客户机,不验证服务器,这是internet上使用最广泛
15、的形式;客户和服务器都不验证,也称为完全匿名模式。ssl握手协议建立一个新的会话的过程如图4.2所示,具体如下:阶段1:确定一些相关参数,包括协议版本、会话id、加密规格、压缩算法和初始随机数(1) 客户端发送client_hello消息给服务器,向服务器传送客户端支持的ssl协议的版本号、加密算法的种类、mac算法的种类、会话标识、密码属性(如hash块的大小),以及其他服务器和客户端之间通信所需要的各种信息。(2) 服务器以server_hello向客户应答,服务器端传选定的ssl协议的版本号、加密算法的种类、mac算法的种类、密码属性及其他相关信息。阶段2:服务器端发送自身证书(或临时公
16、钥)及证书请求,最后发送hello阶段结束信号。(3) 如果需要验证服务器,服务器将发送certificate消息。服务器首先建立一个随机数,然后对这个随机数进行数字签名,将这个含有签名的随机数和服务器的证书,放在certificate消息中发送给客户端。若不需要验证服务器证书,服务器发送包含其临时公钥的server_key_exchange消息。(4) 若服务器需要验证客户,则发送certificate_request消息(5) 服务器发送hello_done消息,表示双方握手过程中的hello阶段结束。阶段3:客户端验证服务器端证书、发送自身证书、交换对称密钥。(6) 客户利用服务器传过来
17、的信息验证服务器的合法性,发送certificate_verify消息,确定验证通过。服务器的合法性包括:证书是否过期,发行服务器证书的ca是否可靠,发行者证书的公钥能否正确解开服务器证书的“发行者的数字签名”,服务器证书上的域名是否和服务器的实际域名相匹配。如果合法性验证没有通过,通信将断开;如果合法性验证通过,则将继续进行下一步。(7) 客户端先随机产生一个用于后面通信的预主密码(pre-master-key),然后用服务器的公钥(从服务器的证书中获得)对其加密,再将加密后的预主密码通过client_key_exchange消息传给服务器。(8) 如果服务器要求客户的身份认证(在握手过程中
18、为可选),客户端会首先建立一个随机数,然后对这个随机数进行数字签名,将这个含有签名的随机数和客户自己的证书放在certificate消息中,发送给服务器端。如果客户端没有证书,则会回应no_certificate告警。阶段4:双方确定加密规格,结束握手协议。(9) 客户端向服务器端发出chenge_cipher_spec信息,指明后面的数据通信将“预主密码”为对称密钥,同时向服务器发送finished消息,表示完成了与服务器的握手。(10) 服务器检验客户证书和签名随机数的合法性,发送certificate_verify消息。具体的合法性验证包括:客户的证书使用日期是否有效,为客户提供证书的c
19、a是否可靠,发行ca的公钥能否正确解开客户证书的发行ca的数字签名,检查客户的证书是否在证书撤销列表(crl)中。检验如果没有通过,则通信立刻中断;如果验证通过,则服务器将用自己的私钥解开加密的“预主密码”,然后执行一系列步骤来产生通信使用的主密码(master-key)(客户端也将通过同样的方法产生相同的主密码)。(11) 服务器向客户端发出change_cipher_spec信息,指明后面的数据通信将使用预主密码为对称密钥,同时发送finished消息,通知客户端服务器端的握手过程结束。(12) ssl的握手部分结束,ssl安全通道的数据通信开始,客户和服务器开始使用相同的对称密钥进行数据
20、通信,同时进行通信完整性的检验。2)恢复一个已存在会话时的握手过程由上可以看出,ssl协议的握手过程是非常好使的,为了减少握手过程的交互次数,以及对网络带宽的占用,可将双方经过完整握手过程建立起来的会话状态记录下来。在以后连接时,采用会话重用技术恢复会话过程,免去会话参数的协商。ssl握手协议恢复一个已存在的会话的过程如图5-5所示。客户端发送client_hello消息给服务器,其中的session id是要恢复的会话的标识,服务器在会话缓存中检查是否有这个会话标识:若有,服务器将在相应的会话状态下建立一个新的连接,服务器发送含有session id的server_hello;若没有,服务器
21、会生成一个新的session id,建立一个新的会话过程。当通过恢复一个会话建立一个连接时,这个新的连接将继承这个会话状态下的压缩算法、加密规格和预主密码。但该连接会产生新的随机数和通信密码。客户机服务器change_cipher_specfinishedfinishedchange_cipher_specserver_helloclient_hellostep2:更改加密规格,结束握手协议step1:从会话缓存中恢复一个已经存在的对话图4.2 ssl恢复一个已存在会话时的握手过程 5. ssl协议的实现基于openssl的程序可以被分为两个部分:客户机和服务器,使用ssl协议使通信双方可以相
22、互验证对方身份的真实性,并且能够保证数据的完整性和机密性。建立ssl通信的过程如图5.1所示。图5.1 ssl通信过程ssl通信模型采用标准的c/s结构,除了在tcp层上进行传输之外,与普通的网络通信协议没有太大的区别,基于openssl的程序都要遵循以下几个步骤:5.1 openssl初始化在使用openssl之前,必须进行相应的协议初始化工作,这可以通过下面的函数实现:int ssl_library_int(void);5.2选择会话协议在利用openssl开始ssl会话之前,需要为客户端和服务器制定本次会话采用的协议,目前能够使用的协议包括tlsv1.0、sslv2、sslv3、sslv
23、2/v3。需要注意的是,客户端和服务器必须使用相互兼容的协议,否则ssl会话将无法正常进行。5.3创建会话环境在openssl中创建的ssl会话环境称为ctx,使用不同的协议会话,其环境也不一样的。申请ssl会话环境的openssl函数是:ssl_ctx *ssl_ctx_new(ssl_method * method);当ssl会话环境申请成功后,还要根据实际的需要设置ctx的属性,通常的设置是指定ssl握手阶段证书的验证方式和加载自己的证书。制定证书验证方式的函数是:int ssl_ctx_set_verify(ssl_ctx *ctx,int mode,int(*verify_callb
24、ack),int(x509_store_ctx *);为ssl会话环境加载ca证书的函数是:ssl_ctx_load_verify_location(ssl_ctx *ctx,const char *cafile,const char *capath);为ssl会话加载用户证书的函数是:ssl_ctx_use_certificate_file(ssl_ctx *ctx, const char *file,int type);为ssl会话加载用户私钥的函数是:ssl_ctx_use_privatekey_file(ssl_ctx *ctx,const char* file,int type);在
25、将证书和私钥加载到ssl会话环境之后,就可以调用下面的函数来验证私钥和证书是否相符:int ssl_ctx_check_private_key(ssl_ctx *ctx);5.4 建立ssl套接字ssl套接字是建立在普通的tcp套接字基础之上,在建立ssl套接字时可以使用下面的一些函数:ssl *ssl_new(ssl_ctx *ctx); /申请一个ssl套接字int ssl_set_fd(ssl *ssl,int fd);) /绑定读写套接字int ssl_set_rfd(ssl *ssl,int fd); /绑定只读套接字int ssl_set_wfd(ssl *ssl,int fd);
26、 /绑定只写套接字5.5 完成ssl握手在成功创建ssl套接字后,客户端应使用函数ssl_connect( )替代传统的函数connect( )来完成握手过程:int ssl_connect(ssl *ssl);而对服务器来讲,则应使用函数ssl_ accept ( )替代传统的函数accept ( )来完成握手过程:int ssl_accept(ssl *ssl);握手过程完成之后,通常需要询问通信双方的证书信息,以便进行相应的验证,这可以借助于下面的函数来实现:x509 *ssl_get_peer_certificate(ssl *ssl);该函数可以从ssl套接字中提取对方的证书信息,这
27、些信息已经被ssl验证过了。x509_name *x509_get_subject_name(x509 *a);该函数得到证书所用者的名字。5.6 进行数据传输当ssl握手完成之后,就可以进行安全的数据传输了,在数据传输阶段,需要使用ssl_read( )和ssl_write( )来替代传统的read( )和write( )函数,来完成对套接字的读写操作:int ssl_read(ssl *ssl,void *buf,int num);int ssl_write(ssl *ssl,const void *buf,int num);5.7 结束ssl通信当客户端和服务器之间的数据通信完成之后,调
28、用下面的函数来释放已经申请的ssl资源:int ssl_shutdown(ssl *ssl); /关闭ssl套接字void ssl_free(ssl *ssl); /释放ssl套接字void ssl_ctx_free(ssl_ctx *ctx); /释放ssl会话环境6. ssl协议的缺陷根据以上内容可知,ssl协议所采用的加密算法和认证算法使它具有一定的安全性,能够在一定程度上抵抗某些攻击。 除此之外ssl协议具备很强的灵活性,在浏览器中大都建有ssl功能。但是ssl协议也有很多缺陷,具体如下:6.1密钥管理问题设计一个安全秘密的密钥交换协议是很复杂的,因此,ssl握手协议中客户机和服务器在互相发送自己能够支持的加密算法时,是以明文传送的,存在被攻击修改的可能。6.2加密
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 附件:1.1521项拟继续有效行业标准复审结论-表(征求意见稿)
- 石河子大学《药物波谱解析》2022-2023学年第一学期期末试卷
- 石河子大学《食品包装学》2022-2023学年第一学期期末试卷
- 石河子大学《计算机网络基础》2022-2023学年期末试卷
- 沈阳理工大学《弱信号检测技术》2021-2022学年第一学期期末试卷
- 沈阳理工大学《建筑节能》2023-2024学年第一学期期末试卷
- 沈阳理工大学《过程控制系统与仪表》2021-2022学年期末试卷
- 沈阳理工大学《电镀工艺》2022-2023学年期末试卷
- 沈阳理工大学《环境工程概论》2023-2024学年第一学期期末试卷
- 合同产值申报
- 建筑工程项目管理咨询招标(范本)
- 三位数除两位数的除法练习题
- 慢性胃炎的中医治疗培训课件
- Python程序设计课件第7章面向对象程序设计
- 最新爆破安全规程
- 主题班会课防盗
- 幼儿园课件《挠挠小怪物》
- 教师教案检查八大评分标准教案的评分标准
- 政府会计基础知识讲义
- 幼儿园整合式主题活动设计案例《温馨家园》
- 荒漠区生态治理(麦草沙障、植物固沙)施工方案
评论
0/150
提交评论