Https连接,Android 2.3和4之间的区别

6
我正在处理一个从不同服务器(http和https)检索图像的项目。
我发现这个有用的问题/答案可以避免在Android 2.3中出现“无对等证书错误”的问题,但我不明白为什么在Android 4(>3)中这个问题(“无对等证书错误”)没有出现。
请纠正我如果我错了:
  • 在Android 2.3中,HTTPS连接执行整个证书检查(和握手);
  • 在Android > 3中,即使握手失败(例如,我的应用程序作为对等方没有证书),也会建立HTTPS连接。
这些版本之间有什么区别? 为什么我需要在Android 2.3中信任全部而在Android 4中不需要?
为什么在Android 2.3中我收到以下异常:"javax.net.ssl.SSLPeerUnverifiedException: No peer certificate error"而在Android 4中一切正常并且连接已建立?

与SNI(服务器名称指示)相关的所有内容,都是在Android Honeycomb中引入的吗?


你需要解决方案还是区别? - Nirav Ranpara
Android版本之间的区别。SO上有很多解决方案。 - StarsSky
你的代码能在 2.3 上运行吗? - Nirav Ranpara
是的,从2.3到4.2都可以正常工作!但我的旧代码只能在>3中工作。安卓版本之间有什么区别? - StarsSky
1个回答

2
您的认证机构可能不在Android 2.3.3版本中列出,但在4.x版本中列出。要确定,请检查两个设备上的密钥库。
使用命令行中的ADB,您可以将Android的密钥库转储到文件中,并检查该发行者是否在您的密钥库中可用(可能需要root权限)。 adb pull /system/etc/security/cacerts.bks cacerts.bks
下载并安装Portecle(来自:http://portecle.sourceforge.net/) 选择文件/打开密钥库...并选择cacerts.bks文件。 选择工具/密钥库报告,并将该信息复制到文本编辑器中,以查找从Web浏览器中找到的证书中指定的CN。在我的情况下,我找不到“Cybertrust Public SureServer SV CA”的证书。
在计算机Web浏览器上浏览您感兴趣的网站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文件夹以获得读写权限。有关挂载问题,请参见:此链接
  5. 保存设备上旧证书文件的副本: adb pull /system/etc/security/cacerts.bks cacerts.bks.old
  6. 将更新后的证书文件放在设备上 adb push cacerts.bks /system/etc/security/
  7. 重新启动设备
  8. 重新连接并验证已加载新的cacert文件。

证书已存在:<issuer>CN=VeriSign Class 3 Public Primary Certification Authority - G5,OU="(c) 2006 VeriSign, Inc. - 仅限授权使用",OU=VeriSign Trust Network,O="VeriSign, Inc.",C=US</issuer> - StarsSky
@StarsSky,你能提供你正在使用的网站地址吗? - RightHandedMonkey
我的密钥库似乎缺少中间证书:VeriSign Class 3 International Server CA - G3。这可能是原因吗? - StarsSky
请按照以下Wiki测试添加缺失的证书:http://wiki.cacert.org/FAQ/ImportRootCert?action=show&redirect=ImportRootCert#Android_Phones - RightHandedMonkey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接