第15章WEB安全性-传输层安全Web安全方案网络层:IPSec传输层:SSL(SecureSocketsLayerprotocol)/TLS应用层:SET/SHTTP应用层传输层网络层安全套接层与传输层的安全SSL(SecureSocketLayer)和TLSSSL设计目标SSL于1994年由Netscape公司开发,SSL2.0仅使用RSA密钥交换;SSL3.0于96年发布,增加DH等算法。TLS(TransportLayerSecurity)的第一个版本非常接近SSLv3.0,可以看作是SSLv3.1。被设计用来使用TCP提供一个可靠的端到端安全服务,为两个通讯个体之间提供保密性和完整性。1)提供通信双方身份认证。通过公钥证书技术实现。2)对称加密算法用于数据加密,使得非授权用户不可读。3)安全散列算法用于保证消息的完整性。协议的使用https使用端口443,而不是象HTTP那样使用端口80来和TCP/IP进行通信。https协议需要到ca申请一个用于证明服务器用途类型的证书。SSL的体系结构包括两层协议:recordprotocol和handshakeprotocol(还有另外两个相对简单的协议)记录协议:握手协议:封装高层协议,提供基本的安全服务1)保密性,使用了对称加密算法;2)完整性,使用HMAC算法。为客户和服务器之间相互鉴别,并协商加密算法和密钥SSL的两个重要概念SSL会话(session):SSL连接(connection):连接是基于会话所商定的参数建立的一次传输,连接是一次性的。是client和server之间的一个关联。每个会话用sessionID来标识,通过握手协议创建,一个会话中断后,可以保存在缓存,以后还可以恢复。一个会话状态由以下参数定义:会话标识:服务器用于标识活动或恢复的会话状态所选的一个随机字节序列。对等实体证书:是对等实体的X509.v3证书,可以为空。压缩方法:在加密前使用的压缩数据的算法。密码规范:描述主要数据加密算法和计算MAC的散列算法,同时也定义如散列大小等加密属性。主密码:客户和服务器间48字节的共享密码。可恢复性:表明会话是否可被用于初始化新连接的标志。连接状态可用以下参数定义:服务器和客户端随机数:服务器和客户端为每个连接选择字节序列。服务器写MAC密钥:服务器发送数据时在MAC操作中使用的密码。客户端写MAC密钥:客户端发送数据时在MAC操作中使用的密码。服务器写密钥:服务器加密和客户端解密数据时使用的传统加密密钥。客户端写密钥:客户端加密和服务器解密数据时使用的传统加密密钥。初始化向量:使用CBC时,需要为每个密钥维护一个初始化向量(IV)。序列号:会话的各方为每个连接传送和接收消息维护一个单独的序列号。当接收或发送一个修改密码规范协议报文时,序列号被重置为0。序列号不能超过264-1SSL记录协议——封装高层协议记录协议提供的服务是保密性和消息完整性(使用的对称加密和MAC所需的共享密钥通过握手协议定义)。——SSL记录协议头ContentType:8位,上层协议类型记录头记录载荷Majorversion;Minorversion:16位,主次版本压缩长度:明文段(如果使用了压缩,则为压缩段)的字节长度。如SSL3.0,则major是3,minor是0application_dataalerthandshakechange_cipher_spec。SSL握手协议握手协议修改密码规范协议警报协议一旦握手商定一组新的密钥,就发送change_cipher_spec来指示此刻将启用新的密钥。描述错误的危害程度,如果是一个致命等级的报警消息,当前连接就会立即中断。SSL握手协议10个消息中的一种连接的四个阶段:1)建立安全能力2)服务器认证和密钥交换3)客户认证和密钥交换4)结束握手协议1)客户发送一个client_hello消息,包括以下参数:2)服务器发送server_hello消息,参数:客户建议的低版本以及服务器支持的最高版本、服务器产生的随机数、会话ID、服务器从客户建议的密码算法中挑出一套、服务器从客户建议的压缩方法中挑出一个。Ciphersuite:密钥交换方法(RSA,DH),加密算法,HMAC算法,是否出口等版本、随机数、会话ID、客户支持的密码算法列表、客户支持的压缩方法列表带MD5消息认证、支持128位加密的RC4只在美国国内使用SSL握手协议第一阶段4)服务器发送server_hello_done消息,等待应答。1)服务器发送自己的证书,消息包含x.509证书;2)服务器发送server_key_exchange消息:例如DH算法中的公钥参数(一个素数,原根)3)服务器发送certificate_request消息:向客户请求一个证书;SSL握手协议第二阶段然后:1)响应服务器请求证书,客户发送一个certificate消息,如果没有证书,则发送一个no_certificate警报;2)客户发送client_key_exchange消息;3)客户发送一个certificate_verify消息,其中包含一个签名,对从第一条消息以来的所有握手消息的HMAC值进行签名。首先:客户端验证服务器证书的合法性第四阶段建立起一个安全的连接,结束握手协议。SSL握手协议第三、四阶段问题:如何实现机密性?共享主密钥的创建step1交换次密钥step2双方共同计算一次性的48字节的主密钥,其是按照一个伪随机函数(使用散列函数)生成,其他算法所需参数则由主密钥按类似函数生成,后续的内容就进行加密传输。由客户端生成次密钥,用服务器公钥加密发往服务器,服务器用私钥解密,得到次密钥。RSA、DH算法master_secret=MD5(pre_master_secret||SHA('A'||pre_master_secret||ClientHello.random||ServerHello.random))||MD5(pre_master_secret||SHA('BB'||pre_master_secret||ClientHello.random||ServerHello.random))||MD5(pre_master_secret||SHA('CCC'||pre_master_secret||ClientHello.random||ServerHello.random))我们可以发现,SSL客户端发送给SSL服务端的密钥不能直接用来加密数据或计算MAC值,该密钥是用来计算对称密钥和MAC密钥的信息,所以被称为pre_master_secret。SSL客户端和SSL服务器利用pre_master_secret计算出相同的主密钥(mastersecret),再利用mastersecret生成用于对称密钥算法、MAC算法等的密钥。HTTPS简介HTTPS其实是有两部分组成:HTTP+SSL/TLS,也就是在HTTP上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过TLS进行加密,所以传输的数据都是加密后的数据。用的端口号是443,用于“唤醒”SSL/TLSHTTPS简介当使用https时,如下的通信元素是加密处理的:•请求文档的URL•文档的内容•浏览器格式的内容•Cookie•http报头的内容再论中间人攻击为了应对中间人攻击,SSL协议可以验证参与通讯的一方或双方使用的证书是否是由权威的受信任的数字证书认证机构颁发,并且能执行双向身份认证,协议本身是非常完善,但并不是就一定能对中间人攻击免疫。