在我的工作中,我们使用内部CA运行私有PKI来签署我们的服务器证书。在开发通过https与REST API通信的Android应用程序时,我使用192.168.x.x IP设置了开发服务器并为其颁发了证书。所以我有:
然后我关注Android docs on setting up a TrustStore并让应用在Android 4.0.4设备上通过https进行通信。 当我在运行Android 4.4(KitKat)的设备中测试应用程序时,无法验证服务器。
任何想法为什么?
答案 0 :(得分:2)
因此,在RFC2818和RFC6125上挖掘了一下之后,我发现APIv14 (4.0.4)中的DefaultHostnameVerifier实现会检查主机是否符合CN部分,如果它不匹配,它将查找SAN条目 DNS 类型但不是IP类型。 APIv19 (4.4.4)将针对SAN IP条目检查IP主机。
因此,我将IP SAN条目192.168.0.3添加到服务器证书并对CA进行了签名,并使4.4设备通过HTTPS进行通信。