一、简介
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,也可以讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。其实是表示目前连接使用了SSL进行加密,把保证客户端到服务器端的通信保护起来。
采用https的服务器必须从CA (Certificate Authority)申请一个用于证明服务器用途类型的证书。该证书只有用于对应的服务器的时候,客户端才信任此主机。
二、分析
Http请求在通讯时是可以被截取到数据信息的。为了不给未授权的第三方截取到通讯数据,需要将通讯信息进行加密。在网络上的数据传输,加密很容易。困难的是秘钥的分发和协商。因为在没有加密之前,通讯都会是通过明文进行传输。由于没有加密,第三方通过比较简单的分析客户端与服务器之间的通讯内容,很容易得出通讯协议格式、加密算法和秘钥。
1.加密算法
加密算法分俩种:对称加密算法,非对称加密算法。
a.对称加密:加密和解密使用的是同一个密钥加解密的算法。加解密速度快。
b.非对称加密:加密密钥和解密密钥是不同的,并且是一对一的。加解密速度慢。
非对称算法包含公钥密钥和私钥密钥,非对称算法一个最大的缺点是速度慢,密钥长度越长,就越慢。因此,在网络上进行数据传输,为了安全和性能考虑,会使用非对称算法传输会话密钥,然后使用对称算法对传输的会话信息进行加解密。对称加密算法常见的有DES、AES、RC4、BLOWFISH等,非对称加密算法有ECC、RSA、DH等。
2.SSL协议
SSL其实就是用来协商密钥和加密算法的。
SSL协议分俩个阶段:握手阶段和数据传输阶段
握手阶段主要完成加密算法和密钥协商以及对服务器进行认证。握手完成后,才会进行数据传输。
SSL协议握手阶段有俩个主要的目的:协商加密算法和协商密钥。如图:
2.1.客户端将支持的所有加密算法列表连同一个密钥产生过程中需要用到的随机数发送给服务器。
2.2.服务器从算法列表中选择一个加密算法(双发都支持的),并向客户端发送服务器证书(包括了服务器的标识、公钥等信息)和密钥产生过程中需要用到的随机数一同发送给客户端。
2.3.客户端对服务器的证书进行验证(主要有三个方面:a)、该证书是否为正规的CA所颁发,b)、服务器证书的标识与正访问的服务器标识是否一致,c)证书的时间是否到期。)并从证书中获取公钥,然后随机生成一个叫做pre_master_secret的随机字符串,使用公钥加密后发给服务器。
2.4.客户端与服务器端根据pre_master_secret和2.1、2.2步中的随机数分别独立计算出加密密钥和MAC密钥。
2.5.客户端将所有握手消息的MAC值发送给服务器。
2.6.服务器将所有握手消息的MAC值发送给客户端。
攻击手段:
一般SSL中间人攻击有两种,一是抓取网络报文,分析SSL/TLS协议,然后替换通信过程中的公钥,对两边都进行欺骗,这种实现方法要求对SSL协议理解比较高,需要深刻了解SSL协议的算法,而且每种加密套件需要实现,也非常繁琐。
第二种方法类似于代理,实现方法相比较第一种要简单一些,但是对软件的部署环境有一定的要求。
相关文章