首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Android Studio
华为云
V2EX  ›  Android

某些安卓手机获取不到 https 的请求数据

  •  
  •   34091136 · 148 天前 · 3432 次点击
    这是一个创建于 148 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,有人知道这样是什么情况吗?

    第 1 条附言  ·  147 天前
    具体详情是这样的:
    我们配置了 ssl 证书,用 https 访问接口,但是在某些安卓手机,比如 vivo 的,就访问不了后台的数据,但是换成 http 请求就可以了
    第 2 条附言  ·  147 天前
    对于一些评论,我再添加一下
    Android 4.0.4 RSA 2048 (SHA256) TLS 1.0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA ECDH secp256r1 FS
    Android 4.1.1 RSA 2048 (SHA256) TLS 1.0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA ECDH secp256r1 FS
    Android 4.2.2 RSA 2048 (SHA256) TLS 1.0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA ECDH secp256r1 FS
    Android 4.3 RSA 2048 (SHA256) TLS 1.0 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA ECDH secp256r1 FS
    Android 4.4.2 RSA 2048 (SHA256) TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ECDH secp256r1 FS
    Android 5.0.0 RSA 2048 (SHA256) TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ECDH secp256r1 FS
    Android 6.0 RSA 2048 (SHA256) TLS 1.2 > http/1.1 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ECDH secp256r1 FS
    对于 SNI 是支持的,现在问题出现于 android 版本 6.0 以下的都访问不了接口,这个不关设备的事
    38 回复  |  直到 2018-05-30 12:38:15 +08:00
        1
    RockOrRoll   148 天前 via iPhone
    如果是抓包的话,7.0 以上做了限制
        2
    34091136   147 天前
    @RockOrRoll 不是抓包,而是访问
        3
    KyonLi   147 天前   ♥ 2
    不知道为什么看到这样的提问就特别来气
        4
    huanchena   147 天前
    @KyonLi +1
        5
    34091136   147 天前
    @KyonLi 为什么?
        6
    honeycomb   147 天前 via Android   ♥ 1
    @34091136 他大概是觉得你没有说清楚问题,觉得这样的没有说清楚的问题不值得被解答,还占了他的视线吧。
        7
    KomeijiSatori   147 天前
    可能是低版本 Android 不支持 SNI ?
        8
    imnpc   147 天前
    用手机浏览器打开 https 的域名 看有没有报错 一般可能和楼上说的 SNI 有关系
        9
    3dwelcome   147 天前
    有很多可能性,有可能服务器指定的加密算法 cipher suite,客户端不支持。
    也有可能是楼上说的 SNI 问题,具体要看服务器的日志,不能一概而论的。
        10
    Servo   147 天前
    证书链不全?密码套件兼容没做好?
        11
    zjp   147 天前 via Android   ♥ 1
    来气 +1
    看到这问题的反应: "获取不到 https" -> 这没理由的事情嘛,说的应该是 7.0 以上的抓包问题。之后楼主添加附言说明了是配置证书的问题。这次说的是服务器上的证书还是 APP 的证书,是浏览器不能访问还是 APP …还有 vivo 的系统版本,还得我们继续猜。
        12
    Vindroid   147 天前
    android 上浏览器能正常访问 https 的网页么?
        13
    34091136   147 天前
    @zjp 好吧,对不起了
        14
    34091136   147 天前
    @zjp 因为这个不涉及到抓包,配置证书没有问题的,我只是想告诉更多的信息
        15
    fengleidongxi   147 天前
    是不是和证书有关?
        16
    janus77   147 天前 via Android
    webview 吗,还是 api 请求?
        17
    CodingPuppy   147 天前
    tls 版本太低,服务器未适配?
        18
    CodingPuppy   147 天前
    好像 4.4 以下的 android 默认 tls1.0,服务器需要配置,或者安卓修改使用 1.2 版本
        19
    h4lbhg1G   147 天前
    secp256r1 换成 138 还是多少 再试试
        20
    34091136   147 天前
    @h4lbhg1G 我好像所有的都上了
        21
    34091136   147 天前
    @CodingPuppy tls1.0 我也配置了
        22
    34091136   147 天前
    @janus77 API 请求
        23
    yrom   147 天前
    这些手机连接失败总有报错吧? log 有没有
        24
    honeycomb   147 天前 via Android
    @34091136 要不要先排除法做一下:
    1,用模拟器 /aosp 的 6.0 以下版本能复现故障吗
    2,上述模拟器 /aosp 调用 getSupportedCipherSuites 得到的结果和开头的“某些手机”冲突吗?

    另外 ecdhe_rsa_aes128_gcm_sha256 似乎是 Android5.0 或以上才支持
        25
    h4lbhg1G   147 天前
    @34091136 #20 如果我没记错 nginx openssl 在处理多个配置时有 bug,只能用最高的那个设置 你试试只配置最低的那档,不配置多个
        26
    VYSE   147 天前
    Let's Encrypt CA? 是有些老机型没有 trust 他家导致 SSL error
        27
    dandycheung   147 天前 via Android
    貌似 4.x 版本的系统,TLS 的支持各厂商不太一样。
        28
    salmon5   147 天前 via Android
    又是 let's encrypt 惹的祸
        29
    34091136   147 天前
    @VYSE comodo 的证书
        30
    34091136   147 天前
    @honeycomb 6.0 以下都复现,
        31
    34091136   147 天前
    @h4lbhg1G 具体配置 ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;这个吗?
        32
    VYSE   147 天前
    @34091136 #29 实测下看 exception 就清楚了, 的确老机器某些证书会缺失.
        33
    h4lbhg1G   147 天前
    @34091136 #31 本来我想说的是 ssl_ecdh_curve prime256v1。是不是浏览器可以访问接口,但是客户端获取不到数据?而且用了 okhttp? 我知道的只有这个坑。
        34
    flyingghost   147 天前
    给个 echo 接口放出 url 来给大家看看可能更清楚。
        35
    hyyou2010   147 天前
    配置了 ssl 证书----------怎样配置的?是证书写到 app 里面的,还是发证 CA 添加到手机系统?
        36
    814084764   146 天前
    直接忽略证书校验就行了。
    但是上不了谷歌商店。
        37
    34091136   146 天前
    @hyyou2010 证书是放到 nginx 服务器上的
        38
    hyyou2010   146 天前
    @34091136 客户端怎么验证证书的?比如,通过配置 CA,或者把证书写死在代码里面?

    我有过这样的经历,但是也可能是我水平不够,某个地方设置漏了导致的:配置 CA 证书等等,通过手机系统浏览器可以访问,不提示 https 证书问题,但是通过 API 接口访问就是访问不到。

    后来钻研,我的理解是:虽然配置了 CA 证书,但是 Android 系统没能传递这个信任链,所以还是不信任我们的服务器。后来是把证书验证写死在代码里面解决的。

    注意,我的理解不一定对,只是陈述我曾经的经历。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3245 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 21ms · UTC 06:57 · PVG 14:57 · LAX 23:57 · JFK 02:57
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1