HTTPS简介第一节HTTPS简介引入:◆随着网络通信和电子商务等服务和资源进入人们的日常生活,人们在享受网络带来的各种便利的同时,面临各种各样的安全隐患。◆我们经常接触到的就有邮箱登录,网上购物,电子银行等等。这很多是基于HTTP协议的。◆但HTTP[RFC2616]最初是在INTERNET上不用密码的应用。因此随着人们对安全性的要求增加。HTTPS协议,为我们提供了面向通道的安全性。目录目录•HTTPS简介•SSL协议介绍•SSL记录协议•SSL握手协议HTTPS简介•HTTPS(全称:HypertextTransferProtocoloverSecureSocketLayer)•是HTTP的安全版•HTTPS默认使用TCP端口443,也可以指定其他的TCP端口。•URI格式https//:URL一个URI例子:协议介绍•HTTPS中S,实际上是SSL(SecureSocketsLayer)协议。•SSL是Netscape公司发明的一种用于WEB的安全传输协议。随着时间的推移由于Netscape失去了市场份额,它将SSL的维护工作移交给因特网工程任务组(IETF)。第一个后Netscape版本被重新命名为安全传输层协议(TLS),TLS(TransportLayerSecurity:RFC2246)是基于SSL上研发的,但是与SSLv3.0有细微的差别。•因此,SSL协议有时也称为TLS协议。目前常用的是TLSv1.0的协议。SSL协议介绍•SSL协议的功能•1)保证传输数据的保密性•2)保证传输数据的完整性•3)实现通信双方的互相身份认证SSL协议介绍•SSL协议在协议栈的位置IP协议TCP协议HTTP、TELNET、FTP等应用层协议SSL记录协议应用数据告警握手ChangeCipherSpecSSL协议介绍•SSL协议是一个分层的协议,共有两层组成。•高层协议包括:•SSL握手协议(SSLHandshakeProtocol)、•改变加密约定协议(ChangeCipherSpecProtocol)、•报警协议(AlertProtocol)•处于SSL协议的底层的是:•SSL记录层协议(SSLRecordProtocol)SSL记录协议•SSL的记录协议•记录层协议实际上是一个简单的封装或者说是“打包”协议。记录可能是明文传送的,也可能是被加密传送的,•纪录协议的功能•保证消息的完整性•机密性SSL记录协议•SSL记录的结构示意图:类型版本长度明文数据/加密数据1字节2字节2字节(长度)字节类型:有握手协议、报警协议、改变加密约定协议、应用数据等四种加密数据可分解为数据HMAC填充*填充长度*注:HMAC:Keyed-HashMessageAuthenticationCode(消息验证码)SSL记录协议•MAC(MessageAuthenticationCode)消息验证码•消息验证码也称为消息摘要,是实现数据完整性的主要手段。•主要目的是认证消息、检验数据是否被篡改。•目前常用的消息摘要算法有MD5(Message-DigestAlgorithm5)和SHA(SecureHashAlgorithm)。•SSL中的摘要算法是:HMAC即Keyed-HashMessageAuthenticationCode。•HMAC是在使用消息摘要函数(例如MD5等)的同时,增加了一个“密钥”作为输入。SSL记录协议•SSL记录协议封装过程类型版本长度数据HMAC*填充*填充长度*1、填写”记录头信息”中的”版本”和”类型”*2、如果协商了压缩算法则压缩“数据”3、计算并附加MAC*4、计算“填充长度”,填写“填充字段”并“加密”5、填写记录头信息中的“长度”SSL记录协议•SSL记录协议解封装过程类型版本长度数据HMAC*填充*填充长度*1、读取”记录头信息”中的”版本”2、根据长度读入记录“数据”部分3、去掉“填充长度”和“填充“字段*4、检查并去掉MAC5、如果协商了压缩算法则解压“数据”SSL握手协议•SSL握手协议是SSL协议中最重要同时也是最复杂的协议。•SSL握手协议主要负责如下工作:•算法协商•身份验证•确定密钥SSL握手协议•SSL握手过程分为四种:•FullHandshake:全流程握手,C/S双方从无到有建立SSL连接;•ResumsessionHandshake:C/S双方曾经建立过连接,但中途断了,SSL会话信息还有保留,只需要执行部分握手流程就可建立SSL连接;•ServerRe-negotiationHandshake:已经建立了SSL连接,但server端为了某些原因(比如安全性)要求重新对密钥进行协商,也只需要执行部分握手流程;•ClientRe-negotiationHandshake:已经建立SSL连接,但client端为了某些原因要求重新协商,只需执行部分握手流程。全流程握手(FullHandshake)携带客户的SSL版本号,加密套件列表,压缩算法列表,客户端随机数,sessionid=0;传送给服务器ServerHelloServerCertificate*ClientCertificateRequst*ServerHellodone*ClientCertificateClientKeyExchang*Certificateverify[ChangeCipherSpec]ClientfinishedMessageClienthello[ChangeCipherSpec]ServerfinishedMessageApplicationDataApplicationData服务器选择版本,确定要用的加密套件、压缩算法,计算sessionid,以及随机数发给客户端服务器将自己的证书发送给客户端服务端向客户端索要证书服务端通知客户端握手消息发送完成客户端向服务器端发送自己的证书客户端密钥交换(产生预主密钥(preMasterKey))客户端证书验证,让服务器验证发消息的客户端和客户端证书的真实所有者改变加密约定消息,通知服务端,之后的消息开始启用加密参数客户端的SSL协商成功结束,发送握手验证报文确保消息的完整性服务器端的SSL协商成功结束,发送握手验证报文确保消息的完整性改变加密约定消息,通知客户端,之后的消息开始启用加密参数应用数据传送下一页SSL握手协议•加密套件列表:•列表中包含了Client端支持的所有密钥套件。•一个密钥套件定义了一个密钥规格,其中描述如下内容:•密钥交换算法(非对称加密算法),•是否出口•对称加密算法•支持的最高对称密钥位数•MAC(MessageAuthenticationCode)算法(或摘要算法)。•例:SSL_RSA_WITH_RC4_128_MD5=0x0004/*非对称加密算法或密钥交换算法为RSA,采用高强度128位对称加密算法RC4,摘要或MAC算法为MD5,不支持出口*/SSL握手协议•非对称加密算法和对称加密算法明文:ABCDEF密文:********加密运算密钥A+密文:********发送报文接受报文明文:ABCDEF+密钥B解密运算图非对称加密明文:ABCDEF密文:********加密运算密钥A+密文:********发送报文接受报文明文:ABCDEF+密钥A解密运算图对称加密总结•总结:•介绍了HTTPS协议•介绍了SSL协议的历史和体系结构•介绍了SSL的记录协议的结构,封装和解封装流程•介绍了SSL握手流程谢谢