-
Notifications
You must be signed in to change notification settings - Fork 4.7k
重构部分证书pin逻辑 #5154
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
重构部分证书pin逻辑 #5154
Conversation
|
|
|
顺便改成 Xray-core 内置 root 证书 net4people/bbs#526 (comment) 以及删掉 allowInsecure、用 PinnedPeerCertificateSha256 代替吧 |
|
PinnedPeerCertificateSha256 这个可以加进分享链接里 |
|
删了allowInsecure不太好吧 我有的时候本地测试都得开( |
|
((这里认为,将 |
本地测试也可以 PinnedPeerCertificateSha256 以前好像提过删掉 allowInsecure 这个选项,有人说有时候证书过期了,不开会失联,但现在都是 REALITY 了 |
|
这个东西到底不好提取 要不加个环境变量 XRAY_DEBUG 什么的然后从infra里检测没有这个flag就禁掉这个功能 也不用删代码 以后有其他可能危险的功能也可以加到底下 |
还有现在的两个 pin 选项都删了,统一改为 |
|
重构了大量有的没的把功能迁移走 |
新字段 PinnedPeerCertificateSha256 改自PinnedPeerCertificatePublicKeySha256 不过没有break什么东西 因为后者从未出现在文档中出现过(故意不写的 因为被我发现的时候我觉得不太好) 其为证书的sha256 为一个通用的证书指纹 chrome的证书查看器和crt.sh都以此作为证书的唯一标识符 类似这样 AE243D668EC9C7F74A0DCD1AD21C6676B4EFE30C39728934B362093AF886BF77 还有一种标识符是sha-1 Windows内置证书查看器是使用这个 crt.sh也有 但是觉得太旧而且混一起不方便就没用
从现在开始
证书链hash具有最高优先级 会无视其他选项 因为它精确指定了证书
然后会尝试验证 PinnedPeerCertificateSha256 这个字段具有两个行为
指定的是叶子证书 → 同证书链hash会直接通过验证
指定的是CA证书 → 暂时通过 将当前被验证身份的CA添加到证书池中
全都没有就是失败(废话)
执行 VerifyPeerCertInNames 它会根据里面指定的name重新验证证书 但是如果 PinnedPeerCertificateSha256 指定了一个CA 那么它将把验证成功添加到CA池进行验证(用于自签名CA 比如自己签发一个CA 在 PinnedPeerCertificateSha256 指定自定义CA的指纹 然后在这里指定SNI)