云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

HTTPS通信原理及与HTTP的区别

jxf315 2025-05-22 11:11:50 教程文章 45 ℃

一、什么是http?

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而 [9] 消息内容则具有一个类似MIME的格式。HTTP协议定义了客户端与服务器之间交互的消息内容和步骤

二、什么是https?

即具有安全性的ssl加密传输协议,是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 再HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

与http的关系为 https = http + SSL/TSL ,HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

三、HTTP协议的不足

1、不验证身份,导致身份可能被伪装

HTTP是不会对请求的双方进行身份验证的,服务器不会校验客户端的身份,谁都可以向服务器发送请求,任何人都的请求都会进行响应; 客户端也不会验证响应的数据是否是由自己请求的目标服务器所发出。

2、明文通信,数据可能被窃取

HTTP的请求过程中是不会对通信内容进行加密的,在网络中一旦请求或响应的数据被窃取就会导致数据泄漏,造成数据安全问题。

3、无法验证报文的完整性,内容可能被篡改。

HTTP不会验证数据的前后一致性,一旦数据传输的过程中遭遇中间人的篡改,通信的双发是无法判断自己接收的数据是否和对方发送的数据一致性。

四、https解决方案

1、数字证书(解决身份伪装问题)

HTTP不会对通信的双方进行进行身份的验证所以身份有可能被伪装造成安全问题,所以为了解决这个问题所以产生了数字证书,数字证书的使用流程大概如下:

服务器首先向一个大家都信任的第三方机构申请一个身份证书。

客户端向服务器建立通信之前首先向服务器请求获得服务器的证书。

服务器收到请求后把数字证书发送给客户端。

客户端获得服务器的证书之后,然后与可信任的第三方机构证书进行验证,验证通过后则进行正常的内容通信。

2、通信加密(解决数据被窃取问题)

因为HTTP不对通信内容进行加密处理,所以衍生了SSL加密技术协议,SLL采用混合加密(同时使用非对称加密和对称加密)的方式建立起安全的HTTP通信,经过加密后的内容即使被窃听了,窃听的人也无法解密对应的数据。

3、数字签名(解决数据篡改问题)

Http不会对数据的完整性进行验证,这样会造成就算通信的过程中数据被别人恶意篡改了,通信的双方也没办法知道,所以就有了数字签名技术。

数字签名主要有两个作用,一是验证数据是否为意料中的对象所发出的,二是对数据的完整性进行验证,验证数据是否被篡改过:

对需要发送的数据进行摘要

对数据进行摘要主要目的是确认数据的完整性,发送方首先根据约定的哈希算法把数据进行哈希,得到一个哈希值,因为两个数据有任何一点不相同都会得出不同的哈希值,所以把对数据内容进行哈希得到哈希值作为数据的摘要发给对方;

然后对方收到数据后,首先自己也按照约定的哈希算法把接收到的数据内容进行哈希得到一个哈希值,然后把自己的哈希值与发送过来的摘要信息进行比对,根据哈希值是否一致来确认数据的完整性。

对摘要信息进行签名

对摘要进行签名的目的主要是对确认数据发送人的身份,签名技术是使用非对称加密的原理,

非对称加密是使用一个密钥对(一个公钥,一个私钥),公钥加密只能由私钥解密,私钥加密只能由公钥解密; 公钥是公布出来的密钥,私钥由自己安全保管不外泄,所以在私钥不泄漏情况下,我们通过私钥其实就可以确认发送数据方的身份。

那么我们想要对A发送过来的数据进行身份验证,那么我们只需要用A的公钥对数据进行解密即可(如果可以解密,那么就说明该数据是A用自己的私钥进行加密过的,而A的私钥又只有A自己拥有)

五、HTTPS通信流程

第一步:客户端向服务端发起请求

1、客户端生成随机数R1 发送给服务端;

2、告诉服务端自己支持哪些加密算法;

第二步:服务器向客户端发送数字证书

1、服务端生成随机数R2;

2、从客户端支持的加密算法中选择一种双方都支持的加密算法(此算法用于后面的会话密钥生成);

3、服务端生成把证书、随机数R2、会话密钥生成算法,一同发给客户端;

第三步:客户端验证数字证书。

1、验证证书的可靠性,先用CA的公钥解密被加密过后的证书,能解密则说明证书没有问题,然后通过证书里提供的摘要算法进行对数据进行摘要,然后通过自己生成的摘要与服务端发送的摘要比对。

2、验证证书合法性,包括证书是否吊销、是否到期、域名是否匹配,通过后则进行后面的流程

3、获得证书的公钥、会话密钥生成算法、随机数R2

4、生成一个随机数R3。

5、根据会话秘钥算法使用R1、R2、R3生成会话秘钥。

6、用服务端证书的公钥加密随机数R3并发送给服务端。

第四步:服务器得到会话密钥

1、服务器用私钥解密客户端发过来的随机数R3

2、根据会话秘钥算法使用R1、R2、R3生成会话秘钥

第五步:客户端与服务端进行加密会话

1、客户端发送加密数据给服务端

发送加密数据:客户端加密数据后发送给服务端。

2、服务端响应客户端

解密接收数据:服务端用会话密钥解密客户端发送的数据;

加密响应数据:用会话密钥把响应的数据加密发送给客户端。

3、客户端解密服务端响应的数据

解密数据:客户端用会话密钥解密响应数据;

Tags:

最近发表
标签列表