V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
34091136
V2EX  ›  Android

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

  •  
  •   34091136 · May 28, 2018 · 18891 views
    This topic created in 2893 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    注意,我的理解不一定对,只是陈述我曾经的经历。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5224 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 71ms · UTC 05:41 · PVG 13:41 · LAX 22:41 · JFK 01:41
    ♥ Do have faith in what you're doing.