You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu16.04升级至18.04后Android7.0设备SSL握手失败求助

解决Android 7.0设备与升级后Ubuntu 18.04 OpenResty服务器的SSL握手问题

问题根源分析

从你的排查细节来看,核心矛盾非常明确:Android 7.0搭载的BoringSSL仅把secp256r1认作NIST P-256曲线的有效标识,但你服务器配置的是同一条曲线的别名prime256v1。虽然二者数学上是完全相同的曲线,但旧版BoringSSL不会将这两个名称视为等价,导致握手时两端找不到共享的ECDH曲线,最终触发no shared cipher错误。

至于你尝试同时添加prime256v1和secp256r1时出现配置报错,是因为Ubuntu 18.04搭载的OpenSSL 1.1.0对曲线别名的处理更严格——它不允许在同一条曲线列表里重复添加同一个曲线的不同别名,会判定这是无效的重复配置。

解决方案

只需要修改OpenResty的ECDH曲线配置,用secp256r1替代prime256v1即可,具体步骤如下:

  1. 编辑OpenResty的SSL配置文件(通常在/etc/openresty/nginx.conf或对应站点的配置文件中):

    ssl_ecdh_curve secp384r1:secp256r1:secp521r1;
    

    这里移除prime256v1换成secp256r1——由于二者是同一条曲线,支持prime256v1的设备依然能正常匹配,Android 7.0设备也能找到自己支持的曲线。

  2. 重启OpenResty服务让配置生效:

    systemctl restart openresty
    
  3. 验证效果:用Android 7.0设备访问服务器,确认SSL握手正常完成,同时检查其他设备(包括支持prime256v1的设备)是否不受影响。

补充说明

  • Ubuntu 16.04升级到18.04后,OpenSSL从1.0.2版本升级到1.1.0,曲线别名的校验逻辑变得更严格,这也是之前未出现该问题的原因之一。
  • 升级Android系统后握手恢复正常,是因为新版Android的BoringSSL已经能识别prime256v1作为P-256曲线的别名,无需修改服务器配置即可兼容。

内容的提问来源于stack exchange,提问作者raman2887

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 18:47:56