关于HTTPS的TSL握手

HTTPS是HTTP协议在TLS/SSL加密协议下的安全传输方式。TLS是TLS/SSL加密协议的新版本,TLS协议握手过程如下:

TLS握手过程

  1. 客户端发送一个Client Hello消息给服务器端,这个消息包含TLS支持的协议版本、加密算法列表和随机数等信息。

markdown
# 客户端Hello包

  1. 服务器端收到Client Hello后,发送一个Server Hello消息给客户端,这个消息包含服务端选择的TLS协议版本、加密算法、证书以及一个随机数等信息。

markdown
# 服务器端Hello包

  1. 接下来,服务器端发送一个Certificate消息,这个消息包含证书链,包括服务器证书和中间CA证书等。

markdown
# 服务器端Certificate包

  1. 客户端对服务器端的证书进行验证,如果验证失败,可能会提示证书不合法或者提醒用户风险较高。如果验证成功,客户端生成一个预主密钥,然后用服务器端发来的公钥来加密预主密钥。客户端发送一个Client Key Exchange消息给服务器。

markdown
# 客户端Key Exchange包

  1. 服务器端使用私钥解密客户端发来的预主密钥,并且生成本次会话的主密钥。服务器发一个Server Key Exchange消息给客户端,这个消息包含服务器的数字签名,使用主密钥来保证消息的完整性。

markdown
# 服务器端Key Exchange包

  1. 之后,服务器端发送一个Server Hello Done消息告诉客户端握手阶段结束。

markdown
# 服务器端Hello Done包

  1. 客户端也生成会话的主密钥。然后,客户端发送一个Change Cipher Spec消息,告诉服务器端:接下来的消息都会使用新的主密钥和加密算法。最后,客户端发送一个Finished消息给服务器端。

markdown
# 客户端Finished包

  1. 服务器端也发送一个Change Cipher Spec消息,告诉客户端:接下来的消息都会使用新的主密钥和加密算法。服务器端也发送一个Finished消息给客户端。

markdown
# 服务器端Finished包

  1. 握手完成。编号7、8两步被称作ChangeCipherSpec协议阶段,在这两个阶段前后使用的主密钥和加密算法已经不同了。之后服务器和客户端以加密方式通信。

示例说明

以下示例中 => 为发送消息的方向,==>表示服务器返回的消息,示例中参考了一篇博客

  • 一般的HTTPS请求流程:

```
当你在浏览器里输入https://www.baidu.com,浏览器向服务器发起链接请求,服务器返回一个证书,浏览器验证证书的合法性,如证书失效或者证书不合法等,浏览器有可能提示用户有网站冒充的风险, 此时可以选择是否继续;

你选择继续,浏览器通过证书里的加密算法和密钥来加密询问信息并传输给服务器。服务器收到询问信息后用自己的私钥解密后,并尝试对发送出去的消息做一次数字签名,并把消息和签名向浏览器发回。

浏览器会等待,直到服务器向其发送完成连接消息;浏览器再次发送一条加密请求到服务器,服务器用同样的算法和密钥进行加密运算后,发送给浏览器,浏览器再根据确认的方法对其确认,确认后,浏览器发送一条成功的链接消息给服务器,此时,HTTPS的安全链接建立成功。

浏览器和服务器就可以在这条安全的连接上进行数据交换了,所有信息的传输都是加密的,在传输过程中不会被别人窃取到或者改变。
```

  • 具体一次TLS握手过程:

  • 客户端发送请求

    ```markdown

    ClientHello

    s---[client hello]->e

                                               ,---- ServerHello
                                               |   Certificate
                                               |   ServerKeyExchange
                                               |   CertificateRequest
                                               | <Private Key operation>
                                               `-- ServerHelloDone
    

    Client Certificate

    s<--[certificate+keyattestation]<-e

    Client Key Exchange

    s---[key exchange]->e

                                               ,-------- Certificate
                                               |      ClientKeyExchange
                                               | <Private Key operation>
                                               `---[change cipher spec]--->
    

    Change Cipher Spec

    s---[change cipher spec]->e

                                               ,--   Finished
                                               |     (Hash for integrity)
                                               | <Private Key operation>
                                               `---[Finished]--->
    

    Finished

    s<--[Finished(verify)]<-e
    ```

  • 服务器发送响应

    ```markdown

    ClientHello

    ServerHello

    s<--[server hello]<-e

    Certificate

    s<--[certificate]<-e

    Server Key Exchange

    s<--[key exchange]<-e

    Certificate Request

    s<--[certificate request]<-e

    ServerHelloDone

    s<--[hello done]<-e

    Client Certificate

    s---[certificate+keyattestation]->e

    Client Key Exchange

    Change Cipher Spec

    s<--[change cipher spec]<-e

    Finished

    s---[Finished(verify)]->e

    Finished

    s<--[Finished(verify)]<-e
    ```

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:关于HTTPS的TSL握手 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • ESLint和Jest中使用esm示例详解

    ESLint和Jest中使用esm示例详解 简介 ESLint是一个开源的JavaScript代码检查工具,它的目标是保证代码的一致性和避免错误。ESLint支持插件,我们可以使用它来编写自定义规则,以便强制执行代码的有效性和可读性。 Jest是一个流行的JavaScript测试框架,可用于测试React、Vue等前端框架以及Node.js应用程序等等,其功…

    node js 2023年6月8日
    00
  • Nodejs如何搭建Web服务器

    下面是关于如何搭建Node.js Web服务器的完整攻略。 1. 安装Node.js 首先,你需要在你的计算机上安装Node.js。你可以从Node.js的官方网站 https://nodejs.org 下载安装程序,按照提示安装Node.js,安装完成后,你可以通过在命令行中输入以下命令来检查Node.js是否成功安装: node -v 如果你看到输出了N…

    node js 2023年6月8日
    00
  • node后端与Vue前端跨域处理方法详解

    一、 前言 在前后端分离的开发模式中,前端Vue与后端Node进行沟通交互涉及到跨域问题。下面我们来详细讲解node后端与Vue前端跨域处理方法。 二、 跨域原理 同源策略(Same Origin Policy)要求网页只能访问与本网页同一个域名、端口、协议的网页。也就是说,一个源的的脚本仅能读写属于该源的窗口和文档。如果读写的目标不是同源的,就会出现跨域问…

    node js 2023年6月8日
    00
  • 一组JS创建和操作表格的函数集合

    一、创建表格的函数 createTable(rows, cols, containerId) 创建一个 rows 行和 cols 列的表格,并将其插入到指定容器中。 代码块示例: function createTable(rows, cols, containerId) { let container = document.getElementById(co…

    node js 2023年6月8日
    00
  • websocket结合node.js实现双向通信的示例代码

    首先,让我们来了解一下WebSocket。WebSocket是一种协议。它提供了双向通信通道,允许客户端和服务器之间实时进行交互。而node.js是一种服务器端JavaScript开发框架,支持WebSocket协议。 要在Node.js中使用WebSocket,我们可以使用第三方模块ws。下面是一个简单的示例代码,它在Node.js中使用WebSocket…

    node js 2023年6月8日
    00
  • 支撑Java NIO与NodeJS的底层技术

    要详细讲解支撑Java NIO与NodeJS的底层技术,首先需要了解以下两个方面: 网络通信的基本原理及底层实现机制; Java NIO和NodeJS的核心概念和实现原理。 接下来,我们将分别从这两个方面展开讲解。 一、网络通信的基本原理及底层实现机制 在网络通信过程中,客户端和服务器通过IP地址和端口号进行连接,然后通过协议进行数据的传输。常见的网络协议有…

    node js 2023年6月8日
    00
  • nodejs前端模板引擎swig入门详解

    让我来详细讲解一下“nodejs前端模板引擎swig入门详解”的完整攻略。 标题 nodejs前端模板引擎swig入门详解 简介 Swig是一款简单、快速、可扩展的 JavaScript 模板引擎。Swig能够在Node.js和浏览器中运行,因此它不仅适用于服务器端的视图,还适用于浏览器端的JavaScript模板引擎。Swig具有一个内置缓存系统,能显著提…

    node js 2023年6月8日
    00
  • 基于websocket实现简单聊天室对话

    下面是基于websocket实现简单聊天室对话的完整攻略。 简介 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它使得浏览器和服务器之间的数据交换变得更加高效、实时。利用 WebSocket 技术,我们可以很容易地实现一个简单的聊天室对话功能。 步骤 1. 启动WebSocket服务端 WebSocket 服务端可以选择使用不同的编程…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部