首页 > 其他分享 >HTTP HTTPS区别

HTTP HTTPS区别

时间:2022-09-01 13:35:01浏览次数:56  
标签:公钥 加密 区别 HTTPS 服务器 HTTP 客户端

一:HTTP 与 HTTPS 有哪些区别?
(1)HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。
(2)HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。
(3)HTTP 的端口号是 80,HTTPS 的端口号是 443。
(4)HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。


二:HTTPS 解决了 HTTP 的哪些问题?
HTTP 由于是明文传输,所以安全上存在以下三个风险:

窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
篡改风险,比如强制入垃圾广告,视觉污染,用户眼容易瞎。
冒充风险,比如冒充淘宝网站,用户钱容易没。
HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议。


可以很好的解决了上述的风险:

信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。
身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。
可见,只要自身不做「恶」,SSL/TLS 协议是能保证通信是安全的。


三:HTTPS 是如何解决上面的三个风险的?
**混合加密**的方式实现信息的机密性,解决了窃听的风险。
**摘要算法**的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
将服务器公钥放入到数字证书中,解决了冒充的风险。
(1)混合加密
  通过混合加密的方式可以保证信息的机密性,解决了窃听的风险。


HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式:

在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
采用「混合加密」的方式的原因:

对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。
(2)摘要算法
  摘要算法用来实现完整性,能够为数据生成独一无二的「指纹」,用于校验数据的完整性,解决了篡改的风险。


客户端在发送明文之前会通过摘要算法算出明文的「指纹」,发送的时候把「指纹 + 明文」一同加密成密文后,发送给服务器,服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的「指纹」和当前算出的「指纹」做比较,若「指纹」相同,说明数据是完整的。

(3)数字证书
  客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。

  这就存在些问题,如何保证公钥不被篡改和信任度?
  所以这里就需要借助第三方权威机构CA(数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。


通过数字证书的方式保证服务器公钥的身份,解决冒充的风险。


四、HTTPS 是如何建立连接的?其间交互了什么?
SSL/TLS 协议基本流程:

客户端向服务器索要并验证服务器的公钥。
双方协商生产「会话秘钥」。
双方采用「会话秘钥」进行加密通信。
前两步也就是 SSL/TLS 的建立过程,也就是握手阶段。

SSL/TLS 协议建立的详细流程:

1、ClientHello:
首先,由客户端向服务器发起加密通信请求,也就是 ClientHello 请求。

在这一步,客户端主要向服务器发送以下信息:

(1)客户端支持的 SSL/TLS 协议版本,如 TLS 1.2 版本。

(2)客户端生产的随机数(Client Random),后面用于生产「会话秘钥」。

(3)客户端支持的密码套件列表,如 RSA 加密算法。

2、SeverHello
服务器收到客户端请求后,向客户端发出响应,也就是 SeverHello。服务器回应的内容有如下内容:

(1)确认 SSL/ TLS 协议版本,如果浏览器不支持,则关闭加密通信。

(2)服务器生产的随机数(Server Random),后面用于生产「会话秘钥」。

(3)确认的密码套件列表,如 RSA 加密算法。

(4)服务器的数字证书。

3、客户端回应
客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。

如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:

(1)一个随机数(pre-master key)。该随机数会被服务器公钥加密。

(2)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

(3)客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供服务端校验。

上面第一项的随机数是整个握手阶段的第三个随机数,这样服务器和客户端就同时有三个随机数,接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」。

4、服务器的最后回应
服务器收到客户端的第三个随机数(pre-master key)之后,通过协商的加密算法,计算出本次通信的「会话秘钥」。然后,向客户端发生最后的信息:

(1)加密通信算法改变通知,表示随后的信息都将用「会话秘钥」加密通信。

(2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时把之前所有内容的发生的数据做个摘要,用来供客户端校验。

至此,整个 SSL/TLS 的握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用「会话秘钥」加密内容。

标签:公钥,加密,区别,HTTPS,服务器,HTTP,客户端
From: https://www.cnblogs.com/yueyiviolet/p/16646160.html

相关文章

  • SpringBoot-Http请求工具类
    一、编写请求配置类importcom.alibaba.fastjson.JSONObject;importorg.springframework.context.annotation.Configuration;importorg.springframework.http.*;imp......
  • 【IO复用】epoll和select以及poll的区别
    select原理说在前面,整个select在内核空间中的工作事实上非常有趣,中间还会穿插一些可抢占点,检测当前是否有进程可以调度,增加系统的实时性初始化阶段:FD_set,把要监听的fd都......
  • delete和truncate删除的区别
    delete: (1)一行一行的把数据删除,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。 (2)delete是数据操作语言(DML)命令。 (3)delete命令不会影响表结构tr......
  • Swoole实战之手撸HttpServer框架 19 ORM整合(1)初步封装Laravel ORM库、基本查询、使用
    视频地址https://www.bilibili.com/video/BV14E411t7T4?p=28&spm_id_from=pageDriver&vd_source=4a69745b599dffec877b0fcfe130b0921封装composerrequireilluminate......
  • GOHTTP请求
    HTTP请求本次内容context单元测试(给函数做单元测试)pprof调试工具(go语言内置工具)可以看到代码的cpu和运行时的一些信息能看到一些图表信息,如内存占用、cpu占用等......
  • HttpClient和IHttpClientFactory借助第三方库生成的客户端Refit andWebApiClientCore
    理解ASP.NETCore-发送Http请求(HttpClient)  注:本文隶属于《理解ASP.NETCore》系列文章,请查看置顶博客或点击此处查看全文目录前言在.NET中,我们有很多发送Ht......
  • 服务器报错 http error 503.the service is unavailable怎么解决
    解决办法如下:1、在windows系统中,打开开始菜单,搜索iis,并打开。  2、打开iis管理后,在最右侧找到操作栏,点击打开查看应用程序池。  3、进入应用程序池后,点击选择de......
  • NMOS与PMOS区别
    在CMOS设计里,PMOS管和NMOS管同等重要,不过因为一般的电路设计书籍都注重NMOS管的讲解,PMOS都是直接类比NMOS,所以让人不太清楚PMOS的工作原理。1.端口不同PMOS和NMOS的源漏......
  • Hive中insert into 和 insert overwrite的区别
    相同点insertinto和insertoverwrite都是往表中插入数据的。 不同点区别1:insertinto:其实是将数据追加到表的末尾,注意可不是覆盖是追加。insertoverwrite......
  • 【C++】引用与指针的区别
    安全性首先引用要比指针要安全,因为引用不能更改绑定,但是指针可以更改指向,此外指针可以有多级,但是引用一般只有一级。在使用指针的时候,我们往往需要使用断言,判断指针是不是......