Android 使用相互身份验证时TLS握手出错
在测试我的应用程序()时,我发现在某些设备上,如果https请求需要客户端证书(即相互身份验证),则应用程序和服务器之间的TLS握手会失败。同样的代码可以在Windows和OS X上运行,因此我知道这不是由错误的证书引起的,也不是因为我忘记将证书包含在SSLContext中。我在一些安卓4.4设备和一些5.0设备上都检测到了它。不幸的是,我没有找到任何导致它失败的共同点(除了Android)。然而,在设备上,如果它出现故障,它会100%地出现故障 我已经分析了网络流量,以便更准确地了解错误发生的时间。以下内容适用于所有设备:Android 使用相互身份验证时TLS握手出错,android,security,ssl,https,certificate,Android,Security,Ssl,Https,Certificate,在测试我的应用程序()时,我发现在某些设备上,如果https请求需要客户端证书(即相互身份验证),则应用程序和服务器之间的TLS握手会失败。同样的代码可以在Windows和OS X上运行,因此我知道这不是由错误的证书引起的,也不是因为我忘记将证书包含在SSLContext中。我在一些安卓4.4设备和一些5.0设备上都检测到了它。不幸的是,我没有找到任何导致它失败的共同点(除了Android)。然而,在设备上,如果它出现故障,它会100%地出现故障 我已经分析了网络流量,以便更准确地了解错误发生的
14 03 01 00 20 9c 07 49 78 9f ba 09 03 41 6b 66 ad 46 e2 75 94 f7 cf 18 bd 11 cf 35 a2 eb 5e b8 a8 4c 2a 1d c5
16 03 01 00 30 20 0e 13 d7 48 b9 6e b2 1b 96 6f 10 56 67 81 63 d9 d8 c7 73 23 95 3b f9 da f9 ce f4 f8 d1 7e 1b a4 12 92 4c 4f 54 a5 f8 49 75 d5 46 f4 2d 29 97
下面是一个示例,说明在握手失败的情况下,这两个TLS记录在设备上的外观:
14 03 01 00 20 a9 86 c2 fd 03 0a f8 08 fa f8 9e eb b7 97 07 56 6f 27 c0 d6 8f 95 be 77 c1 44 84 e9 e1 56 6f 6a
16 03 01 00 30 ff 36 76 e5 47 87 84 71 1c ce c9 08 41 45 fc 09 c6 ef 08 e6 21 ff 45 3a 10 ae 8d 5a 99 5f ca c5 ac bd bf 7e ca 69 32 4d 1f 01 c6 30 83 8e 06 cb
从记录的第一个字节中,我可以看到两个客户端都发送了一个更改密码规范记录,然后是一个握手记录。故障设备的一个有趣之处是,第二条记录的索引为5的字节的值为ff。当我查看TLS规范时,我没有看到任何具有该值的握手记录类型。成功的设备将该字节设置为20,这意味着“完成”
知道发生了什么事吗?这是什么原因造成的