Https连接,Android 2.3和4之间的差异

Sta*_*Sky 6 ssl https android handshake sni

我正在开发一个从不同服务器(http和https)检索图像的项目.

我发现这个有用的Q/A以避免No peer certificate errorAndroid 2.3中的问题,但我无法理解为什么在Android 4(> 3)中这个问题(" No peer certificate error")没有呈现.

如果我错了,请纠正我:

  • 在Android 2.3中,HTTPS连接执行整个证书检查(和握手);
  • 在Android> 3中,即使握手失败,也会建立HTTPS连接(例如:我的应用程序,因为对等方没有证书).

这些Android版本有什么区别?为什么我需要相信所有 Android 2.3而不是Android 4?

为什么在Android 2.3中我收到以下例外:"javax.net.ssl.SSLPeerUnverifiedException: No peer certificate error" 在Android 4中一切正常并且连接已建立?

一切都与Android Honeycomb中引入的SNI 服务器名称指示相关吗?

Rig*_*key 2

您的认证机构可能未在 Android 2.3.3 版本中列出,但在 4.x 版本中列出。为了确定这一点,请检查两台设备上的密钥库。

从命令行使用 ADB,您可以将 android 的密钥库转储到文件中,并检查该颁发者是否在您的密钥库中可用(可能需要是 root)。adb pull /system/etc/security/cacerts.bks cacerts.bks

下载并安装 Portecle(来自:http ://portecle.sourceforge.net/ )选择 File / Open Keystore... 并选择 cacerts.bks 文件。选择“工具”/“密钥库报告”并将该信息复制到文本编辑器中,以查找从 Web 浏览器找到的证书中指定的 CN。就我而言,我找不到“Cyber​​trust Public SureServer SV CA”中的一个。

在计算机网络浏览器上使用https://example.website.com/浏览到您感兴趣的网站,并找出 CN 是谁。将其与如上所示的密钥库进行比较。如果它不在密钥库中,您将需要添加它。

注意:Android 4.0 手机有不同的存储证书的方法,并且不使用下面提到的 cacerts.bks 文件。对于他们来说,您应该能够在 Web 浏览器中打开所需的 https 站点并以这种方式添加所需的证书。

我与 Facebook 和 Redbox 的连接有问题。为了解决我的问题并更新我的 android 2.3.3 手机证书,我从 android 3.2 模拟器复制了该证书并将其放在我的手机上:

  1. 创建并启动 android 3.2 虚拟设备。
  2. 从模拟器复制 cacerts.bks 文件(确保未连接其他设备)。adb pull /system/etc/security/cacerts.bks cacerts.bks
  3. 断开模拟器。
  4. 连接要更新的设备(必须是 root)。您可能需要将 /system 文件夹重新挂载为 rw 以获得读/写功能。有关安装问题,请参阅:此链接
  5. 从您的设备保存旧证书文件的副本: adb pull /system/etc/security/cacerts.bks cacerts.bks.old
  6. 将更新后的证书文件放在您的设备上 adb push cacerts.bks /system/etc/security/
  7. 重新启动设备
  8. 重新连接并验证新的 cacert 文件已加载。