1、HTTPS简介2012-02-10第一节第一节 HTTPSHTTPS简介简介引入:随着网络通信和电子商务等服务和资源进入人们的日常生活,人们在享受网络带来的各种便利的同时,面临各种各样的安全隐患。我们经常接触到的就有邮箱登录,网上购物,电子银行等等。这很多是基于 HTTP 协议的。但HTTPRFC2616最初是在INTERNET上不用密码的应用。因此随着人们对安全性的要求增加。HTTPS协议,为我们提供了面向通道的安全性。目录目录目录nHTTPS简介nSSL协议介绍nSSL记录协议nSSL握手协议HTTPS简介简介nHTTPS(全称:Hypertext Transfer Protocol ov
2、er Secure Socket Layer)n是HTTP的安全版nHTTPS默认使用TCP端口443,也可以指定其他的TCP端口。nURI格式 https/:URL一个URI例子:https:/ Sockets Layer)协议。nSSL是Netscape公司发明的一种用于WEB的安全传输协议。随着时间的推移由于Netscape失去了市场份额,它将SSL的维护工作移交给因特网工程任务组(IETF)。第一个后Netscape版本被重新命名为安全传输层协议(TLS),TLS(Transport Layer Security:RFC 2246)是基于SSL上研发的,但是与SSLv3.0有细微的差别
3、。n因此,SSL协议有时也称为TLS协议。目前常用的是TLSv1.0的协议。SSL协议介绍协议介绍nSSL协议的功能n1)保证传输数据的保密性n2)保证传输数据的完整性n3)实现通信双方的互相身份认证SSL协议介绍协议介绍nSSL协议在协议栈的位置IP协议协议TCP协议协议HTTP、TELNET、FTP等应用层协议等应用层协议SSL记录协议记录协议应用数据应用数据告警告警握手握手ChangeCipherSpecSSL协议介绍协议介绍nSSL 协议是一个分层的协议,共有两层组成。n高层协议包括:nSSL 握手协议(SSL HandshakeProtocol)、n改变加密约定协议(Change C
4、ipher Spec Protocol)、n报警协议(AlertProtocol)n处于 SSL 协议的底层的是:n SSL记录层协议(SSL Record Protocol)SSL记录协议记录协议nSSL的记录协议n记录层协议实际上是一个简单的封装或者说是“打包”协议。记录可能是明文传送的,也可能是被加密传送的,n纪录协议的功能n保证消息的完整性n机密性SSL记录协议记录协议nSSL记录的结构示意图:类型类型版本版本长度长度明文数据明文数据/加密数据加密数据1字节2字节2字节(长度)字节类型类型:有握手协议、报警协议、改变加密约定协议、应用数据等四种有握手协议、报警协议、改变加密约定协议、应
5、用数据等四种加密数据加密数据可分解为数据HMAC填充*填充长度*注:HMAC:Keyed-Hash Message Authentication Code(消息验证码)SSL记录协议记录协议nMAC(Message Authentication Code)消息验证码消息验证码n消息验证码也称为消息摘要,是实现数据完整性的主要手段。n主要目的是认证消息、检验数据是否被篡改。n目前常用的消息摘要算法有MD5(Message-Digest Algorithm 5)和SHA(Secure Hash Algorithm)。nSSL中的摘要算法是:HMAC 即 Keyed-Hash Message Aut
6、hentication Code。nHMAC 是在使用消息摘要函数(例如 MD5 等)的同时,增加了一个“密钥”作为输入。SSL记录协议记录协议nSSL记录协议封装过程类型版本长度数据HMAC*填充*填充长度*1、填写”记录头信息”中的”版本”和”类型”*2、如果协商了压缩算法则压缩“数据”3、计算并附加MAC*4、计算“填充长度”,填写“填充字段”并“加密”5、填写记录头信息中的“长度”SSL记录协议记录协议nSSL记录协议解封装过程类型版本长度数据HMAC*填充*填充长度*1、读取”记录头信息”中的”版本”2、根据长度读入记录“数据”部分3、去掉“填充长度”和“填充“字段*4、检查并去掉M
7、AC5、如果协商了压缩算法则解压“数据”SSL握手协议握手协议nSSL 握手协议是SSL 协议中最重要同时也是最复杂的协议。nSSL 握手协议主要负责如下工作握手协议主要负责如下工作:n算法协商 n身份验证n 确定密钥SSL握手协议握手协议nSSL握手过程分为四种:nFull Handshake:全流程握手,C/S双方从无到有建立SSL连接;nResum session Handshake:C/S双方曾经建立过连接,但中途断了,SSL会话信息还有保留,只需要执行部分握手流程就可建立SSL连接;nServer Re-negotiation Handshake:已经建立了SSL连接,但server
8、端为了某些原因(比如安全性)要求重新对密钥进行协商,也只需要执行部分握手流程;nClient Re-negotiation Handshake:已经建立SSL连接,但client端为了某些原因要求重新协商,只需执行部分握手流程。n全流程握手(Full Handshake)携带客户的SSL版本号,加密套件列表,压缩算法列表,客户端随机数,sessionid=0;传送给服务器Server HelloServer Certificate*Client Certificate Requst*Server Hello done*Client CertificateClient Key Exchang*C
9、ertificate verifyChange Cipher SpecClient finished MessageClient helloChange Cipher SpecServer finished MessageApplication DataApplication Data服务器选择版本,确定要用的加密套件、压缩算法,计算sessionid,以及随机数发给客户端服务器将自己的证书发送给客户端服务端向客户端索要证书服务端通知客户端握手消息发送完成客户端向服务器端发送自己的证书客户端密钥交换(产生预主密钥(preMasterKey)客户端证书验证,让服务器验证发消息的客户端和客户端证书
10、的真实所有者 改变加密约定消息,通知服务端,之后的消息开始启用加密参数客户端的 SSL 协商成功结束,发送握手验证报文确保消息的完整性服务器端的 SSL 协商成功结束,发送握手验证报文确保消息的完整性改变加密约定消息,通知客户端,之后的消息开始启用加密参数应用数据传送下一页 携带客户的SSL版本号,加密套件列表,压缩算法列表,客户端随机数,sessionid=0;传送给服务器Client hellon客户端给服务器端发个hello的问候,问候里包含有它使用的SSL版本号、加密套件列表,压缩算法列表,客户端随机数,sessionid=0;n服务器收到客户端的问候后,会从客户端提供的版本号中选出双
11、方都支持的最高版本,从加密套件列表选择一种支持也安全性强的加密套件,从压缩算法列表选择压缩算法(一般为空)。返回nClient hellon服务器端将上述选择的加密套件,压缩算法(NULL),且计算一个session_id,和服务器端随机数发送给客户端服务器选择版本,确定要用的加密套件、压缩算法,计算sessionid,以及随机数发给客户端Server hellon客户端收到serverhello的报文会将加密套件,压缩算法(NULL),session_id,和服务器端随机数缓存起来。接着继续握手过程。返回nServer hello服务器将自己的证书发送给客户端Server Certifica
12、te*n服务器端将自己的证书发送给客户端,证明自己的身份。证书中包含有服务器的身份信息,以及服务器的公钥。n客户端收到Certificate报文会验证该证书是否过期,并将服务器的公钥缓存起来。返回nServer Certificate*Client Certificate Requst*n如果是SSL的双向认证的话,那么服务器端会向客户端发送client cert request 消息,索要客户端的证书,证书中包含有server端支持的证书类型,和所信任的所有证书发行机构(CA(Certificate Authority)列表。n客户端收到Client Certificate Requst报文
13、将消息中的证书类型列表和可信任证书发行机构列表保存下来,可在后面发送客户端证书时候拿来筛选证书用。服务端向客户端索要证书返回nClient Certificate Requst*Server Hello donen服务器端通知客户端这一步的握手消息发送完成。等待客户端确认。服务端通知客户端握手消息发送完成返回nServer Hello done*Client Certificaten客户端从之前收到server 端发的 cert request 消息中的支持的证书类型列表和信任的根 CA(Certificate Authentication)列表中选择满足条件的第一个证书发送给服务器。客户端向
14、服务器端发送自己的证书n服务器端会缓存客户端的公钥。返回n*Client CertificateClient Key Exchangn若为RSA加密,客户端则产生一个 48 位随机数作为 pre-master(预主密钥)并用服务器公钥加密后发出去。客户端向服务器端发送一个48位的预主密钥n服务器端缓存预主密钥。返回nClient Key Exchang*Certificate verify客户端证让服务器验证发消息的客户端和客户端证书的真实性n由于之前的Client Certificate消息中包含有客户端的公钥,因此用公钥解密该消息,验证客户端的真实性。nCertificate verify
15、这个消息中要包含一个签名,签名里头内容就是从 client hello 开始到目前为止所有握手消息(不包括本消息)的摘要,然后用客户端的私钥加密。返回n*Certificate verifyChange Cipher Spec改变加密约定消息,通知服务端,之后的消息开始启用加密参数n在发送该消息的同时,客户端会把之前的客户端随机数,服务器端随机数、以及预主钥产生一个主密钥。并将主密钥进行密钥导出(服务器端的写MAC密钥、客户端写MAC密钥、服务器端的写密钥、客户端的写密钥),该过程只在本地进行,不发送给对方。nChange Cipher Spec该消息只有一个值为1的字节。不属于握手协议,和握
16、手协议同一级别的改变加密约定协议。发送该消息的作用是为了告诉对方接下来的消息将采用新协商的加密套件和密钥进行通信。返回nChange Cipher SpecClient finished Message客户端的 SSL 协商成功结束,发送握手验证报文确保消息的完整性n这是客户端SSL协商成功结束的消息。也是第一个用协商好的密钥加密的消息。会把从client hello一直到现在的数据摘要,用客户端密钥加密,发送给服务器。确保握手过程的完整性和机密性。返回nClient finished MessageSSL握手协议握手协议n 加密套件列表加密套件列表:n列表中包含了Client端支持的所有密钥
17、套件。n一个密钥套件定义了一个密钥规格,其中描述如下 内容:n密钥交换算法(非对称加密算法),n是否出口n对称加密算法n支持的最高对称密钥位数nMAC(Message Authentication Code)算法(或摘要算法)。n例:SSL_RSA_WITH_RC4_128_MD5=0 x0004/*非对称加密算法或密钥交换算法为RSA,采用高强度128位对称加密算法RC4,摘要或MAC算法为MD5,不支持出口*/SSL握手协议握手协议n非对称加密算法和对称加密算法明文:ABCDEF密文:*加密运算密钥A 密文:*发送报文接受报文明文:ABCDEF 密钥B解密运算 图 非对称加密明文:ABCDEF密文:*加密运算密钥A 密文:*发送报文接受报文明文:ABCDEF 密钥A解密运算 图 对称加密总结总结n总结:n介绍了HTTPS协议n介绍了SSL协议的历史和体系结构n介绍了SSL的记录协议的结构,封装和解封装流程n介绍了SSL握手流程谢谢