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

353 天前
 MFWT

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

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

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

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

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

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

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

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

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

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

© 2021 V2EX