C# SslStream 关于SNI的个人观察(基于.NET Core 3.1 与wireshark抓包)
1.AuthenticateAsClient 方法的参数是一个ip地址,则Client Hello中根本没有SNI扩展值
2.AuthenticateAsClient 方法的参数是空字符串,则Client Hello中SNI扩展值是字符串"?124"
现在才发现之前自己发表的关于SNI的文章都存在错误,并不全是所有的服务器在SNI为IP的情况下返回默认证书,而是在没有SNI的情况下返回默认证书,比如cloudflare,有如下情况
1.它有的ip地址不发送SNI会返回默认证书,并且根据ip的不同默认证书也有所不同,但是发送一个存在于CDN上的SNI会返回该SNI指定的证书,也就是根据有效SNI的不同返回的证书也不同,但是发送错误的SNI会无法建立加密连接,浏览器会说加密算法不支持之类的,很迷惑人,其实问题是SNI无效
2.它有的ip地址不发送SNI或者说错误的SNI根本无法建立加密连接
3.后续的Host请求头要跟返回证书中的DNS名称兼容,否则404
浙公网安备 33010602011771号