问一个 tls1.3 细节问题

2020-03-27 20:07:48 +08:00
 s82kd92l
在开启 tls1.3session resumption 但未开启 esni 的前提下,resumption 里的 client hello 是否包含 sni? 如果不包含的话,如果做 sni 反代的话是否有途径判断目标地址呢?

@est
1948 次点击
所在节点    程序员
3 条回复
est
2020-03-28 01:28:23 +08:00
携腰。。我不懂 @_@ 。。
est
2020-03-28 01:29:48 +08:00
不过我有经历过,www.reddit.com 被 sni 屏蔽,reddit.com 没屏蔽,自动跳转到 www.reddit.com 可以继续浏览。不确定是否为 1.3 。确定没开启 esni
binkcn
2020-05-08 15:50:08 +08:00
不请自来。

刚好这些天在弄相关的东西,说一下我目前了解到的东西。

首先,client hello 是否包含 server_name 完全取决于客户端(譬如你的浏览器),以目前唯一支持 ESNI 的浏览器 Firefox 来说,在高级设置中可以手动启用 ESNI ( network.security.esni.enabled ),访问 V2EX 时会自动切换到 ESNI 方式,而访问不支持 ESNI 的站点时还是会发送明文的 server_name 。目前 ESNI 仍然是草案,即便以后真的启用,为了兼容不支持 ESNI 的站点,估计也仍然会保持这种方式,毕竟不是所有站点都会支持 ESNI 。

然后,我部署了 https://github.com/dlundquist/sniproxy 这个 SNI 代理,在源码 https://github.com/dlundquist/sniproxy/blob/master/src/tls.c 第 220 行左右可以看到,SNI 代理的工作方式是需要从 tls 握手的 client hello 中提取 server_name 来作为目标判定。

如果以后 ESNI 正式启用,那么类似的 SNI 代理需要稍作修改,从 client hello 中拿到客户端发送来的公钥,然后配合自己保存的私钥解出真正的 host 来作为目标判定,这样的话就要求除了 web server 外,sniproxy 也需要访问同样的私钥。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/656914

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX