浅谈HTTPS机制

 

网络汇总...





什么是HTTPS

在http(超文本传输协议)基础上提出的一种安全的http协议,因此可以称为安全的超文本传输协议。http协议直接放置在TCP协议之上,而https提出在http和TCP中间加上一层加密层。从发送端看,这一层负责把http的内容加密后送到下层的TCP,从接收方看,这一层负责将TCP送来的数据解密还原成http的内容。HTTPS是HTTP+SSL实现了安全的HTTP协议。那什么是SSL呢?
什么是SSL
SSL是Secure Socket Layer(安全套接字层)的缩写,是Netscape公司设计的主要用于WEB的安全传输协议。从名字就可以看出它在https协议栈中负责实现上面提到的加密层。加密层是介于TCP和HTTP协议之间。

这样子避免了改动HTTP应用层协议来保证安全性,也可以继续复用TCP传输层协议。为高层协议提供数据封装、压缩、加密等基本功能的支持。

什么是TSL
TSL是Transport Layer Security(传输层安全协议)的缩写,用于两个应用程序之间提供保密性和数据完整性。建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本,可以理解为SSL 3.1。该协议由两层组成:TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。
SSL/TSL协议的主要功能点
  • 认证用户和服务器,确保数据发送到正确的客户机和服务器
  • 加密数据以防止数据中途被窃取
  • 维护数据的完整性,确保数据在传输过程中不被改变
其中第一条功能点是要做到对用户和服务器两端的认证,从而保证通信的双方身份的真实性,这就是数字证书的概念。

什么是数字证书
一种文件的名称,好比一个机构或人的签名,能够证明这个机构或人的真实性。其中包含的信息,用于实现上述功能。

这里在说一下CA机构,又称为证书认证中心 (Certificate Authority),是一个负责发放和管理数字证书的第三方权威机构,它负责管理PKI结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份。CA机构的数字签名使得攻击者不能伪造和篡改证书。CA的根证书会安装在各个系统到浏览器中,并且浏览器会维护一个根受信任机构列表。当收到服务器发来的证书时,会验证当前证书是否是可信任的。

证书信任包括三部分:
(1)证书的颁发者是否在根受信任的证书颁发机构列表中
(2)证书是否过期
(3)证书的持有者是否和访问的网站一致
如何加密和认证
加密是指通信双方为了防止铭感信息在信道上被第三方窃听而泄漏,将明文通过加密变成密文,如果第三方无法解密的话,就算他获得密文也无能为力;

认证是指通信双方为了确认对方是值得信任的消息发送或接受方,而不是使用假身份的骗子,采取的确认身份的方式。只有同时进行了加密和认真才能保证通信的安全,因此在SSL通信协议中这两者都被应。
汇总
https依赖一种实现方式,目前通用的是SSL,数字证书是支持这种安全通信的文件。另外有SSL衍生出TLS和WTLS,前者是IEFT将SSL标准化之后产生的(TSL1.0),与SSL差别很小,后者是用于无线环境下的TSL。
常用的加密算法
  • 对称加密算法:是指加密和解密使用相同的密钥,典型的有DES、RC5、IDEA(分组加密),RC4(序列加密);
  • 非对称密码算法:又称为公钥加密算法,是指加密和解密使用不同的密钥(公开的公钥用于加密,私有的私钥用于解密)。比如A发送,B接收,A想确保消息只有B看到,需要B生成一对公私钥,并拿到B的公钥。于是A用这个公钥加密消息,B收到密文后用自己的与之匹配的私钥解密即可。反过来也可以用私钥加密公钥解密。也就是说对于给定的公钥有且只有与之匹配的私钥可以解密,对于给定的私钥,有且只有与之匹配的公钥可以解密。典型的算法有RSA,DSA,DH;
  • 散列算法:散列变换是指把文件内容通过某种公开的算法,变成固定长度的值(散列值),这个过程可以使用密钥也可以不使用。这种散列变换是不可逆的,也就是说不能从散列值变成原文。因此,散列变换通常用于验证原文是否被篡改。典型的算法有:MD5,SHA,Base64,CRC等。
SSL的加密过程
  • 客户端发出请求(ClientHello)客户端主要向服务器提供以下信息:(1)支持的协议版本,比如TLS 1.0版(2)客户端生成的随机数,用于生成对话密钥(3)支持的加密方法,比如RSA公钥加密(4)支持的压缩方法
  • 服务器回应(SeverHello):服务端在接收到客户端的Client Hello之后,服务端需要将自己的证书发送给客户端。这个证书是对于服务端的一种认证。服务器的回应包含以下内容:(1)认使用的加密通信协议版本(2)服务器生成的随机数(3)确认使用的加密方法(4)服务器证书
  • 客户端回应(Certificate Verify):如果服务端需要对客户端进行验证,在客户端收到服务端的Server Hello消息之后,首先需要向服务端发送客户端的证书,让服务端来验证客户端的合法性。接着,客户端需要对服务端的证书进行检查,如果证书不是可信机构颁布、或者证书中的域名与实际域名不一致、或者证书已经过期,就会向访问者显示一个警告,由其选择是否还要继续通信。如果证书没有问题,客户端就会从服务器证书中取出服务器的公钥。然后,向服务器发送下面三项信息:(1)一个随机数,该随机数用服务器公钥加密(2)编码改变通知(3)客户端握手结束通知如果证书验证正确,客户端会使用之前协商好的加密套件和Session Secret加密一段Finish的数据传送给服务端,此数据是为了在正式传输应用数据之前对刚刚握手建立起来的加解密通道进行验证。
  • 服务器的最后回应(Server Finish):服务端在接收到客户端传过来的PreMaster加密数据之后,使用私钥对这段加密数据进行解密,并对数据进行验证,也会使用跟客户端同样的方式生成Session Secret,一切准备好之后,告知客户端已经切换到协商过的加密套件状态,准备使用加密套件和Session Secret加密数据了。之后,服务端也会使用Session Secret加密一段Finish消息发送给客户端,以验证之前通过握手建立起来的加解密通道是否成功。
整个通信验证过程如下图所示

Secret Keys
我们先来看看这些Secret Keys的生成过程以及作用流程图:


PreMaster secret
PreMaster Secret是在客户端使用RSA或者Diffie-Hellman等加密算法生成的。它将用来跟服务端和客户端在Hello阶段产生的随机数结合在一起生成 Master Secret。在客户端使用服务端的公钥对PreMaster Secret进行加密之后传送给服务端,服务端将使用私钥进行解密得到PreMaster secret。也就是说服务端和客户端都有一份相同的PreMaster secret和随机数。
Master secret
由于服务端和客户端都有一份相同的PreMaster secret和随机数,这个随机数将作为后面产生Master secret的种子,结合PreMaster secret,客户端和服务端将计算出同样的Master secret。Master secret是有系列的hash值组成的,它将作为数据加解密相关的secret的 Key Material 的一部分。Key Material最终解析出来的数据如下:

其中,write MAC key,就是session secret或者说是session key。Client write MAC key是客户端发数据的session secret,Server write MAC secret是服务端发送数据的session key。MAC(Message Authentication Code),是一个数字签名,用来验证数据的完整性,可以检测到数据是否被串改。


    关注 一点半克


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册