关于 TLS『Hash 认证』的安全性的疑问

2023-05-15 08:10:00 +08:00
 MFWT

『 Hash 认证』这个名字是我起的,可能不太准确,具体定义是:

  1. 服务端使用自签名证书,客户端忽略『一般意义上的』证书验证
  2. 通过预共享的方式,让客户端知晓服务器证书的 Hash 或其他特征值
  3. 建立连接时,客户端校验服务端送来的证书的 Hash ,确定『是这个证书没错』

那么,在这样的情况下(不考虑更换证书什么的导致这个预共享的 Hash 需要一起更换,这是后话了),此时建立的 TLS 连接加密是没有问题的,但是是否还能做到『验证对端』这个功能呢?

1544 次点击
所在节点    问与答
14 条回复
joesonw
2023-05-15 08:21:20 +08:00
浏览器都内置了几个 CA 的证书用来校验服务器证书的。你自签的也是这个思路,系统安装你这个证书,或者其 CA
Herobs
2023-05-15 08:32:43 +08:00
这个叫做证书 fingerprint ,相当于忽略了 CA 体系,当然可以验证对方的真实性,理论上更安全。
0o0O0o0O0o
2023-05-15 08:45:01 +08:00
azure2023us559
2023-05-15 08:55:57 +08:00
服务端反向验证客户端?
MFWT
2023-05-15 08:57:21 +08:00
@azure2023us559 不是,就是单纯验证服务器证书
MFWT
2023-05-15 08:58:32 +08:00
@Herobs
@0o0O0o0O0o

了解了
monkeyWie
2023-05-15 09:11:58 +08:00
这不就是 SSL Pinning 吗,可以防止中间人攻击
ajaxgoldfish
2023-05-15 09:16:08 +08:00
『 Hash 认证』这个应该是 http client hello
ajaxgoldfish
2023-05-15 09:16:38 +08:00
@ajaxgoldfish #8 TLS 握手
villivateur
2023-05-15 09:31:30 +08:00
感觉这样的话,不如直接在本地保存一份服务端的证书,反正都得存点东西,与其存 hash ,不如存完整的证书
sujin190
2023-05-15 09:37:55 +08:00
@MFWT #5 CA 的体系不就是你说的这个么,只不过系统都集成好了,标准的证书校验本来就是用预制 CA 来校验证书签名,你说的这个预共享的 Hash 其实就是预先安装的 CA 证书,如果不方便安装的话而且似乎大部分语言发起 TLS 的时候都能手动指定 CA 证书吧
churchmice
2023-05-15 10:26:59 +08:00
@villivateur #10 这两种方式是等价的,hash 存放更省空间,也更好管理
理论上有 hash 碰撞的可能,但是实际上没有
MFWT
2023-05-15 10:37:21 +08:00
@sujin190

主要是用途比较特殊,比如我现在是做 SS 配合 simple-tls 插件使用,这个插件就支持 Pinning ,既然楼上大佬都说安全性上和『直接安装可信证书』没有什么区别,那么我觉得 Hash 可能会方便些
julyclyde
2023-05-18 14:49:40 +08:00
@MFWT 那不会的
自己山寨一套总比使用行业标准要更麻烦

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

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

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

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

© 2021 V2EX