首页 > 其他分享 >https的工作流程详解

https的工作流程详解

时间:2023-02-19 13:12:33浏览次数:38  
标签:加密 HTTPS 证书 流程 详解 密钥 https 服务端 客户端

在了解https之前,我们先看下http的协议有哪些不足,加密、证书,签名这些概念,以便于我们更全面的掌握https的原理以及工作流程。

     HTTP协议的不足

  •  不验证身份,导致身份可能被伪装。
  •  明文通信,数据可能被窃取
  •  无法验证报文的完整性,内容可能被篡改。

     一、通信加密

     1)为什么通信需要加密?

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

     2)公开密钥加密技术

     对称密钥加密和非对称密钥加密加密算法中加密算法是公开的,而密钥时保密的,加密和解密都需要密钥,没有密钥就不能解密,反之,如果密钥被截获,则加密的内容就有可能被破解。

     其中有三种加密机制:对称加密、非对称加密、混合加密

     1)对称加密

     对称加密是指加密和解密的密钥为同一个。

     问题:在通信时还需将密钥传输给对方用来解密,密钥传输过程中同样可能被截获,所以这种加密方式通信安全的前提是如何安全的传输密钥。

     2)非对称加密

     与对称加密不同,非对称加密的密钥是成对的(公钥和私钥)。

     这种方式又被称之为公开密钥加密,使用一对非对称的密钥,一把叫做公开密钥(public key),一把叫做私有密钥(private key),其中公开密钥可以随意发送,私有密钥必须保密。

     3)混合加密

     虽然非对称加密很安全,但是和对称加密比起来,它的解密速度非常慢;所以通常会用混合加密的方式进行通信,混合加密是用非对称加密的方式交换双方的对称加密秘钥,交换对称加密秘钥之后双方再用对称加密的方式进行通信。

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

     这里要提到数字认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书,数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上,其具体的业务流程如下:

     1、服务器运营人员向数字证书认证机构提出公开密钥的申请。

     2、数字证书认证机构判明身份之后,会对已申请的公开密钥做数字签名,并将该公开密钥放入公钥证书后绑定在一起,服务器会将这份由数字认证机构颁发的公钥证书发送给客户端。

     3、客户端获取到数字认证机构颁发的公开密钥后,对其进行数字签名验证,一是确认公开密钥是真实的数字认证机构颁发的,二是确认公开密钥是值得信赖的。

     4、确认无误后,使用该公开密钥加密报文。

     5、服务器使用私有密钥进行报文解密。

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

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

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

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

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

     2、对摘要信息进行签名

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

     数字签名的过程简述为:发送方通过不可逆算法对内容 text1 进行处理(哈希),得到的结果值 hash1,然后用私钥加密 hash1 得到结果值 encry1。对方接收 text1 和 encry1,用公钥解密 encry1 得到 hash1,然后用 text1 进行同等的不可逆处理得到 hash2,对 hash1 和 hash2 进行对比即可认证发送方。

     四、HTTPS

     1、什么是HTTPS?

     简单来说,HTTPS(HTTP Secure) 就是在 HTTP 协议基础之上加入加密以及认证机制的 HTTP。

     HTTPS 相较 HTTP 不是一种新协议,只是在 HTTP 通信接口部分使用了 SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议来实现。使得 HTTP 先与 SSL 通信,再由 SSL 和 TCP 通信,而不是 HTTP 直接与 TCP 通信。

     

     2、HTTPS通信流程

     HTTPS通信主要包括几个节点,发起请求、验证身份、协商秘钥、加密会话,具体流程如下(此例子只有客户端对服务端的单向验证):

     1)客户端向服务端发起建立HTTPS请求。

     2)服务器向客户端发送数字证书。

     3)客户端验证数字证书,证书验证通过后客户端生成会话密钥(双向验证则此处客户端也会向服务器发送证书)。

     4)服务器生成会话密钥(双向验证此处服务端也会对客户端的证书验证)。

     5)客户端与服务端开始进行加密会话。

     

      具体流程如下:

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

      a.  客户端生成随机数R1 发送给服务端

      b.  告诉服务端自己支持哪些加密算法和哈希算法

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

      a.  服务端生成随机数R2

      b.  从客户端支持的加密算法中选择一种双方都支持的加密算法(此算法用于后面的会话密钥生成)和哈希算法用机构的证书公钥解密得到证书的内容和证书签名

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

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

       这一部分是浏览器内置的 TSL 完成的:

       a.  首先浏览器会从内置的证书列表中索引,找到服务器下发证书对应的机构,如果没有找到,此时就会提示用户该证书是不是由权威机构颁发,是不可信任的。如果查到了对应的机构,则取出该机构颁发的公钥、会话密钥生成算法、随机数R2。
       b.  用机构的证书公钥解密得到证书的内容和证书签名,内容包括网站的网址、网站的公钥、证书的有效期等。浏览器会先验证证书签名的合法性。签名通过后,浏览器验证证书记录的网址是否和当前网址是一致的,不一致会提示用户。如果网址一致会检查证书有效期,证书过期了也会提示用户。这些都通过认证时,浏览器就可以安全使用证书中的网站公钥了。
       c.  浏览器生成一个随机数 R3,根据会话密钥算法使用R1、R2、R3生成会话密钥。

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

      注意:以上其实就是 HTTPS 的握手过程,这个过程主要是认证服务端证书(内置的公钥)的合法性。因为非对称加密计算量较大,整个通信过程只会用到一次非对称加密算法(主要是用来保护传输客户端生成的用于对称加密的随机数私钥)。后续内容的加解密都是通过一开始约定好的对称加密算法进行的。

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

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

      b.  根据会话密钥算法使用R1、R2、R3生成会话密钥

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

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

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

      2)服务端响应客户端

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

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

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

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

      四、为什么有的网站不用HTTPS?

      HTTPS 虽然安全可靠,但是有的网站还是使用 HTTP,原因是什么呢?

      1、HTTPS 由于使用了 SSL(包括 TLS) 而变得安全可靠,但是 SSL 由于要进行加密处理会导致整个通信变慢,频繁的加密、解密会消耗服务端和客户端的硬件资源。

      2、SSL 不仅会导致通信慢,还会由于大量消耗 CPU 和内存等资源,导致整个处理速度变慢,和 HTTP 相比,网络负载可能可能会变慢 2 到 100 倍

      3、如果使用了 HTTPS,那就意味着要增加硬件成本,此外从数字认证机构购买证书也是需要开销的。

      总结:相较于HTTP协议,HTTPS确保了报文的机密性以及完整性。HTTPS确保这些的依赖就是SSL/TSL协议,SSL/TSL安全协议搭配数字证书保证了报文在传输过程中的绝对安全。但是使用HTTPS就意味着需要增加成本,因此实际中是否使用HTTPS,还需要进行各方面的权衡。

 参考链接:

     https://cloud.tencent.com/developer/article/1005197

     https://zhuanlan.zhihu.com/p/56663184

     https://juejin.cn/post/6844904094503550984

摘自:https://www.cnblogs.com/hld123/p/15255526.html

标签:加密,HTTPS,证书,流程,详解,密钥,https,服务端,客户端
From: https://www.cnblogs.com/sword0077/p/17134585.html

相关文章

  • 04. 流程控制
    一、流程控制  流程控制就是用来控制程序运行中各语句执行顺序的语句。基本的流程结构为:顺序结构,分支结构(或称选择结构),循环结构。顺序结构:程序自上到下执行,中间没有任......
  • nginx 配置 详解
    2.nginx.conf配置文件Nginx配置文件主要分成四部分:main(全局设置)、server(主机设置)、upstream(上游服务器设置,主要为反向代理、负载均衡相关配置)和location(URL匹配特定位置......
  • 96、商城业务---消息队列---RabbitMQ工作流程&概念
    流程如下:生产者先跟消息代理建立一条长连接,在长连接里开辟很多通道(channel),然后通过通道发送消息Message,其中消息必须指定路由键route-key。消息代理里面有很多交换......
  • solon框架AopContext 接口详解
    AopContext接口beanMake(Class<?>clz)使用场景:在开发插件(或在一些特殊条件下),自动扫描组件没有被扫描到,一般是因为要注册的组件没有在启动类的包下。//启动类所在包为......
  • 研发流程的总结
    研发流程的总结1、概念设计————产品思路的评审。2、方案设计————电子设计方案评审,结构设计方案评审,热设计评审,光学方案评审。3、样品设计————手板打样,并组......
  • 从零入门Vue.js!六步学习路线和知识体系盘点详解!
    Vue.js是一款流行的JavaScript前端框架,它允许开发者轻松地构建交互性强的用户界面。学习这个阶段的时候有一定门槛,并不是属于零基础就能入门学习的,在学习vue.js的时候可以......
  • 【云原生kubernetes】k8s service使用详解
    一、什么是服务service?在k8s里面,每个Pod都会被分配一个单独的IP地址,但这个IP地址会随着Pod的销毁而消失,重启pod的ip地址会发生变化,此时客户如果访问原先的ip地址则会报错;S......
  • 伸展树(Splay)详解
    引入在一条链中,二叉查找树的时间复杂度就会退化成\(O(n)\),这时我们就需要平衡树来解决这个问题。\(Splay\)(伸展树)是平衡树的一种,它的每一步插入、查找和删除的平摊时间......
  • Web浏览器端通过https 使用mqtt通讯
    做的产品简介这次需要做一个web端的上课平台,有音视频通讯,有白板(画板)功能,有文字通讯等。技术点音视频通讯需要走Webrtc需要跟ios,android,windows,mac客户端互......
  • [GNU C] __attribute___(section("name")) 详解 (转载)
    本文详细讲解了利用__attribute__((section()))构建初始化函数表,以及Linux内核各级初始化的原理......