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

HTTP与HTTPS的区别

时间:2023-10-27 20:22:39浏览次数:36  
标签:HTTP 公钥 加密 区别 内容 HTTPS 私钥

一、HTTP与HTTPS的区别:

  • HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。

  • HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。

    HTTP 与 HTTPS 网络层

  • 两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。

  • HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

二、HTTSPS解决了HTTP哪些问题?

​ 由于HTTP是明文传输,因此存在:

  • 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。
  • 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。
  • 冒充风险,比如冒充淘宝网站,用户钱容易没。

​ 而HTTPS在HTTP层与TCP层加入了SSL/TLS协议,可以很好的解决上述问题。

  • 信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
  • 校验机制:无法篡改通信内容,篡改了就不能正常显示。
  • 身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。

​ HTTPS具体是如何解决的?

  • 混合加密的方式实现信息的机密性,解决了窃听的风险。
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 将服务器公钥放入到数字证书中,解决了冒充的风险。

1.混合加密

​ HTTPS采用混合加密,分为对称加密和非对称加密。

  • 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。

  • 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。

    混合加密

​ 采用混合加密原因:

  • 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。
  • 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢。

2.摘要算法

​ 为了保证传输的内容不被篡改,我们需要对内容计算出一个「指纹」,然后同内容一起传输给对方。

​ 对方收到后,先是对内容也计算出一个「指纹」,然后跟发送方发送的「指纹」做一个比较,如果「指纹」相同,说明内容没有被篡改,否则就可以判断出内容被篡改了。

​ 那么,在计算机里会用摘要算法(哈希函数)来计算出内容的哈希值,也就是内容的「指纹」,这个哈希值是唯一的,且无法通过哈希值推导出内容

img

​ 通过哈希算法可以确保内容不会被篡改,但是并不能保证「内容 + 哈希值」不会被中间人替换,因为这里缺少对客户端收到的消息是否来源于服务端的证明

​ 为了避免这种情况出现,计算机里会使用非对称加密算法来解决,共有两个密钥:

  • 一个是公钥,这个是可以公开给所有人的;
  • 一个是私钥,这个必须由本人管理,不可泄露。

​ 这两个密钥可以双向加解密的,比如可以用公钥加密内容,然后用私钥解密,也可以用私钥加密内容,公钥解密内容。

  • 公钥加密,私钥解密。这个目的是为了保证内容传输的安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容;
  • 私钥加密,公钥解密。这个目的是为了保证消息不会被冒充,因为私钥是不可泄露的,如果公钥能正常解密出私钥加密的内容,就能证明这个消息是来源于持有私钥身份的人发送的。

​ 因为非对称加密比较消耗性能,所以我们一般不用,它主要在于通过「私钥加密,公钥解密」的方式,来确认消息的身份,我们常说的数字签名算法,就是用的是这种方式,不过私钥加密内容不是内容本身,而是对内容的哈希值加密

img

​ 私钥是由服务端保管,然后服务端会向客户端颁发对应的公钥。如果客户端收到的信息,能被公钥解密,就说明该消息是由服务器发送的。

3.数字证书

​ 前面我们知道:

  • 可以通过哈希算法来保证消息的完整性;
  • 可以通过数字签名来保证消息的来源可靠性(能确认消息是由持有私钥的一方发送的);

​ 但是这还远远不够,还缺少身份验证的环节,万一公钥是被伪造的呢?

数子证书工作流程

标签:HTTP,公钥,加密,区别,内容,HTTPS,私钥
From: https://www.cnblogs.com/dwinternet/p/17793080.html

相关文章

  • include和including区别
    include和including都是编程中常用的术语,但它们的含义和使用场合略有不同,本文将从多个方面详细探讨二者区别。一、含义区别首先,include是指在代码中导入一个文件,使得该文件中的内容可以在当前文件中使用。而including则是指在某个任务、计划或过程中包含其它项目、模块或组件。//in......
  • Python:爬取某软件站数据报错requests.exceptions.SSLError: HTTPSConnectionPool(hos
    使用Python爬取某网站数据时候,之前一直是好好的。突然就报错:requests.exceptions.SSLError:HTTPSConnectionPool(host='api.***.cn',port=443):Maxretriesexceededwithurl:/accounty1/login?analysis............检查发现,可能是IP地址存在代理导致网络环境一场。可以检......
  • 传统的API网关和SpringCloud Gateway区别对比
    传统的API网关和SpringCloudGateway的主要区别在于架构和性能。传统的API网关通常是独立于各个后端服务的,请求会先打到独立的网关层,再转发到服务集群。而SpringCloudGateway则将流量从南北走向改为东西走向,微服务网关和后端服务是在同一个容器中的,也被称为GatewaySidecar。......
  • http-template实现原生分页
     packagemainimport( "gorm.io/driver/mysql" "gorm.io/gorm" "html/template" "io" "math" "net/http" "os" "strconv")//商品结构体typeGoodsstruct{ Idint......
  • PLC、运动控制卡、运动控制器区别和联系
    前言最近有不少做PLC开发的小伙伴,在一些咨询运动控制卡、运动控制器相关的问题,很多人不清楚它们之间有什么区别和联系,今天跟大家就PLC、运动控制卡、运动控制器区别及选型做个分享。背景随着工业技术的发展,工业机器人应用越来越广泛,PLC也不再是简单的可编程逻辑控制器,......
  • PCB封装命名规则,本文转载https://www.xjx100.cn/news/432127.html?action=onClick
    SO、SOP、SOIC、MSOP、TSSOP、TSOP、VSSOP、SSOP、SOJ封装详解 1. 简要信息如下: 2.SOP和SOIC的规格多是类似的,现在大多数厂商基本都采用的是SOIC的描述:SOIC8有窄体150mil的(外形封装宽度,不含管脚,下同),管脚间距是1.27mm,如下:有宽体的208mil的,管脚间距是1.27mm,如下:......
  • "git add -A" 和 "git add ." 的区别
    内容来自DOC[https://q.houxu6.top/?s="gitadd-A"和"gitadd."的区别](https://q.houxu6.top/?s="gitadd-A"和"gitadd."的区别)"gitadd[--all|-A]"和"gitadd."的区别这个答案只适用于Git1.x版本。对于Git2.x版本......
  • 通过requests库使用HTTP编写的爬虫程序
    使用Python的requests库可以方便地编写HTTP爬虫程序。以下是一个使用requests库的示例:importrequests#发送HTTPGET请求response=requests.get("http://example.com")#检查响应状态码ifresponse.status_code==200:#获取响应内容html=response.text......
  • https://www.modb.pro/db/1717179181560324096 --转载 Oracle 批量更新(BULK)优化技巧
    面对一个需要更新大量数据的任务,我平时的处理方法是通过循环,每N行提交来完成这个任务。这样做的两个主要原因:1、频繁地提交大量小事务比处理和提交一个大事务更快,也更高效2、没有足够的UNDO空间今天在学到了一种新的解决思路,在此记录一下方便后面使用。  假设我们有一个表T,......
  • Controller 中的请求方法,private 和 public有什么区别?别用错了!
    作者:hinotoyk链接:https://juejin.cn/post/6910215219822362632背景:某日在公司中撸代码的时候,在一个常用的controller中添加一个方法,测试时突然报错说注入的service为null,捣鼓一阵发现后是方法修饰符写成private,修改成public后搞定。为什么会产生这个问题呢?就自己测试一下是哪......