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

posted @ 2021-04-07 20:17  FfD4edyo  阅读(311)  评论(0)    收藏  举报