============
== 白菜 ==
============
一个勤奋的代码搬运工!

解决 Firefox 访问weibo搜索或热搜提示 建立安全连接失败

firefox weibo

应用版本: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