1、第六章 安全套接层协议SSL,SSL概述 SSL体系结构与协议 SSL协议的安全性分析 SSL的应用,目前国际上流行的电子商务所采用的协议主要有:,安全套接层协议(Secure Sockets Layer,SSL) 基于信用卡交易的安全电子协议(Secure Electronic Transaction,SET) 安全HTTP(S-HTTP)协议 安全电子邮件协议(PEM、S/MIME等) 用于公对公交易的Internet EDI等。 此外在Internet网上利用Ipsec标准建设虚拟专用网,利用VPN为企业、政府提供一些基本的安全服务,,6.1 SSL概述,SSL协议是一种国际标准的加密及
2、身份认证通信协议目标:SSL被设计用来使用TCP提供一个可靠的端到端安全服务,为两个通讯个体之间提供保密性和完整性(身份鉴别)。,SSL/TLS协议,1994年Netscape开发了SSL(Secure Socket Layer)安全套接层协议,专门用于保护Web通讯 版本和历史 1.0,不成熟 2.0,基本上解决了Web通讯的安全问题 Microsoft公司发布了PCT(Private Communication Technology),并在IE中支持 3.0,1996年发布,增加了一些算法,修改了一些缺陷 TLS 1.0(Transport Layer Security传输层安全协议, 也
3、被称为SSL 3.1),1997年IETF发布了Draft,同时,Microsoft宣布放弃PCT,与Netscape一起支持TLS 1.0 1999年,发布RFC 2246(The TLS Protocol v1.0),协议的使用,https:/ 与shttp:/,在网络上传输的敏感信息(如电子商务、金融业务中的信用卡号或PIN码等机密信息)都纷纷采用SSL来进行安全保护。SSL通过加密传输来确保数据的机密性,通过信息验证码(Message Authentication Codes,MAC)机制来保护信息的完整性,通过数字证书来对发送和接收者的身份进行认证。,IP/IPSec,TCP,Low
4、er layers,IP,TCP,Lower layers,SSL,OS,IPSec,SSL,一个保证任何安装了安全套接字的客户和服务器间事务安全的协议,它涉及所有TCP/IP应用程序,SSL协议可用于保护正常运行于TCP之上的任何应用协议,如HTTP、FTP、SMTP或Telnet的通信,最常见的是用SSL来保护HTTP的通信。SSL协议的优点在于它是与应用层协议无关的。高层的应用协议(如HTTP、FTP、Telnet等)能透明地建立于SSL协议之上。SSL协议在应用层协议之前就已经完成加密算法、通信密钥的协商以及服务器的认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的安全
5、性。,SSL协议使用通信双方的客户证书以及CA根证书,允许客户/服务器应用以一种不能被偷听的方式通信,在通信双方间建立起了一条安全的、可信任的通信通道。该协议使用密钥对传送数据加密,许多网站都是通过这种协议从客户端接收信用卡编号等保密信息。它被认为是最安全的在线交易模式,,SSL解决的问题(功能),客户对服务器的身份认证 SSL服务器允许客户的浏览器使用标准的公钥加密技术和一些可靠的认证中心(CA)的证书,来确认服务器的合法性。 服务器对客户的身份认证 也可通过公钥技术和证书进行认证,也可通过用户名,password来认证。 建立服务器与客户之间安全的数据通道 SSL要求客户与服务器之间的所有
6、发送的数据都被发送端加密、接收端解密,同时还检查 数据的完整性,SSL提供的安全服务,用户和服务器的合法性认证 using X.509v3 digital certificates 传输数据的机密性 using one of DES, Triple DES, IDEA, RC2, RC4, 传输数据的完整性 using MAC with MD5 or SHA-1,SSL协议实现的六步骤,接通阶段:客户机通过网络向服务器打招呼,服务器回应; 密码交换阶段:客户机与服务器之间交换双方认可的密码,一般选用RSA密码算法;会谈密码阶段:客户机器与服务器间产生彼此交谈的会谈密码;,检验阶段:客户机检验服
7、务器取得的密码; 客户认证阶段:服务器验证客户机的可信度; 结束阶段:客户机与服务器之间相互交换结束的信息。,6.1.3 SSL协议与电子商务,SSL 提供了用于启动 TCP/IP 连接的安全性“信号交换”。 这种信号交换导致客户和服务器同意将使用的安全性级别,并履行连接的任何身份验证要求。 通过数字签名和数字证书可实现浏览器和Web服务器双方的身份验证。 在用数字证书对双方的身份验证后,双方就可以用保密密钥进行安全的会话了。,SSL证书保障在线服务器的安全,服务器身份验证 防假冒 网络信息发送内容加密 防偷窥 网络信息发送完整性检测 防删节 网络信息发送内容修改提醒 防篡改,应用数据,改变密
8、码套,结束握手,送出客户端证书,送出服务器证书, 请求客户端证书,SSL流程,浏览器,Web服务器,SSL 安全通道,客户端证书,服务器证书,Client hello,Server hello Server Certificate Certificate Request ServerKeyExchange,Client Certificate ClientKeyExchange Certificate Verify ChangeCipherSpec Finished,ChangeCipherSpec Finished,Application Data,Application Data,建立协议
9、版本、会话ID、交换随机数,SSL服务器证书工作原理介绍,第一步:身份验证,发证机构 CA,你 是 谁?,我是卓越服务器,身份验证,?服务器,卓越服务器,SSL服务器证书工作原理介绍,第二步:发明密语规则,密语规则,发 明,原 文,密语,SSL服务器证书工作原理介绍,第三步:密语规则共享,信息保险箱,打开保险箱,获得规则,SSL服务器证书工作原理介绍,第四步:进行安全通信,SSL当初并不是为支持电子商务而设计的,所以在电子商务系统的应用中还存在很多弊端:,SSL是一个面向连接的协议,在涉及多方的电子交易中,只能提供交易中客户与服务器间的双方认证,而电子商务往往是客户、网站、银行三家协作完成,
10、SSL协议并不能协调各方间的安全传输和信任关系;购货时客户要输入通信地址,这样将可能使得客户收到大量垃圾信件。,SSL协议运行的基点是商家对客户信息保密的承诺。但在上述流程中SSL协议有利于商家而不利于客户。 客户的信息首先传到商家,商家阅读后再传到银行,这样,客户资料的安全性便受到威胁。,随着电子商务参与方的迅速增加,认证问题越来越突出,SSL协议的缺点完全暴露出来。SSL协议逐渐被新的SET协议所取代。目前我国开发的电子支付系统,无论是中国银行的长城卡电子支付系统,还是上海长途电信局的网上支付系统,均没有采用SSL协议,主要原因就是无法保证客户资金的安全性。,6.1.4 SSL协议的分层结
11、构,SSL的设计概念是希望使用TCP来提供一个可靠的端对端的安全性服务。SSL并不是单一个协议,而是由二层协议来组成SSL协议具有两层结构: 其底层是SSL记录协议层(SSL Record Protocol Layer),简称记录层。 其高层是SSL握手协议层(SSL Handshake Protocol Layer),简称握手层.,SSL协议定义了两个通信主体:客户(client)和服务器(server)。其中,客户是协议的发起者。在客户/服务器结构中,应用层从请求服务和提供服务的角度定义客户和服务器,而SSL协议则从建立加密参数的过程中所扮演的角色来定义客户和服务器。,SSL握手协议包含四
12、个阶段:第一个阶段建立安全能力;第二个阶段服务器鉴别和密钥交换;第三个阶段客户鉴别(可选的)和密钥交换;第四个阶段完成握手协议。,SSL的两个重要概念,SSL连接(connection) 一个连接是一个提供一种合适类型服务的传输(OSI分层的定义)。 SSL的连接是点对点的关系。 连接是暂时的,每一个连接和一个会话关联。 SSL会话(session) 一个SSL会话是在客户与服务器之间的一个关联。会话由Handshake Protocol创建。会话定义了一组可供多个连接共享的密码安全参数。 会话用以避免为每一个连接提供新的安全参数所需昂贵的协商代价。,在任意一对通信主体之间,可以有多个安全连接
13、。,会话状态参数,Session identifier: 服务器选择的一个任意字节序列,用以标识一个活动的或可激活的会话状态。 Peer Certificate: 标识服务器的X.509.v3证书。可为空。 Compression method: 加密前进行数据压缩的算法。 Cipher spec: 指明数据体加密的算法(无,或DES等) 以及散列算法(如MD5或SHA-1)用以计算MAC。还包括其它参数,如散列长度。 Master secret: 48位秘密,在client与server之间共享。 Is resumable:一个标志,指明该会话是否能用于产生一个新连接。,连接状态,Serve
14、r and client random: server 和client 为每一个连接所选择的字节序号。Server write MAC secret: 一个密钥,用来对server 送出的数据进行MAC操作。Client write MAC secret: 一个密钥,用来对client送出的数据进行MAC操作。Server write key: 用于server 进行数据加密,client进行数据解密的对称保密密钥;,连接状态,Client write key:用于client 进行数据加密,server进行数据解密的对称保密密钥;Initialization vectors: 当数据加密采用
15、CBC方式时,每一个密钥保持一个IV。该字段首先由SSL Handshake Protocol产生,以后保留每次最后的密文数据块作为IV。Sequence number: 每一方为每一个连接的数据发送与接收维护单独的顺序号。当一方发送或接收一个改变的cipher spec message时,序号置为0, 最大264-1。,6.2 SSL握手协议(Handshake protocol),主要用来让客户端及服务器确认彼此的身分。为了保护SSL记录封包中传送的数据,Handshake协议还能协助双方选择连接时所会使用的加密算法、MAC算法、及相关密钥。在传送应用程序的数据前,必须使用Handshak
16、e 协议来完成上述事项。,Handshake由一些客户与服务器交换的消息所构成,每一个消息都含有以下三个字段: 类型(Type),1字节:表示消息的类型,总共有十种。在表二中列出了这些已经定义的消息种类。 长度(Length),3字节:消息的位组长度。 内容(Content),1个字节:与此消息有关的参数,表6.1列出所有可能的参数。,SSL握手协议使用的消息,第一阶段:建立起安全协商,客户发送一个client_hello消息,包括以下参数:版本、随机数(32位时间戳+28字节随机序列)、会话ID、客户支持的密码算法列表(CipherSuite)、客户支持的压缩方法列表, 然后,客户等待服务器
17、的server_hello消息 服务器发送server_hello消息,参数:客户建议的低版本以及服务器支持的最高版本、服务器产生的随机数、会话ID、服务器从客户建议的密码算法中挑出一套、服务器从客户建议的压缩方法中挑出一个.,CipherSuite密码套件,第一个元素指定了密钥交换的方法,SSL支持以下一些方法: RSA,要求服务器提供一个RSA证书DH(Diffie-Hellman),要求服务器的证书中包含了由CA签名的DH公开参数。客户或者在证书中提供DH公开参数,或者在密钥交换消息中提供此参数,第二阶段:服务器鉴别和密钥交换,服务器发送自己的证书,消息包含一个X.509证书,或者一条证
18、书链服务器发送server_key_exchange消息 可选的,有些情况下可以不需要。只有当服务器的证书没有包含必需的数据的时候才发送此消息 消息包含签名,被签名的内容包括两个随机数以及服务器参数服务器发送certificate_request消息 非匿名server可以向客户请求一个证书 包含证书类型和CAs服务器发送server_hello_done, 然后等待应答,第三阶段:客户鉴别和密钥交换,客户收到server_done消息后,它根据需要检查服务器提供的证书,并判断server_hello的参数是否可以接受,如果都没有问题的话,发送一个或多个消息给服务器 如果服务器请求证书的话,则
19、客户首先发送一个certificate消息,若客户没有证书,则发送一个no_certificate警告 然后客户发送client_key_exchange消息 最后,客户发送一个certificate_verify消息,其中包含一个签名,对从第一条消息以来的所有握手消息的MAC值()进行签名,第四阶段:结束,第四阶段建立起一个安全的连接 客户发送一个change_cipher_spec消息,并且把协商得到的CipherSuite拷贝到当前连接的状态之中 然后,客户用新的算法、密钥参数发送一个finished消息,这条消息可以检查密钥交换和鉴别过程是否已经成功。其中包括一个校验值,对所有以来的消
20、息进行校验。 服务器同样发送change_cipher_spec消息和finished消息。 握手过程完成,客户和服务器可以交换应用层数据。,SSL握手协议的流程,交换Hello消息,对于算法、交换随机值等协商一致 交换必要的密码参数,以便双方得到统一的premaster secret 交换证书和相应的密码信息,以便进行身份认证 产生master secret 把安全参数提供给SSL记录层 检验双方是否已经获得同样的安全参数,6.3 SSL记录协议(SSL Record Protocol),SSL记录协议为每一个SSL连接提供以下两种服务: 机密性(Confidentiality): SSL记
21、录协议会协助双方产生一把共有的密钥,利用这把密钥来对SSL所传送的数据做传统式加密。 消息完整性(Message Integrity): SSL记录协议会协助双方产生另一把共有的密钥,利用这把密钥来计算出消息认证码。,SSL数据单元的形成过程,用户数据单元,分段,压缩,附加MAC,加密,附加SSL报头,SSL记录协议操作流程,第一个步骤是分片(fragmentation)。每个上层应用数据被分成214字节或更小的数据块。记录中包含类型、版本号、长度和数据字段 . 选择是否执行压缩的步骤(compression)。压缩的过程中,必须是无损失压缩(lossless),也就是说解压缩后能够得到原本完
22、整的消息。经过压缩后的内容长度不能超过原有长度1024字节以上,在SSLv3(以及TLS的现有版本),并没有指定压缩算法,所以预设的算法是null。 计算压缩数据的消息认证码(message authentication code)。为了达到这个目的,必须使用一把双方共有的密钥。,SSL Record Format,6.4 SSL协议采用的加密和认证算法,6.4.1 加密算法,6.4.2 认证算法,认证算法采用X.509电子证书标准,通过使用RSA算法进行数字签名来实现的。 服务器的认证:服务器方的写密钥和客户方的读密钥、客户方的写密钥和服务器方的读密钥分别是一对私有、公有密钥。 客户的认证:
23、,6.4.3 会话层的密钥分配协议, SKEIP(Simple Key Exchange for Internet Protocol)。由公钥证书来实现两个通信实体间的长期单钥的交换。证书通过用户数据协议UDP得到 Photuris。SKEIP有其不利的一面,若某人能得到长期SKEIP密钥,他就可以解出所有以前用此密钥加密的信息,而Photuris只用长期密钥认证会话密钥,则无此问题。但Photuris效率没有SKEIP高。 ISAKMP(Internet安全协会的密钥管理协议)。和前两者不同,ISAKMP只提供密钥管理的一般框架,而不限定密钥管理协议,也不限定密钥算法或协议,因此在使用和策略
24、上更为灵活。,6.5 SSL协议安全性分析,6.5.1 安全机制分析 鉴别机制。公开密钥技术和数字证书可以实现客户端和服务器端的身份鉴别。ClientHello和ServerHello发过去自己的证书(里面包含了身份和自己的公钥)。, 加密机制。混合密码体制的使用提供了会话和数据传输的加密性保护。双方使用非对称密码体制协商出本次将要使用的会话密钥,并选择一种对称加密算法。 完整性机制。定义了共享的、可以用来形成报文鉴别码MAC的密钥。数据进行分片压缩后,使用单向散列函数产生一个MAC,加密后置于数据包的后部,并且再一次和数据一起被加密,然后加上SSL首部进行网络传输。这样,如果数据被修改,其散
25、列值就无法和原来的MAC相匹配,从而保证了数据的完整性。, 抗重放攻击。SSL使用序列号来保护通信方免受报文重放攻击。这个序列号被加密后作为数据包的负载。在整个SSL握手中,都有一个唯一的随机数来标记这个SSL握手,这样重放便无机可乘。,6.5.2 脆弱性分析,1.客户端假冒,因为SSL协议设计初衷是对Web站点及网上交易进行安全性保护,使消费者明白正在和谁进行交易要比使商家知道谁正在付费更为重要,为了不致于由于安全协议的使用而导致网络性能大幅下降, SSL协议并不是默认地要求进行客户鉴别,这样做虽然有悖于安全策略,但却促进了SSL的广泛应用。针对这个问题,可在必要的时候配置SSL协议,使其选
26、择对客户端进行认证鉴别。,2.SSL协议无法提供基于UDP应用的安全保护,SSL协议需要在握手之前建立TCP连接,因此不能对UDP应用进行保护。如果要兼顾UDP协议层之上的安全保护,可以采用IP层的安全解决方案。,3.SSL协议不能对抗通信流量分析,由于SSL只对应用数据进行保护,数据包的IP头和TCP头仍然暴露在外,通过检查没有加密的IP源和目的地址以及TCP端口号或者检查通信数据量,一个通信分析者依然可以揭示哪一方在使用什么服务,有时甚至揭露商业或私人关系的秘密。,4.进程中主密钥泄漏,除非SSL的工程实现大部分驻留在硬件中,否则主密钥将会存留在主机的主存储器中,这就意味着任何可以读取SS
27、L进程存储空间的攻击者都能读取主密钥,因此,不可能面对掌握机器管理特权的攻击者而保护SSL连接,这个问题要依靠用户管理策略来解决。,5.磁盘上的临时文件可能遭受攻击,对于使用虚拟内存的操作系统,不可避免地有些敏感数据甚至主密钥都交换到存盘上,可采取内存加锁和及时删除磁盘临时文件等措施来降低风险。,6.对证书的攻击和窃取,类似Verisign之类的公共CA机构并不总是可靠的,系统管理员经常犯的错误是过于信任这样的公共CA机构。 因为对于用户的证书,公共CA机构可能不像对网站数字证书那样重视和关心其准确性。,3.安全盲点,系统管理员不能使用现有的安全漏洞扫描或网络入侵检测系统来审查或监控网络上的S
28、SL交易。加密技术使得通过网络传输的信息无法让IDS辨认. 使得最重要的服务器反而成为受到最少防护的服务器。对此,恶意代码检测、增强的日志功能等基于主机的安全策略会成为最后防线。,SSL仍然不失为一套全面完善的安全策略中有效的组成元素。然而,与网络安全的其它工具软件一样,仅使用单一的防护软件都是远远不够的。对SSL的过高评价有可能带来高的安全风险,它仅仅是网络安全工具的一种,必须和其它网络安全工具紧密结合,方能构造出全面、完善、安全可靠的网络。,Web安全威胁,Web的全称是World Wide Web。Web面 临的主要安全威胁如下:Web服务器上的Web网页很容易收到攻击Web 的下层软件
29、结构复杂,存在大量的安 全漏洞当Web服务器遭到破坏时,本地站点上的数据和系统也将面临威胁。(威胁的蔓延),浏览器:如IE和Netscape等 Web服务器: IIS、 Domino Go WebServer Netscape Enterprise Server Appache 在浏览器端安装支持SSL的客户端证书(可选),然后把URL中的“http:/”更换为“https:/”。,CGI程序的安全性问题 CGI是Common Gateway Interface(通用网关接口)的简写,它是一个Web服务器主机提供信息服务的标准接口,通过提供这样一个标准接口,Web服务器能够执行应用程序并将它们
30、的输出,如文字、图形、声音等传递给一个Web浏览器 CGI程序是WWW安全漏洞的主要来源 编写安全的CGI脚本,4.2WWW的安全,Web服务器端安全性,服务器发布信息,提供服务 静态信息,各种HTML页面 动态信息,利用脚本或者各种扩展引擎响应客户的请求 安全性 目录安全性 只有指定范围的文件才可以被访问 例如,禁止URL中出现“”,Cgi文件的安全性,此目录禁止通过Web读写 检查每一个cgi文件,不要保留有漏洞的cgi文件,特别是系统预装的一些cgi示例文件,这些文件往往为了说明功能,而忽略了安全性的考虑 要求鉴别:由于协商的原因,要注意安全性最低的鉴别协议 授权机制:保护好口令的安全存
31、储,以及客户信息的保存 日志:打开系统中对于Web服务的日志功能,以及Web服务的日志记录,服务器端的安全防护,有些应用使用SSL/TLS,为Web Service申请一个证书 Web Server往往是网络攻击的入口点 为了提供Web Service,必须要开放端口和一些目录,还要接受各种正常的连接请求 防火墙对Web Server的保护是有限的 为了安全,请:及时打上Web Server软件厂商提供的补丁程序特别是一些主流的服务软件,比如MS的IIS 控制目录和文件的权限 Web应用开发人员注意 在服务端的运行代码中,对于来自客户端的输入一定要进行验证 防止缓冲区溢出,安全Web服务器,安
32、全Web服务器在提供常规的Web服务的同时,还具有以下特点:WEB页面加密存储方法,确保存储在WEB服务器上的页面文件的安全性;WEB页面的原始性鉴别技术;分密级访问控制,确保不被非法访问; 严格的传输加密技术,确保信息不被监听;数字水印日志,确保日志文件不可更改,为计算机取证提供支持;,Web客户端的安全性,客户端安全性涉及到 Cookie的设置,保护用户的隐私 PKI设置,确定哪些是可信任的CA 对可执行代码的限制,包括JavaApplet,ActiveXcontrol 如果你的机器是多个人合用的,则 Web页面的缓存区域,将会留下用户最近访问过的页面 历史记录 口令自动保存和提示 ,4.
33、2.6 Plug-in的安全性 Plug-in在运行时完全作为浏览器的一部分 不要盲目执行任何从Internet上下载的程序4.2.7 ActiveX的安全性 ActiveX技术是Microsoft提出的一组使用COM使得软件部件在网络环境中进行交互的技术集。 ActiveX的安全模型 用户可以禁用ActiveX,4.2WWW的安全,4.2.8 cookie的安全性 cookie是对HTTP协议的一种补充,用来改善HTTP协议的无状态性用户要注意防止cookie文件被盗用户可以完全删除cookie文件,4.2WWW的安全,4.3.1 Java的特点 Java是一种简单的、面向对象的、分布式的、
34、解释型的、健壮的、安全的、体系中立的、可移植的、高性能的、多线程的、动态的语言。 特点 简单性 去掉了C和C+中的一些无用特性 接管了容易出错的任务 自动垃圾收集 系统精简,4.3Java的安全性,4.3.1 Java的特点 面向对象 分布式 支持基于网络的应用程序 解释性 Java是一门解释性的语言 Java程序在JVM(Java虚拟机)上运行 健壮性 强类型语言 内存模式改进 例外处理,4.3Java的安全性,4.3.1 Java的特点 安全性 体系中立性 Java程序可以在任何系统上运行,只要该系统能构成Java虚拟机即可。 可移植性 Java可以运行于安装了解释器的任何机器上 高性能
35、多线程 动态性,4.3Java的安全性,4.3.2 Java的安全性 Java的安全模型不同于传统的安全方法,主要通过访问控制来实现。 Java applet:一种小的Java应用程序,主要用于网页中。,4.3Java的安全性,4.3.2 Java的安全性 Applet受到以下一些限制: applet不能读、写、重命名或者删除文件 除了下载applet的那台计算机之外, applet本身不能连接到或者接受来自于其他任何一台计算机的连接请求 applet不能执行系统级的函数 applet不能访问一些图形和GUI相关的程序 applet不能读取某些系统属性 applet不能注册一个新的SecurityManager对象避免这些安全上的限制 Java也不是完全安全的,用户需要及时打上补丁和更新,4.3Java的安全性,4.3.3 Javascript的安全性 JavaScript是Netscape公司设计的一系列HTML语言扩展,它增强了HTML语言的动态交互能力,并且可以把部分处理移到客户机,减轻服务器的负载。 JavaScript的漏洞不像Java的漏洞那样能损坏用户的机器,而是只涉及侵犯用户的隐私 可以完全关掉Javascript,4.3Java的安全性,