超文本传输协议,一种应用层协议。简而言之,就是一种发布和接收html页面的方法,被用于在浏览器和服务器之间传递信息。
默认工作在TCP协议80端口,以明文传输数据,不安全。
超文本传输安全协议,由HTTP进行通信,但是利用SSL/TLS来加密数据。默认工作在TCP协议443端口。
SSL:安全套接层
TSL:传输层安全
HTTPS的工作流程
HTTP和HTTPS的区别
作用:建立一个可靠的连接,用于端对端传输数据。
作用:断开客户端和服务端的连接
HTTPS在传输数据之前需要客户端和服务端进行一次握手,握手过程中将确定密钥信息(对称加密算法的密钥)。
Step1 客户端将自己支持的加密规则发送给服务端
Step2 服务端从中选出一组加密算法和hash算法,并传送证书给客户端,用于向客户端表明自己的身份(不是黑客的服务端),证书里包含公钥、颁发机构和过期时间等
Step3 客户端的TSL解析证书。首先验证证书的有效性(颁发机构、过期时间等),若证书无异常,会生成一个随机值再使用证书中公钥进行加密。使用约定好的hash算法计算握手信息,并使用该随机值对握手信息进行加密。
Step4 客户端传送之前生成的所有信息(随机值和握手信息),服务端接收到后,使用私钥解密得到客户端传来的随机值和握手信息,该随机值作为密钥(客户端和服务端都知道这个密钥)。服务端验证hash是否与客户端发来的hash一致。
Step5 服务端使用密钥加密一段握手信息发送给客户端,客户端解密并计算握手信息中的hash
Step6 握手阶段结束,之后端对端传输数据将使用对称加密。
证书:类似于身份证,用来证明网站的身份。
根据证书的用途进行分类
SSL证书:HTTPS的握手阶段服务端会向客户端发送一个SSL证书,用来向客户端证明自己的身份。
SSL证书的安全问题
对HTTPS最常见的攻击手段就是SSL证书欺骗或者叫SSL劫持,是一种典型的中间人攻击。当黑客发起SSL劫持时,会伪造一个SSL证书发给浏览器,由于伪造的SSL证书不受信任,浏览器会给出提示。
不过SSL劫持并非只是用于攻击目的,在一些特殊情况下利用SSL劫持我们可以更顺畅的访问网络。
TCP/IP:定义了电子设备如何连入因特网,数据如何在电子设备之间传输的标准
TCP/IP中用于处理数据通信的协议:
TCP 用于应用程序之间的通信。在TCP中,程序A在与程序B通信前,会发送一个通信请求,双方握手后会建立一个全双工通信。
IP 用于计算机之间的通信。IP 是无连接的通信协议。它不会占用两个正在通信的计算机之间的通信线路。通过 IP,数据被分割为小的独立的包,并通过因特网在计算机之间传送。IP 负责将每个包路由至它的目的地。
TCP/IP 是基于 TCP 和 IP 这两个最初的协议之上的不同的通信协议的协议簇。
TCP/IP协议簇分为四层,每一层都呼叫它的下一层所提供 的网络来完成自己的需求。这4层分别为:
加密和解密使用的是同一个密钥。
优点:加解密的高速度和使用长密钥时的难破解性。
缺点:发送方和接收方在协商过程中密钥可能会泄露。
经典对称加密算法:AES
加密过程:
1、对齐:约定块的大小固定是128bit(16个字节),即所有加解密过程都是按照16个字节独立进行的。若待加密的明文不是16个字节的整数倍,则进行填充。
填充要求:明文长度模16的结果以16进制表示出来,然后在明文后面追加该字节直至明文达到16个字节的整数倍。
2、分块:对齐后,将明文分成相同大小的快,后续加密过程以块为单位独立进行,块与块之间无关联。
3、轮:对一个块的加密过程是循环往复的。一个块经过加密计算后,还是一个16字节的块,循环往复多次。
4、块加密:查表映射、取异或、移位、矩阵乘法
解密:加密过程的逆运算
加密模式:AES加解密只管块内,不管块与块之间。为了解决块间的混淆扩散问题,引入加密模式。经典的加密模式有CBC和CRT。
CBC:将当前块的明文与前一个块的密文进行异或,再进行当前块的AES加密过程。对于第一个块,与额外输入的IV向量进行异或。
CRT:AES不对明文进行加密,而是对一个数字进行加密,用加密后的内容与明文异或,产生密文。数字由输入的IV初始化,按照快的顺序依次递增,为每一个块分配一个数字。
加密和解密使用不同的密钥。发送方使用公钥加密数据,接收方使用私钥解密数据。非对称算法不仅有加密功能,还有提供签名的功能。发送方使用私钥加密,接收方通过公钥解密成功,就说明发送方拥有对应的私钥,可以证明发送方的身份。私钥加密就是我们说的签名。
优点:公钥是公开的信息,不需要保密,解决了密钥分发的问题。
缺点:加解密速度要远远慢于对称加密
场景:SSH登录、Git上传等,都可以将公钥上传到服务器,客户端保存私钥。
使用散列算法往往不是为了加密,而是利用它可以对任意长度的输入,计算出一个定长的摘要。大量应用于使用MD5或者SHA算法计算出唯一id。散列算法更大的价值在于它的不可逆性。
场景1:Git中的提交记录、文件的完整性校验、字典或者Map的实现等
场景2:注册时对用户密码通过散列算法进行计算,存储最终的散列值。后续登陆时比较散列值即可。
散列算法的要求:
注意:使用散列算法时,注意加“盐”。“盐”指的是一串随机的字符串,是可以公开的。将密码加“盐”再进行散列计算,即使有两个用户的密码一样,也会拥有不同的散列值。“盐”越长,越安全。
概述:信息-摘要算法5,用于确保信息传输完整的一致性。
特点 :
压缩性:任意长度的数据,算出的MD5值长度固定
容易计算:从原数据算出MD5值很容易
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别
强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的
MD5加密步骤:
1、填充:对信息进行填充,使其位长除以512的结果是448。填充过程是必须的,即使信息位长除以512的结果已经是448。
填充办法:填充一个1和多个0,直至满足条件
2、初始化变量
3、处理分组数据
任意长度的数据经过SHA256都会产生一个256位的哈希值,称为信息摘要。
对称加密用 AES+CTR、非对称加密用 ECC、散列算法用 SHA256 加盐,就能够满足大部分的使用场景了。
我们知道HTTP协议是无状态的。假设我们登录淘宝,一秒后关闭了淘宝页面,接着又打开淘宝页面发现需要再次登录。上述场景称为登录无状态。无状态指对交互性场景没有记忆性。为了弥补HTTP协议的无状态性,引入了cookie和session。
cookie是服务器发送到客户端并保存(暂时保存或者永久保存)在客户端的一小块数据。cookie会再下一次请求服务器时候携带发送到服务器上。通常用来告诉服务器两次请求是否来自同一浏览器,用于保持用户登陆状态。
作用:为了网站(服务端)辨识用户身份
session是指端对端的一次会话过程。当用户访问不同的网站时,session对象中的变量不会丢失,在整个用户会话中一直存在;当客户端关闭或者session超时失效时,会话结束。
作用:存储用户会话所需要的属性和配置信息
在cookie中存储session_id,将具体数据保存在session中。如果用户已经登录了,服务器会在cookie中存储session_id;下次请求时,会携带session_id,服务器根据session_id获取用户session信息,就能知道用户是谁以及之前保存的信息。
上一篇:Wwise集成到unreal
下一篇:数据库的查询