一、 什么是HTTPS?算法
HTTPS(Hyper Text Transfer Protocol over Secure Socket Layer)安全超文本传输协议,能够理解为HTTP+SSL/TLS,简单来讲它是HTTP的安全版。浏览器
HTTP 协议定义了一套规范,让客户端或浏览器能够和服务器正常通讯,完成数据传输,可是HTTP协议采用明文传输信息,存在信息窃听、信息篡改和信息劫持的风险。安全
TLS(Transport Layer Security 传输层安全)/SSL (Secure Sockets Layer安全套接层), 是介于传输层【TCP】和应用层【HTTP】 之间的一层安全协议,TLS/SSL 具备身份验证、信息加密和完整性校验的功能,目的是保障客户端到服务端之间链接的安全性。服务器
SSL/TLS介于应用层和传输层之间,而且分为握手层和记录层。dom
二、 TLS/SSL历史函数
目前,应用最普遍的是TLS 1.2。工具
TLS 1.0一般被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3。性能
三、 HTTPS原理网站
HTTPS 协议的主要功能基本都依赖于 TLS/SSL 协议,TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。编码
在信息传输过程当中,散列函数不能单独实现信息防篡改,由于明文传输,中间人能够修改信息以后从新计算信息摘要,所以须要对传输的信息以及信息摘要进行加密;
对称加密须要共享相同的密码,密码的安全是保证信息安全的基础,服务器和多 个客户端通讯,须要维持多个密码记录,且缺乏修改密码的机制;
非对称加密的特色是信息传输一对多,服务器只须要维持一个私钥就可以和多个客户端进行加密通讯,但服务器发出的信息可以被全部的客户端解密,且该算法的计算复杂,加密速度慢。
结合三类算法的特色,TLS 的基本工做方式是,客户端使用非对称加密与服务器进行通讯,实现身份验证并协商对称加密使用的密钥,而后对称加密算法采用协商密钥对信息以及信息摘要进行加密通讯,不一样的节点之间采用的对称密钥不一样,从而能够保证信息只能通讯双方获取。
四、 HTTPS演化
第一步:对称加密
对称加密算法的特色是加密和解密是使用同一个密钥,加解密速度快,典型的对称加密算法有DES、AES等。使用对称加密,客户端和服务端双方拥有相同的密钥,信息获得安全传输。
此种方式的缺点是:
第二步:非对称加密
非对称加密算法的特色加密和解密分别使用不一样的密钥, 相对来讲加解密速度较慢,典型的非对称加密算法有RSA、DSA等。客户端用公钥对请求内容加密,服务器使用私钥对内容解密,反之亦然。
此种方式的缺点是:
第三步:非对称加密+对称加密
如上图所示
(1)第③ 步时,客户端向服务端发送对称加密算法和对称密钥用公钥进行加密后发给服务器;
(2)服务器收到信息后,用私钥解密,提取出对称加密算法和对称密钥后,用客户端约定的对称密钥加密。
遇到的问题:
(1)客户端如何得到公钥;
(2)如何确认服务器身份。
第四步:非对称加密+对称加密+SSL证书
一、 证书做用
二、 证书内容
数字证书是一个电子文档,其中包含了持有者的信息、公钥以及证实该证书有效的数字签名。
X.509 是一种数字证书标准,主要定义了证书中应该包含哪些内容,主要字段以下:
三、 编码格式
数字证书目前主要有如下几种编码格式:
四、 CA
CA(Certificate Authority)是数字证书认证机构的简称,是指发放、管理、废除数字证书的机构。CA的做用是检查证书持有者身份的合法性,并签发证书,以防证书被伪造或篡改,以及对证书和密钥进行管理。在数字证书认证的过程当中,CA做为权威的、公正的、可信赖的第三方,其做用是相当重要的。世界上的根 CA 就那么几家,浏览器或者操做系统在出厂的时候,已经内置了这些机构的自签名证书,上面记录他们的公钥信息,其中TOP5是Symantec、Comodo、Godaddy、GolbalSign 和 Digicert。你也能够在须要的时候手动安装 CA 证书。
五、 建立证书
六、 证书校验
七、 证书链
CA根证书和服务器证书中间增长一级证书机构,即中间证书,证书的产生和验证原理不变,只是增长一层验证,只要最后可以被任何信任的CA根证书验证合法便可。
优点:
SSL/TSL握手的做用是身份验证和协商密钥。密钥交换是为了在不安全数据通道中产生一个只有通讯双方知道的对称加密 Session Key。身份认证的目的是确保链接到拥有网站私钥的合法服务器。
TLS/SSL握手主要过程以下:
一、ClientHello
在握手流程中,ClientHello是第一个请求,将客户端的参数传送给服务器。主要请求参数包含:
二、 SeverHello
服务端收到ClientHello请求后,确认双方加密套件、压缩方法等会话参数,并返回给客户端。SeverHello消息的结构与ClientHello相似,只是每一个字段只包含一个选项。服务器的加密组件内容以及压缩方法等都是从接收到的客户端加密组件内筛选出来的。
三、Certificate
服务器返回HTTPS数字证书报文。
四、ServerKeyExchange
ServerKeyExchange包含了服务端为密钥交换的提供的数据。对于不一样的协商算法套件会存在差别。某些加密套件不须要服务器返回发送ServerKeyExchange消息。
五、ServerHelloDone
ServerHelloDone消息代表服务器已经将全部预计的握手消息发送完毕。在此以后,服务器会等待客户端发送消息。
六、ClientKeyExchange
ClientKeyExchange包含客户端为密钥交换提供的数据。这个消息受协商的密码套件的影响,内容随着不一样的协商密码套件而不一样。
七、ChangeCipherSpec
ChangeCipherSpec消息代表发送端已取得用以生成链接参数的足够信息,已生成加密密钥,而且将切换到加密模式。客户端和服务器在条件成熟时都会发送这个消息。注意:ChangeCipherSpec不属于握手消息,它是另外一种协议,只有一条消息,做为它的子协议进行实现。
八、Finished
Finished消息意味着握手已经完成。接下来,客户端与服务器进入加密通讯,就彻底是使用普通的HTTP协议,只不过用”会话密钥”加密内容。
密钥交换的过程,是通讯双方协商一个公共密钥的过程,该过程的输出是一个密钥,用于接下来的客户端和服务端之间的通讯加解密。考虑到因特网能够被窃听,须要一个算法来保护这个协商过程,确保只有客户端和服务端知道协商的结果。密钥交换算法通常经常使用的有RSA和DH,SSLV3.0一下版本只支持RSA密钥交换方式;
一、RSA密钥交换
RSA密钥交换抓包分析
一、Client Hello
二、Server Hello
三、Certificate
四、Server Hello Done
五、Client Key Exchange
六、Chage cipher spec
七、Encrypted Handshake Message
八、 Change cipher spec
九、Encryted Handshake Message
二、DH密钥交换
1976年,美国的两位数学家Whitfield Diffie和Martin Hellman率先发表了一种解决该密钥传输的方法,所以这种方法被你们称为Diffie–Hellman key exchange算法,这种算法提出这么一个作法:“在加密通信以前双方各自生成密码的一部分,而后互换后合成起来,做为最终的密码”。
维基百科上使用了一个颇有趣的比喻,就是颜料的混合:设想这样一个场景,Alice(A)和Bob(B),他们想在不见面的状况下秘密约定出一种颜色,但他们互相沟通的信息都会被公开,应该怎么办呢?
秘密在于,颜色混合是一种“不可逆”的操做,当双方交换颜色时,尽管咱们知道他们交换的颜色都是由一份黄色和另外一份其余颜色混合获得的,但咱们仍是没法或者很可贵到他们的私密颜色。
DH秘钥交换的原理很是类似,也是利用了数学上的一个“不可逆”的运算,就是离散对数(Discrete logarithm)
DH密钥交换抓包分析
SSL握手第一阶段:
一、Client Hello
二、Server Hello
SSL握手第二阶段:
三、Certficate
四、Server Key Exchange
五、Server Hello Done
SSL握手第三阶段:
六、Client Key Exchange
七、Change Cipher spec
八、Encrypted Handshake Message
SSL握手第四阶段:
九、Change Cipher spec
十、Encrypted Handshake Message
一、SSL证书欺骗攻击(SSLSniff)
此类攻击较为简单常见。首先经过ARP欺骗、DNS劫持甚至网关劫持等等,将客户端的访问重定向到攻击者的机器,让客户端机器与攻击者机器创建HTTPS链接(使用伪造证书),而攻击者机器再跟服务端链接。
这样用户在客户端看到的是相同域名的网站,但浏览器会提示证书不可信,用户不点击继续浏览就能避免被劫持的。因此这是最简单的攻击方式,也是最容易识别的攻击方式。
此类攻击有个经典的工具:SSLSniff。
二、SSL剥离攻击(SSLStrip)
SSL剥离,即将HTTPS链接降级到HTTP链接。假如客户端直接访问HTTPS的URL,攻击者是没办法直接进行降级的,由于HTTPS与HTTP虽然都是TCP链接,但HTTPS在传输HTTP数据以前,须要在进行了SSL握手,并协商传输密钥用来后续的加密传输;假如客户端与攻击者进行SSL握手,而攻击者没法提供可信任的证书来让客户端验证经过进行链接,因此客户端的系统会判断为SSL握手失败,断开链接。
该攻击方式主要是利用用户并不会每次都直接在浏览器上输入https://xxx.xxx.com来访问网站,或者有些网站并不是全网HTTPS,而是只在须要进行敏感数据传输时才使用HTTPS的漏洞。中间人攻击者在劫持了客户端与服务端的HTTP会话后,将HTTP页面里面全部的https://超连接都换成http://,用户在点击相应的连接时,是使用HTTP协议来进行访问;这样,就算服务器对相应的URL只支持HTTPS连接,但中间人同样能够和服务创建HTTPS链接以后,将数据使用HTTP协议转发给客户端,实现会话劫持。