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

时间:2013-03-01 10:49:51

标签: android ssl https handshake sni

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

我发现this usefull Q/A以避免Android 2.3中No peer certificate error的问题,但我无法理解为什么在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中一切正常并且建立了连接?

Server Name Indication中引入的SNI Android Honeycomb 相关的一切是什么?

1 个答案:

答案 0 :(得分:2)

您的认证机构可能未列在2.3.3版本的Android中,但是在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以进行读/写功能。有关安装问题,请参阅:this link
  5. 从您的设备保存旧证书文件的副本:  adb pull /system/etc/security/cacerts.bks cacerts.bks.old
  6. 将更新的证书文件放在您的设备上  adb push cacerts.bks / system / etc / security /
  7. 重新启动设备
  8. 重新连接并验证新的cacert文件已加载。