📒个人主页:热爱生活の李📒
❤️感谢大家阅读本文,同时欢迎访问本人主页查看更多文章❤️
🙏本人也在学习阶段,如若发现问题,请告知,非常感谢🙏
基本概念
HTTP
超文本传输协议,是一个基于请求与响应,无状态的应用层协议,常基于TCP传输数据,是一个客户端和服务器端请求和应答的标准,用于从WWW服务器传输超文本到本地浏览器的传输协议。
HTTPS
是以安全为目标的HTTP通道,就是HTTP的安全版,即在HTTP下加入SSL,因此加密的详细内容就需要SSL。
区别
HTTP协议传输的数据都是没有加密的,也就是明文的,因此使用HTTP协议传输隐私信息不安全,为了保证这些隐私数据能够加密传输,于是Netscape公司设计了SSL协议用于对HTTP协议传输的数据进行加密,从而诞生了HTTPS。简单的说HTTPS = HTTP+SSL协议构建的可进行加密传输、身份认证的网络协议,比HTTP更加安全。
HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
HTTP与HTTPS使用的安全不同的连接方式,用的端口也不同,HTTP是80,HTTPS是443
HTTP连接很简单无状态
HTTPS是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比HTTP安全
HTTPS缺点
HTTPS协议多次握手,导致页面的加载时间延长近50%
HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗
申请SSL证书需要钱,功能越强大的证书费用越贵
SSL涉及的安全算法会消耗CPU资源,对服务器资源消耗较大
SSL
SSL协议的三个特性
1、保密:在握手协议中定义了会话密钥后,所有的消息都被加密
2、鉴别:可选的客户端认证和强制的服务端认证
3、完整性:传送的消息包括消息完整性检查(使用MAC)
SSL的工作原理
握手协议 :握手协议是客户机和服务器用SSL连接通信时使用的第一个子协议,握手协议包括客户机与服务器之间的一系列消息。SSL中最复杂的协议就是握手协议。该协议允许服务器和客户机相互验证,协商加密和MAC算法以及保密密钥,用来保护在SSL记录中发送的数据。握手协议是在应用程序的数据传输之前使用的。
记录协议 :记录协议在客户机和服务器握手成功后使用,即客户机和服务器鉴别对方和确定安全信息交换使用的算法后,进入SSL记录协议,记录协议向SSL连接提供两个服务:
1、保密性:使用握手协议的秘密密钥实现
2、完整性:握手协议定义了MAC。用来保证消息完整性
警报协议
客户机和服务器发现错误时,向对方发送一个警报消息。如果是致命错误,则算法立即关闭SSL连接,双方还会先删除相关的会话号,秘密和密钥
SSL握手协议总过程(访问w3school为例)
SSL建立第一阶段
客户端发送ClientHello消息到服务端,服务端收到ClientHello消息后,再发送ServerHello消息回应客户端
ClientHello
客户端版本
客户端随机数
会话ID
加密套件
压缩方法
ServerHello
服务器版本Version
服务器随机数
加密套件
会话ID
压缩算法
拓展包
这个阶段之后,
1、客户端和服务端知道了SSL版本
2、密钥交换、信息验证、加密算法
3、压缩方法
4、有关密钥生成的两个随机数
SSL建立第二阶段
服务器启动SSL握手第二阶段:
1、证书:服务器将数字证书和到根CA整个链发给客户端,使客户端能用到服务器证书中的服务器公钥认证服务器
2、服务器密钥交换(可选):这里看密钥交换算法而定
3、证书请求:服务端可能会要求客户自身进行验证
4、服务器握手完成
SSL建立第三阶段
客户机启动SSL握手第三阶段
1、证书:为了对服务器证明自己,客户要发送一个证书信息
2、客户机密钥交换:这里客户端将预备主密钥发送给服务端,注意这里会使用服务端的公钥进行加密
3、证书验证:对预备密钥和随机数进行签名
SSL建立第四阶段
建立起一个安全的连接,客户端发送一个Change Cipher Spec,并且把协商得到的CipherSuite拷贝到当前连接的状态之中。然后客户端用新的算法、密钥参数发送一个Finished消息,这条消息可以检查密钥交换和认证过程是否已经成功。其中包括一个校验值,对客户端整个握手过程的消息进行校验。服务器同样。握手过程完成,客户端和服务起可以交换应用层数据进行通信。
消息验证代码(HMAC)和TLS数据完整性
当服务器或客户端使用主密钥加密数据时,它还会计算明文数据的校验和(哈希值),这个校验和称为消息验证代码(MAC)。然后在发送之前将MAC包含在加密数据中。密钥用于从数据中生成MAC,以确保传输过程中攻击者无法从数据中生成相同的MAC,故而MAC被称为HMAC(哈希消息认证码)。另一方面,在接收到消息时,解密器将MAC与明文分开,然后用它的密钥计算明文的校验和,并将其与接收到的MAC进行比较,如果匹配,那我们就可以得出结论:数据在传输过程中没有被篡改。