p4gefau1t / trojan-go

Go实现的Trojan代理,支持多路复用/路由功能/CDN中转/Shadowsocks混淆插件,多平台,无依赖。A Trojan proxy written in Go. An unidentifiable mechanism that helps you bypass GFW. https://p4gefau1t.github.io/trojan-go/
GNU General Public License v3.0
7.62k stars 1.65k forks source link

[BUG] tunnel/tls/server.go:acceptLoop 里 sni mismatch 错误消息有错误 #531

Open lgxz opened 1 month ago

lgxz commented 1 month ago

if s.verifySNI && !matched { return nil, common.NewError("sni mismatched: " + hello.ServerName + ", expected: " + s.sni) }

说 expected s.sni,实际上,上面的检查匹配逻辑是:

  1. 如果用户配置了 sni,则检查用户配置的,否则检查证书 CN。
  2. 检查证书里的 dnsNames

所以,这个错误消息里的应该是: expected := sni + " or " + strings.Join(dnsNames, "/")

当然,这是简化处理。没有考虑 dnsNames 包含 sni。

Potterli20 commented 1 month ago

来个pr嘛

lgxz commented 1 month ago

来个pr嘛

Ok. done.

不过感觉代码逻辑似乎还是有点问题。

似乎用户可以设置一个和证书里的 CommonName 以及 DNS Names 都不同的 sni,只要客户端/服务端配置一致就行。 因为代码逻辑里只要 s.sni 匹配就算匹配通过。

那么证书的意义是什么呢?