『 Hash 认证』这个名字是我起的,可能不太准确,具体定义是:
- 服务端使用自签名证书,客户端忽略『一般意义上的』证书验证
- 通过预共享的方式,让客户端知晓服务器证书的 Hash 或其他特征值
- 建立连接时,客户端校验服务端送来的证书的 Hash ,确定『是这个证书没错』
那么,在这样的情况下(不考虑更换证书什么的导致这个预共享的 Hash 需要一起更换,这是后话了),此时建立的 TLS 连接加密是没有问题的,但是是否还能做到『验证对端』这个功能呢?
『 Hash 认证』这个名字是我起的,可能不太准确,具体定义是:
那么,在这样的情况下(不考虑更换证书什么的导致这个预共享的 Hash 需要一起更换,这是后话了),此时建立的 TLS 连接加密是没有问题的,但是是否还能做到『验证对端』这个功能呢?
|
joesonwMay 15, 2023 via iPhone
1
浏览器都内置了几个 CA 的证书用来校验服务器证书的。你自签的也是这个思路,系统安装你这个证书,或者其 CA
|
|
HerobsMay 15, 2023 via iPhone
2
这个叫做证书 fingerprint ,相当于忽略了 CA 体系,当然可以验证对方的真实性,理论上更安全。
|
|
0o0O0o0O0oMay 15, 2023 via iPhone
3
|
|
azure2023us559May 15, 2023 via Android
4
服务端反向验证客户端?
|
|
5
@azure2023us559 不是,就是单纯验证服务器证书
|
|
6
|
|
monkeyWieMay 15, 2023
7
这不就是 SSL Pinning 吗,可以防止中间人攻击
|
|
ih8es9OIzne0959pMay 15, 2023
8
『 Hash 认证』这个应该是 http client hello
|
|
ih8es9OIzne0959pMay 15, 2023
9
@ajaxgoldfish #8 TLS 握手
|
|
DawnMoonMay 15, 2023
10
感觉这样的话,不如直接在本地保存一份服务端的证书,反正都得存点东西,与其存 hash ,不如存完整的证书
|
|
sujin190May 15, 2023
11
@MFWT #5 CA 的体系不就是你说的这个么,只不过系统都集成好了,标准的证书校验本来就是用预制 CA 来校验证书签名,你说的这个预共享的 Hash 其实就是预先安装的 CA 证书,如果不方便安装的话而且似乎大部分语言发起 TLS 的时候都能手动指定 CA 证书吧
|
|
churchmiceMay 15, 2023
12
@villivateur #10 这两种方式是等价的,hash 存放更省空间,也更好管理
理论上有 hash 碰撞的可能,但是实际上没有 |
|
13
@sujin190
主要是用途比较特殊,比如我现在是做 SS 配合 simple-tls 插件使用,这个插件就支持 Pinning ,既然楼上大佬都说安全性上和『直接安装可信证书』没有什么区别,那么我觉得 Hash 可能会方便些 |