HTTP协议--HTTP和HTTPS

HTTP协议

HTTP和HTTPS的区别

http以明文形式传输内容

https 在http的基础上加上了SSL协议,依靠SSL整数验证服务器身份,并加密通信

主要区别

1.https协议需要CA证书,需要支付额外的费用

2.http是超文本传输协议,https是SSL加密的http传输协议

3.http使用 80 端口,https使用443端口

4.http连接简单,无状态的,而https是由ssl+http协议构建的可进行加密传输,身份认证的网络协议,比http协议安全

SSL简介

SSL(Secure Sockets Layer) 安全套接字协议

继任者 Transport Layer Security TLS 传输层安全协议

为网络通信提供安全及其数据完整性的安全协议,TLS/SSL在传输层与应用层之间对网络连接进行加密

TLS/SSL解析

TLS/SSL用于认证用户和服务器,位于TCP/IP顶层协议中的会话层,加解密及维护数据完整性,确保用户数据在传输过程中不会被修改。

TLS由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成

加密部分

非对称加密:公钥加密后只能以私钥解密,私钥加密后只能以公钥解密

常用算法RSA,ECC ECC加密密钥更短,性能更好

对称加密:双方约定秘钥,密文可用密钥解密

常用算法AES,DES

非对称加密传输对称加密的密钥,从而使得传输更加安全

优缺点

对称加密:运算速度快,难以将密钥传输给对方

非对称加密:运算速度慢,可以将密钥安全地传输给对方

判断数据完整性

采用摘要算法(Hash算法)

用哈希算法将数据压缩成特定长度的独一无二的字符串,对源数据的任何微小改动都会使得hash算法的结果造成差异,故可以保证数据传输的安全与完整性。

常用算法

MD5,SHA256 SHA224

数字签名

在客户端和服务器交换公钥时可以用数字签名来验证两者身份

发送数字签名

发送方:首先将传送的内容通过Hash算法算出一个固定长度的摘要(hash值),如果摘要相同,说明信息相同。然后发送方用自己的私钥对hash值进行加密,再把公钥发送给接收方。

数字签名验证

接收方:用发送方发过来的公钥去解之前的摘要密文,这样就可以得到一个Hash值1,然后当场用hash算法计算出明文内容的hash值hash2,如果hash1=hash2就说明内容没有被篡改(摘要一致),而且内容是由发送方发送过来的,不可抵赖(密钥能用对方的公钥解开)

举例:A向B发送一个数据,且希望B相信是由A发送的,且内容没有被人篡改。A将数据写好后,对其用哈希算法形成一个摘要,然后A再用自己的私钥对摘要加密形成数字签名,然后A把数据和签名一同发送给B。B在收到数据后,用A的公钥对数字签名进行解密,获得摘要,再把数据通过哈希算法得到一个哈希值,再与之前得到的摘要进行对比,如果一致那么说明内容没有被修改且发送者确实为A。

Q1:为什么还要对已经是hash值的摘要进行加密?

A1:摘要不能反推出内容,但是攻击方可能根本不想知道内容,他只想让接收方相信内容是发送方发送的而已。如果摘要需要进行加密,那么攻击方用自己的私钥加密的内容,接收方用发送方的公钥时解不开的。所以数字签名可以保证内容确实是由发送方发送的,而且内容没有被修改。

Q2:攻击方如果将发送方的公钥替换成了自己的公钥怎么办?

如果接收方将文件解密了,那么接收方就可以确认文件是由发送方发过来的,但是如果这个公钥被攻击方替换了,即接收方用攻击方的公钥解密了攻击方的数字签名。这时候可以用数字证书(CA证书)来解决这个问题。

数字证书

数字证书是由CA签发的一种较为权威与公正的电子文档,证书内容包括:CA的信息,公钥用户信息。公钥,CA的签名和有效期等等。

CA是颁发数字签名的机构,是受大家信任的第三方,如果一个用户想要得到一份属于自己的数字证书,应向CA提出申请,在CA判明申请者的身份后就给他分配一个公钥,并且CA将该公钥与申请者的身份信息绑定在一起,并为它签字,便形成证书发给申请人。

发送方向接收方发送数据的时候附加数字证书,B收到数据后用CA的公钥解开数字证书就可以拿到A真实的公钥了,就可以证明信件是A发送的。

根证书中间证书

根证书是CA自己给自己颁发的证书,是信任链的起点。

中间证书跟根证书是层级关系,通过中间证书可以找到它上一级的证书。

建立连接

HTTP建立连接过程

1.客户端向服务端发送请求报文

2.服务端根据请求报文收集对应的资源组合形成响应报文

3.客户端收到报文并进行解析

TCP 3次握手过程

1.客户端向服务端发送SYN包并等待确认

2.服务端接收SYN包并向客户端返回一个ACK确认包,同时自己发送一个SYN包,即SYN+ACK包

3.客户端收到并向服务端发送ACK确认包

TCP 4次挥手过程

1.客户端向服务端发送FIN包,告知服务器即将关闭通信

2.服务端收到FIN包并回应一个ACK包

3.服务端发送FIN包,告知客户端即将关闭通信

4.客户端收到ACK+FIN包,回复一个ACK包,并在2MSL里如果没有收到消息则关闭,服务端收到ACK包则立即关闭

HTTPS建立连接过程

1.客户端向服务端发送一个招呼报文(HELLO),报文包含自己支持的SSL版本、加密算法等信息

2.服务端回应一个招呼报文(HI),包含自己支持的SSL版本、加密算法等信息

3.服务端发送自己经过CA认证的公钥(FPKEY)

​ 3.1.服务端向CA认证机构发送自己的公钥FPKEY

​ 3.2.CA认证机构使用自己的私钥对FPKEY进行签名并返回给服务端

4.服务端发送结束招呼报文,SSL第一次握手结束

5.客户端使用FPKEY对自己的随机密码串(CKEY)进行加密并发送给服务端

​ 5.1客户端首先使用CA公开密钥对FPKEY签名进行认证,确认密钥没有被替换

6.客户端发送提示报文,后续报文将用CKEY进行加密

7.客户端发送finished报文,表示该次发送结束

​ 7.1后续是否通信取决于finished报文是否能被服务端成功解密

8.服务端发送提示报文,表示他之后报文也用CKEY加密

9.服务端发送finished报文,表示SSL握手结束,成功建立SSL连接

10.客户端开始发送HTTP报文

​ 10.1建立TCP连接,开始传输数据

11.服务端发送HTTP回复报文

12.客户端发送并断开连接报文,并断开TCP连接

posted @ 2022-03-31 00:00  ShadowMurloc  阅读(129)  评论(0编辑  收藏  举报