当前播放: 17 | SSL协议握手时Nginx的性能瓶颈在哪里?
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
课程目录
第一章:初识Nginx (19讲)
01 | 课程综述
免费
02 | Nginx适用于哪些场景?
免费
03 | Nginx出现的历史背景
免费
04 | 为什么用Nginx:它的 5 个主要优点
免费
05 | Nginx的四个主要组成部分
免费
06 | Nginx的版本发布历史
07 | 选择哪一个Nginx发行版本?
08 | 编译出适合自己的Nginx
09 | Nginx配置文件的通用语法介绍
10 | Nginx命令行及演示:重载、热部署、日志切割
11 | 用Nginx搭建一个可用的静态资源Web服务器
12 | 用Nginx搭建一个具备缓存功能的反向代理服务
13 | 用GoAccess实现可视化并实时监控access日志
14 | 从网络原理来看SSL安全协议
15 | 对称加密与非对称加密各自的应用场景
16 | SSL证书的公信力是如何保证的?
17 | SSL协议握手时Nginx的性能瓶颈在哪里?
18 | 用免费SSL证书实现一个HTTPS站点
19 | 基于OpenResty用Lua语言实现简单服务
第二章:Nginx架构基础 (22讲)
20 | Nginx的请求处理流程
21 | Nginx的进程结构
22 | Nginx的进程结构实例演示
23 | 使用信号管理Nginx的父子进程
24 | reload重载配置文件的真相
25 | 热升级的完整流程
26 | 优雅地关闭worker进程
27 | 网络收发与Nginx事件间的对应关系
28 | Nginx网络事件实例演示
29 | Nginx的事件驱动模型
30 | epoll的优劣及原理
31 | Nginx的请求切换
32 | 同步&异步、阻塞&非阻塞之间的区别
33 | Nginx的模块究竟是什么?
34 | Nginx模块的分类
35 | Nginx如何通过连接池处理网络请求
36 | 内存池对性能的影响
37 | 所有worker进程协同工作的关键:共享内存
38 | 用好共享内存的工具:Slab管理器
39 | 哈希表的max_size与bucket_size如何配置
40 | Nginx中最常用的容器:红黑树
41 | 使用动态模块来提升运维效率
第三章:详解HTTP模块 (40讲)
42 | 第三章内容介绍
免费
43 | 冲突的配置指令以谁为准?
44 | Listen指令的用法
45 | 处理HTTP请求头部的流程
免费
46 | Nginx中的正则表达式
47 | 如何找到处理请求的server指令块
48 | 详解HTTP请求的11个阶段
49 | 11个阶段的顺序处理
50 | postread阶段:获取真实客户端地址的realip模块
51 | rewrite阶段的rewrite模块:return指令
52 | rewrite阶段的rewrite模块:重写URL
53 | rewrite阶段的rewrite模块:条件判断
54 | find_config阶段:找到处理请求的location指令块
55 | preaccess阶段:对连接做限制的limit_conn模块
56 | preaccess阶段:对请求做限制的limit_req模块
57 | access阶段:对ip做限制的access模块
58 | access阶段:对用户名密码做限制的auth_basic模块
59 | access阶段:使用第三方做权限控制的auth_request模块
60 | access阶段的satisfy指令
61 | precontent阶段:按序访问资源的try_files模块
62 | 实时拷贝流量:precontent阶段的mirror模块
63 | content阶段:详解root和alias指令
64 | static模块提供的3个变量
65 | static模块对url不以斜杠结尾却访问目录的做法
66 | index和autoindex模块的用法
67 | 提升多个小文件性能的concat模块
68 | access日志的详细用法
69 | HTTP过滤模块的调用流程
70 | 用过滤模块更改响应中的字符串:sub模块
71 | 用过滤模块在http响应的前后添加内容:addition模块
72 | Nginx变量的运行原理
73 | HTTP框架提供的请求相关的变量
74 | HTTP框架提供的其他变量
75 | 使用变量防盗链的referer模块
76 | 使用变量实现防盗链功能实践:secure_link模块
77 | 为复杂的业务生成新的变量:map模块
78 | 通过变量指定少量用户实现AB测试:split_client模块
79 | 根据IP地址范围的匹配生成新变量:geo模块
80 | 使用变量获得用户的地理位置:geoip模块
81 | 对客户端使用keepalive提升连接效率
第四章:反向代理与负载均衡 (38讲)
82 | 反向代理与负载均衡原理
83 | 负载均衡策略:round-robin
84 | 负载均衡哈希算法:ip_hash与hash模块
85 | 一致性哈希算法:hash模块
86 | 最少连接算法以及如何跨worker进程生效
87 | upstream模块提供的变量
88 | proxy模块处理请求的流程
89 | proxy模块中的proxy_pass指令
90 | 根据指令修改发往上游的请求
91 | 接收用户请求包体的方式
92 | 与上游服务建立连接
93 | 接收上游的响应
94 | 处理上游的响应头部
95 | 上游出现失败时的容错方案
96 | 对上游使用SSL连接
97 | 用好浏览器的缓存
98 | Nginx决策浏览器过期缓存是否有效
99 | 缓存的基本用法
100 | 对客户端请求的缓存处理流程
101 | 接收上游响应的缓存处理流程
102 | 如何减轻缓存失效时上游服务的压力
103 | 及时清除缓存
104 | uwsgi、fastcgi、scgi指令的对照表
105 | memcached反向代理的用法
106 | 搭建websocket反向代理
107 | 用分片提升缓存效率
108 | open file cache提升系统性能
109 | HTTP/2协议介绍
110 | 搭建HTTP/2服务并推送资源
111 | gRPC反向代理
112 | stream四层反向代理的7个阶段及常用变量
113 | proxy protocol协议与realip模块
114 | 限并发连接、限IP、记日志
115 | stream四层反向代理处理SSL下游流量
116 | stream_preread模块取出SSL关键信息
117 | stream proxy四层反向代理的用法
118 | UDP反向代理
119 | 透传IP地址的3个方案
第五章:Nginx的系统层性能优化 (18讲)
120 | 性能优化方法论
121 | 如何高效使用CPU
122 | 多核间的负载均衡
123 | 控制TCP三次握手参数
免费
124 | 建立TCP连接的优化
免费
125 | 滑动窗口与缓冲区
126 | 优化缓冲区与传输效率
127 | 慢启动与拥塞窗口
128 | TCP协议的keepalive功能
129 | 减少关闭连接时的time_wait端口数量
130 | lingering_close延迟关闭TCP连接
131 | 应用层协议的优化
132 | 磁盘IO的优化
免费
133 | 减少磁盘读写次数
134 | 零拷贝与gzip_static模块
135 | 用tcmalloc优化内存分配
136 | 使用Google PerfTools分析Nginx
137 | 使用stub_status模块监控Nginx的状态
第六章:从源码视角深入使用Nginx与OpenResty (18讲)
138 | 第三方模块源码的阅读
139 | Nginx的启动流程
140 | HTTP第三方模块的初始化
141 | if指令是邪恶的吗?
142 | 解读Nginx的核心转储文件
143 | 通过debug日志定位问题
144 | OpenResty概述
145 | OpenResty中的Nginx模块与Lua模块
146 | 如何在Nginx中嵌入Lua代码
147 | OpenResty中Lua与C代码交互的原理
148 | 获取、修改请求与响应的SDK
149 | 工具类型的SDK
150 | 同步且非阻塞的底层SDK:cosocket
151 | 基于协程的并发编程SDK
152 | 定时器及时间相关的SDK
153 | share.DICT基于共享内存的字典
154 | 子请求的使用方法
155 | 基于OpenResty的WAF防火墙
17 | SSL协议握手时Nginx的性能瓶颈在哪里?

17 | SSL协议握手时Nginx的性能瓶颈在哪里?

陶辉
《深入理解Nginx》作者,智链达CTO
155讲 155课时,约1300分钟19724
单独订阅¥129
2人成团¥99
22
登录 后留言

精选留言(20)

  • MJ
    分享TLS加密过程,自己的总结:

    HTTPS采用混合加密算法,即共享秘钥加密(对称加密)和公开秘钥加密(非对称加密)。
    通信前准备工作:
    A、数字证书认证机构的公开秘钥(CA公钥)已事先植入到浏览器里;
    B、数字证书认证机构用自己的私有密钥对服务器的公开秘钥做数字签名,生成公钥证书,并颁发给服务器。

    1、client hello
    握手第一步是客户端向服务端发送 Client Hello 消息,这个消息里包含了一个客户端生成的随机数 Random1、客户端支持的加密套件(Support Ciphers)和 SSL Version 等信息。

    2、server hello
    服务端向客户端发送 Server Hello 消息,这个消息会从 Client Hello 传过来的 Support Ciphers 里确定一份加密套件,这个套件决定了后续加密和生成摘要时具体使用哪些算法,另外还会生成一份随机数 Random2。注意,至此客户端和服务端都拥有了两个随机数(Random1+ Random2),这两个随机数会在后续生成对称秘钥时用到。

    3、Certificate
    这一步是服务端将自己的公钥证书下发给客户端。

    4、Server Hello Done
    Server Hello Done 通知客户端 Server Hello 过程结束。

    5、Certificate Verify
    客户端收到服务端传来的公钥证书后,先从 CA 验证该证书的合法性(CA公钥去解密公钥证书),验证通过后取出证书中的服务端公钥,再生成一个随机数 Random3,再用服务端公钥非对称加密 Random3生成 PreMaster Key。

    6、Client Key Exchange
    上面客户端根据服务器传来的公钥生成了 PreMaster Key,Client Key Exchange 就是将这个 key 传给服务端,服务端再用自己的私钥解出这个 PreMaster Key 得到客户端生成的 Random3。至此,客户端和服务端都拥有 Random1 + Random2 + Random3,两边再根据同样的算法就可以生成一份秘钥,握手结束后的应用层数据都是使用这个秘钥进行对称加密。为什么要使用三个随机数呢?这是因为 SSL/TLS 握手过程的数据都是明文传输的,并且多个随机数种子来生成秘钥不容易被破解出来。
    2019-01-27
    1
    13
  • iron_man
    视频里第一个图表,怎么看出来握手是影响性能的指标的?

    作者回复: 要做个推理,前提:1、0,1,10K的线,随着文件增大,RPS没多少下降。100K和1M时下降才明显;2、文件增大,一定会导致对称加密算法的耗时增加,对称加密主要是异或操作;3、SSL耗时主要由握手和对称加密构成。 推论:0到1K到10K,每次AES应该有10倍耗时增加的,但RPS没什么下降。所以,文件小的时候,耗时主要在握手上。

    2018-11-07
    10
  • Dante.Fung
    打卡

    作者回复: (+﹏+)

    2018-11-06
    2
  • 拯救不开心
    老师您好,请教问题,
    1,您说,nginx在向浏览器发送证书时,会发送2个证书(先发送主证书,再发送二级证书),因为根证书是操作系统或浏览器内置的。浏览器会自动认证二级证书的签发机构,和根证书是否有效。

    又在评论里看到,客户端收到服务端传来的公钥证书后,先用CA公钥去解密公钥证书,“取出证书中的服务端公钥,去验证其证书链,颁发机构是否可信。”

    证书验证这里好懵哇。。。
    可以稍微解释一下,浏览器拿到服务端的公钥后,是如何验证证书链的,
    是浏览器自己从根证书中查找验证证书链吗,如果是,那这个服务器的公钥有啥用。。

    2,在评论区看到,您说:第6步生成的密钥仅用来作本次对称加密使用,后续任何数据都需要用它来加解密后再传输。

    这个“本次”和“后续任何数据都”如何理解?
    是指后续的所有应用层数据都使用这个密钥进行加解密传输吗?

    作者回复: 1、有些浏览器使用操作系统内置的根证书,有些浏览器则自己内置根证书。当收到Nginx发来的证书链后,用根证书的公钥验证身份证的合法性。
    你可以看下《Web协议详解与抓包实战》第76课。
    2、是的。本次、后续都是指在这个TLS会话内。

    2019-11-20
    1
  • 华子91
    第六步中,server 用client的公钥和自己的私钥生成的密钥与client 用server 的公钥和自己的私钥生成的密钥是一样的?两者都使用非对称加密算法

    作者回复: 完全一样。DH详细过程请参考我的《Web协议详解与抓包实战》第77课,ECDH椭圆曲线交换请参考78、79课。

    2019-08-19
    1
  • 酒桶
    老师,您好,这几个图的横坐标表示的是什么能具体讲一下吗?

    作者回复: 你是想问RSA/AES speed test*cores是什么意思吧?你看下“上邪忘川”的问题,那里我做了回答

    2019-04-29
  • 无菇朋友
    老师您好,接上条回复,那么客户端用dhce算法和公共参数如何生成公私钥呢,能简单讲一下吗

    作者回复: 椭圆曲线涉及大量数学知识,请参考:https://zh.wikipedia.org/wiki/%E6%A4%AD%E5%9C%86%E6%9B%B2%E7%BA%BF%E5%AF%86%E7%A0%81%E5%AD%A6。
    我建议你先弄清楚RSA的过程,再对比椭圆曲线可以省掉大量阅读数学公式的时间:-)

    2019-04-07
  • 无菇朋友
    老师您好,tls握手的步骤中,客户端用dhce算法结合服务器发送的公共参数生成一对公私钥是么,如果是这样,那中间人是不是也可以伪造一对公私钥来欺骗服务器呢

    作者回复: 不可以,因为中间人无法欺骗客户端,它无法伪造出私钥证书,进而不能通过签名等方式告诉持有公钥的客户端 相信它的身份。

    2019-04-07
  • Hana
    通讯中非对称加密和对称加密算法同时存在么? 大文件考虑对称加密算法的性能、小文件考虑非对称加密性能?

    作者回复: 对

    2019-03-16
  • 奔跑的兔子
    老师,第六步中服务器重新生成的秘钥与第七步客户端生成的秘钥,是用来做之后消息传递的对称加解密的吗?还是有其它作用?

    作者回复: 第六步生成的密钥仅用来作本次对称加密使用,后续任何数据都需要用它来加解密后再传输,没有其他作用。

    2019-02-06
  • BarbieYT
    rsa不是椭圆曲线吧,没看到文中提到ecc,dh,rsa,dsa,ecc中好似能对明文加密然后解密的只有rsa,dh一般只做密钥协商,ecc和dsa虽然也叫非对称加密,但是只能验证签名是否篡改,无法解密出原文。

    作者回复: RSA不是,ECDHE是的,也是当下主流的算法。第96课中通过$ssl_curves能取到当下用的是哪条椭圆曲线。

    2019-01-31
  • 10000小时定律
    讲的真好 配合书看 之前不懂的地方 现在也越来清楚 唯一的缺憾就是没有实际项目来锻炼自己所学
    2019-01-26
  • 刘义方
    老师,客户端验证身份如何验证?我能理解是服务器端返回数字证书,我根据CA提供公钥进行解密得到公钥,拿到公钥如何去验证

    作者回复: 验证公钥的证书链、颁发机构是否可信

    2019-01-19
  • 上邪忘川
    老师,您好!请问下这节课图中的RSA/AES speed test*cores,主要是指什么?或者说它的单位是什么?是指算法的强度么,还是说加密所消耗的时间。

    作者回复: 指1、2、4、8等不同CPU核心下每秒执行AES等算法的速度(每秒处理请求数或者流量)。它是指算法执行所消耗的时间。

    2019-01-14
  • qstudy
    老师,这个tls加密过程是,先是利用非对称算法,然后其实正式通信的时候,是通过对称加密的是吧?
    但是在生成这个对称加密秘钥的时候,我看了一些文章,他们是这样讲的,就是在客户端验证了数字签名证书之后,浏览器生成随机数R,并通过网站给的公钥进行加密,然后传给服务器,服务器用自己的私钥解密得到R,然后他们之间就以R为这个对称秘钥进行加密进行传输,这儿是算法不一样么,还是理解的有问题?

    作者回复: 这是早期的安全套件,目前新版本的浏览器以及服务器间不采用这种通讯方式,安全级别不高,包括一旦服务器私钥被攻破,前期抓到的包都可以破解,可以参考思诺登事件。

    2018-12-12
  • 一步
    非对称加密技术保证:双方生成的新密钥是一致的

    这个结论是怎么得出来的呢? 能验证下吗?

    作者回复: 你可以看下椭圆曲线加密的数学证明过程,或者看下RSA的原理验证,网上有很多,不过理解前者需要非常好的数学基础,后者比较简单,可以用来入门。

    2018-12-02
  • 风竹
    加密这块听得有点懵;需要多看几遍

    作者回复: 这块确实比较复杂,不过底层知识很容易迁移学习的。

    2018-11-20
  • hufu
    老师统计QPS的图表用的是什么工具

    作者回复: 呃,这个图表不是我做的

    2018-11-19
  • mxmkeep
    老师的tls流程是最复杂的吧,一般客户端不需要自己的证书密钥,除非银行客户端之类
    一般网站类,浏览器只是拿服务端公钥加密随机数发给服务端这样吧~

    作者回复: 不是的,我这里的例子是当前最主流的TLS安全套件交互流程,你用firefox、chrome等访问大多数ssl站点,交互流程都是这样的。这些复杂性,其实都被浏览器、nginx悄悄地完成了,所以我们感知不到:-)

    2018-11-19
  • honnkyou
    老师,tls一直没有捋特别清楚。视频中tls通信过程第五部不是很明白?客户端也生成秘钥对,再把公钥发给服务器端吗?那客户端的私钥的作用是什么呢?印象中非对称阶段是服务器端的秘钥对起作用。

    作者回复: 非对称加密在TLS中有两个用途,1、CA颁发的公私钥,用于身份验证及客户端对服务器的单向消息加密。2、由客户端和服务器各自生成公私钥,并把自己的公钥发给对方,结合对方的公钥和自己的私钥生成新的密钥。非对称加密技术保证:双方生成的新密钥是一致的。

    2018-11-18
收起评论
看过的人还看
数据结构与算法之美

王争  前Google工程师

75讲 | 72729 人已学习

拼团 ¥79 原价 ¥99
左耳听风

陈皓  网名“左耳朵耗子”,资深技术专家,骨灰级程序员

108讲 | 40807 人已学习

拼团 ¥199 原价 ¥299
从0开始学架构

李运华  资深技术专家

59讲 | 39235 人已学习

¥99
趣谈网络协议

刘超  网易研究院云计算技术部首席架构师

51讲 | 40035 人已学习

拼团 ¥79 原价 ¥99