@@ -70,10 +70,83 @@ https://miaotony.xyz/2020/03/28/Server_IssueACertWithACME/
7070
7171
7272
73- ## SSL缓存
73+ ## TLS会话恢复
74+
75+ TLS session resumption
76+
77+ TLS 会话恢复使用 session ticket 的机制在 ** RFC 5077** 中进行了定义,该 RFC 于 ** 2008 年** 发布,适用于 TLS 1.2 版本。
7478
7579
7680
7781在 Nginx 中配置 SSL 会话缓存可以提高 SSL 握手性能和服务器负载能力,因为 SSL 握手需要进行密钥协商和证书验证等操作,会占用服务器的计算资源。
7882
79- 通过使用 SSL 会话缓存,可以在客户端和服务器之间缓存 SSL 会话状态信息,从而加快 SSL 握手速度和减轻服务器负载。
83+ 通过使用 SSL 会话缓存,可以在客户端和服务器之间缓存 SSL 会话状态信息,从而加快 SSL 握手速度和减轻服务器负载。
84+
85+
86+
87+
88+
89+ ```
90+ Syntax: ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
91+ Default: ssl_session_cache none;
92+ Context: http, server
93+ ```
94+
95+ 设置存储会话参数的缓存的类型和大小。缓存可以是下面的类型中的任意一个:
96+
97+ - ` off ` 严格禁止使用会话缓存:nginx 显式地告诉客户端不重用会话
98+
99+ - ` none ` 不允许使用会话缓存:nginx 告诉客户端可能重用会话,但不真正地在缓存中存储会话参数
100+
101+ - ` builtin ` OpenSSL 内置的缓存。仅能被一个工作进程使用。在会话中指定缓存大小。默认保存 20480 个会话。使用内置缓存将导致内存碎片
102+
103+ - ` shared ` 所有工作进程共享缓存。以字节为单位指定缓存大小;1M 大约可以存储 4000 个会话。每个共享缓存可以拥有任意的名称。可以在多个虚拟主机中使用具有相同名称的缓存。
104+
105+ 它还用于自动生成、存储和定期轮换 TLS 会话票据密钥(1.23.2),除非使用 ` ssl_session_ticket_key ` 指令显式地进行配置。可以同时使用这两种缓存类型,比如:
106+
107+
108+
109+
110+
111+
112+
113+
114+
115+ 握手协议完成后,服务器端会在内存中保存会话信息,包括如下部分:
116+
117+ - 会话标识符(session identifier):每个会话都有唯一编号。
118+
119+ - 证书(peer certificate):对端的证书,一般情况下都为空。
120+
121+ - 压缩算法(compression method):一般不启用。
122+
123+ - 密码套件(cipher spec):客户端和服务器端协商出的密码套件。
124+
125+ - 密钥(master secret):每个会话会保存一个主密钥,注意不是预备主密钥。
126+
127+ - 话可恢复标识(is resumable):表示某个会话是否可恢复。
128+
129+
130+
131+ 通过服务器保存的会话信息,最终能够生成 TLS 记录层协议所需要的加密参数(security parameters),从而能够保护应用层的数据。
132+
133+
134+
135+
136+
137+ 每次建立新 SSL/TLS 连接都需要握手,如果会话中断,那么需要重新握手。此时,有两种方法恢复原来的 Session:
138+
139+ 1 . Session ID
140+
141+ Session ID 重用的前提是客户端和服务端都保存会话密钥。每次会话都有唯一的编号(Session ID)。会话中断,需要重连时,客户端只要给出该编号,并且服务器端拥有该记录,双方就可以重用已有的会话密钥,而不必重新生成。
142+
143+ 客户端提供 Session ID,服务端确认该编号存在,双方不再进行握手阶段剩余的步骤,而是直接使用已有的会话密钥。
144+
145+ 目前所有浏览器都支持 Session ID,但其缺点是:因为 Session ID 往往只保留在一台服务器上,所以如果客户端的请求发到另一台服务器,那么无法恢复会话。当然也可以要求负载均衡的时候只用 IP hash,尽管在实际情况中这么做不太现实。
146+
147+ Session ID 方案要求服务端记住会话状态,有违于 HTTP 服务无状态的特点。
148+
149+
150+
151+
152+
0 commit comments