应用版本:firefox 开发者版 v101
问题描述:微博主页可以正常访问,但点击搜索或热搜链接,都提示:
建立安全连接失败
连接到 s.weibo.com 时发生错误。
由于不能验证所收到的数据是否可信,无法显示您想要查看的页面。
建议向此网站的管理员反馈这个问题。
详细了解…
通过 curl -v “网址” 反复重试对比发现在访问微博热搜的时候有一个加密协商被 “微博账户认证网关服务器” 拒绝了。
具体测试指令:
通过
curl -v "https://s.weibo.com/weibo?q=%23%E7%A5%9D%E8%9E%8D%E5%8F%B7%E5%87%86%E5%A4%87%E5%9C%A8%E7%81%AB%E6%98%9F%E8%B6%8A%E5%86%AC%23&topic_ad="
得到 302 跳转请求链接
继续
curl -v "https://passport.weibo.com/visitor/visitor?entry=miniblog&a=enter&url=https%3A%2F%2Fs.weibo.com%2Fweibo%3Fq%3D%2523%25E7%25A5%259D%25E8%259E%258D%25E5%258F%25B7%25E5%2587%2586%25E5%25A4%2587%25E5%259C%25A8%25E7%2581%25AB%25E6%2598%259F%25E8%25B6%258A%25E5%2586%25AC%2523%26topic_ad%3D&domain=.weibo.com&sudaref=&ua=php-sso_sdk_client-0.6.29&_rand=1651842429.1375"
返回
……
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / AES256-GCM-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: C=CN; ST=Beijing; O=Sina.com Technology(China)Co.,ltd; CN=sina.com
……
注意这段提示:
ALPN, server did not agree to a protocol
ALPN#
ALPN (Application-Layer Protocol Negotiation): 应用层协议协商是 TLS 的一个扩展,故而应用层协议在协商加密协议的过程中,避免了额外的往返通讯开销。
ALPN 支持任意应用层协议的协商,目前应用最多是 HTTP2 的协商。当前主流浏览器,都只支持基于 HTTPS 部署的 HTTP/2,因为浏览器是基于 ALPN 协议来判断服务器是否支持 HTTP2 协议。
浏览器协商原理#
可以通过 WireShark 抓包分析 ALPN 协商协议交互的过程
*浏览器在进行SSL连接,第一次发送Client Hello包时,在扩展字段里携带浏览器支持的版本。
*服务器在返回Server Hello包时,如果服务器支持http 2,则会返回h2,如果不支持,则从客户端支持的协议列表中选取一个它支持的协议,一般为http/1.1。
浏览器和服务端都支持 ALPN 协商,是用上 HTTP/2 的大前提。
大部分 Web Server 都依赖 OpenSSL 库提供 https服务,是否支持 ALPN 完全取决于使用的 OpenSSL 版本,OpenSSL 1.0.2 版本才开始支持 ALPN。
关闭 Firefox ALPN 功能#
地址栏输入
about:config
确认风险提示
输入“ALPN”
将
security.ssl.enable_alpn
的值切换为 false
参考:
ALPN