首页 > 其他分享 >HTTP 与 HTTPS

HTTP 与 HTTPS

时间:2024-07-30 11:21:27浏览次数:6  
标签:TLS 公钥 加密 证书 HTTPS 服务器 HTTP 客户端

HTTPS 在 TCP 三次握手后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输。HTTP 默认端口号是 80,HTTPS 默认端口号是 443。同时,HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

HTTPS通过混合加密、摘要算法以及身份证书,来完成对 HTTP 传递明文的内容完成加密。

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

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

摘要算法 + 数字签名
在计算机里会用摘要算法(哈希函数)来计算出内容的哈希值,也就是内容的「指纹」,这个哈希值是唯一的,且无法通过哈希值推导出内容。如果哈希值相同则可证明内容未被篡改。但是该算法并不能保证「内容 + 哈希值」不会被中间人替换,因为这里缺少对客户端收到的消息是否来源于服务端的证明。

为了判断消息是否来自于服务端,会用非对称加密算法来解决,共有两个密钥: - 一个是公钥,这个是可以公开给所有人的; - 一个是私钥,这个必须由本人管理,不可泄露。

这两个密钥可以双向加解密:公钥加密私钥解密则可保证内容传输的安全;私钥加密公钥解密则保证消息不会被冒充。非对称加密的用途主要在于通过「私钥加密,公钥解密」的方式,来确认消息的身份,我们常说的数字签名算法,就是用的是这种方式,不过私钥加密内容不是内容本身,而是对内容的哈希值加密。

加密算法流程

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

数字证书
CA 通过自己的私钥把服务端的公钥做了数字签名,把「个人信息 + 公钥 + 数字签名」打包成一个数字证书;客户端使用时会通过 CA 验证数字证书是否合法,CA 验证成功后就可以证明服务端的公钥合法,完成身份验证。

HTTPS 的加密流程

SSL/TLS 协议基本流程:

  • 客户端向服务器索要并验证服务器的公钥。
  • 双方协商生产「会话秘钥」。
  • 双方采用「会话秘钥」进行加密通信。

前两步就是 TLS 握手阶段,涉及四次通信,使用不同的密钥交换算法,TLS 握手流程也会不一样的,现在常用的密钥交换算法有两种:RSA 算法和 ECDHE 算法。其中 RSA 算法相对容易。

RSA 完成 TLS 握手

以下会进行具体分析:

ClientHello
首先客户端向服务器发起加密通信请求,这里需要发送客户端的 TLS 版本,产生的随机数(Client Random,用于生成「会话秘钥」条件之一),以及支持的密码套件列表(如 RSA 算法)。

ServerHello
服务器收到客户端请求后,向客户端发出响应,包含确认 TLS 版本,服务器生成的随机数(Server Random,用于生产「会话秘钥」条件之一),确认的密码套件列表以及服务器的数字证书。这里就是三个确认+ CA。

客户端回应
客户端收到服务器的回应之后,首先通过浏览器或者操作系统中的 CA 公钥,确认服务器的数字证书的真实性。如果证书没有问题,客户端会从数字证书中取出服务器的公钥,然后使用它加密报文,向服务器发送如下信息:一个随机数(pre-master key,会被服务器公钥加密);加密通信算法改变通知,表示之后信息用「会话秘钥」加密通信;客户端握手结束通知,会把之前的数据做摘要供服务端校验。

服务器和客户端有了这三个随机数(Client Random、Server Random、pre-master key),接着就用双方协商的加密算法,各自生成本次通信的「会话秘钥」。

服务器最后回应
计算得到「会话秘钥」,发送最后的信息:加密通信算法改变通知,表示之后都用「会话秘钥」加密通信;服务器握手结束通知,会把之前数据做摘要供客户端校验。

TLS 至此全部结束,接下来证实进入加密通信,就是完全的 HTTP 协议,只不过用「会话秘钥」加密内容。

这里在学一下 CA 具体的签发和验证流程。

CA 流程

签发证书:

  • CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,然后对这些信息进行 Hash 计算,得到一个 Hash 值;
  • 通过自己的私钥将 Hash 值加密,生成 Certificate Signature,也就是签名;
  • 将 Certificate Signature 添加在文件证书上,形成数字证书。

校验证书:

  • 使用同样 Hash 算法获取该证书 Hash 值 H1;
  • 通过浏览器和操作系统中集成的 CA 公钥,解密 Certificate Signature 内容,得到 Hash 值 H2;
  • 比较 H1 和 H2,相同则为可信赖证书。

证书的验证过程中还存在一个证书信任链的问题,操作系统会内置一些根证书,通过根证书的信任一层层到中间证书再到服务器证书。搞证书链是为了确保根证书的绝对安全性,将根证书隔离地越严格越好,不然根证书如果失守了,那么整个信任链都会有问题。

TLS 在实现上分为握手协议和记录协议两层: - TLS 握手协议就是我们前面说的 TLS 四次握手的过程,负责协商加密算法和生成对称密钥,后续用此密钥来保护应用程序数据(即 HTTP 数据); - TLS 记录协议负责保护应用程序数据并验证其完整性和来源,所以对 HTTP 数据加密是使用记录协议。

记录协议,及时现将消息分割切片并压缩后,在压缩片段后加上消息认证码(MAC 值,这个是通过哈希算法生成的),这是为了保证完整性,并进行数据的认证。之后会将加上消息认证码的报文一起通过对称密码加密,并在加密数据前加上数据类型、版本号以及压缩后长度完成最终的报文数据。

HTTPS 协议本身到目前为止还是没有任何漏洞的,即使你成功进行中间人攻击,本质上是利用了客户端的漏洞(用户点击继续访问或者被恶意导入伪造的根证书),并不是 HTTPS 不够安全。为了解决这种问题,可以通过 HTTPS 双向认证来避免。

标签:TLS,公钥,加密,证书,HTTPS,服务器,HTTP,客户端
From: https://www.cnblogs.com/NETYZreall/p/18331951

相关文章

  • HTTP/1.1、HTTP/2、HTTP/3
    HTTP/1.1相比HTTP/1.0性能上的改进:使用长连接的方式改善了HTTP/1.0短连接造成的性能开销。支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。但HTTP/1.1还是有性能瓶颈:请求/响应头部(Header)未经压缩就发......
  • HTTP 特性
    HTTP常见到版本有HTTP/1.1,HTTP/2.0,HTTP/3.0,不同版本的HTTP特性是不一样的。这一章主要针对HTTP/1.1展开,最突出的优点是「简单、灵活和易于扩展、应用广泛和跨平台」。缺点分别是「无状态、明文传输」,同时还有最大的缺点「不安全」。对于无状态的问题,解决方案有很多种,其中......
  • HTTP 缓存
    避免发送HTTP请求的方法就是通过缓存技术,HTTP设计者早在之前就考虑到了这点,因此HTTP协议的头部有不少是针对缓存的字段。HTTP缓存有两种实现方式,分别是强制缓存和协商缓存。强制缓存只要浏览器判断缓存没有过期,则直接使用浏览器的本地缓存,决定是否使用缓存的主动性在于浏......
  • HTTP基本概念
    HTTP是超文本传输协议,也就是HyperTextTransferProtocol。HTTP协议是一个双向协议,是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。是超越了普通文本的文本,它是文字、图片、视频等的混合体,最关键有超链接,能从一个超文本跳转到另外一个超文本。1xx类状态码属......
  • 你能将 HTTPS 功能添加到 python Flask Web 服务器吗?
    我正在尝试构建一个Web界面来模拟网络设备上的静态接口,该网络设备使用摘要式身份验证和HTTPS。我想出了如何将摘要式身份验证集成到Web服务器中,但我似乎无法找到如何使用FLASK获取https,如果您可以向我展示如何实现,请评论我需要使用下面的代码做什么来实现这一点。from......
  • CentOS 7 yum无法使用解决方法Could not retrieve mirrorlist http://mirrorlist.cent
    在centos7中使用yum命令事后报错:LoadingmirrorspeedsfromcachedhostfileCouldnotretrievemirrorlisthttp://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stockerrorwas14:curl#6-"Couldnotresolvehost:mirrorlist.centos.org;......
  • 【前端 · 面试 】HTTP 总结(十一)—— HTTPS 概述
    最近我在做前端面试题总结系列,感兴趣的朋友可以添加关注,欢迎指正、交流。争取每个知识点能够多总结一些,至少要做到在面试时,针对每个知识点都可以侃起来,不至于哑火。HTTPS前言通过前面内容的学习,相信大家对HTTP的概念、特点、请求方法及缓存等的......
  • web基础以及http协议
    ⼀、web基本概念和常识Web:为⽤户提供的⼀种在互联⽹上浏览信息的服务,Web服务是动态的、可交互的、跨平台的和图形化的。Web服务为⽤户提供各种互联⽹服务,这些服务包括信息浏览服务,以及各种交互式服务,包括聊天、购物、学习等等内容。Web应⽤开发也经过了⼏代技术的不断......
  • zookeeper、kafka单机版安装 https://www.cnblogs.com/dogleftover
    zookeeper、kafka单机版安装前提已经安装了jdk1.8、zookeeper3.6.3主机名:master映射:192.168.128.129master安装zookeeper单机版#将apache-zookeeper-3.6.3-bin.tar.gz上传到服务器#解压tar-zxvfapache-zookeeper-3.6.3-bin.tar.gz#移动mv/home/apache-zookeeper-3......
  • 没申请域名只有IP地址可以实现HTTPS访问吗?
    一、前提条件公网IP地址:确保你拥有一个公网IP地址,因为这是从互联网直接被客户端访问的基础。私有IP地址位于内部网络中,无法直接从外部访问。管理权限:你需要对该IP地址具有完全的管理权限,以便进行后续的证书申请和服务器配置。二、申请SSL/TLS证书选择证书颁发机构(CA):并非所......