我正在开发一个从不同服务器(http和https)检索图像的项目。
我发现this usefull Q/A以避免Android 2.3中No peer certificate error
的问题,但我无法理解为什么在Android 4(> 3)中出现此问题(“No peer certificate error
”)没有出席。
如果我错了,请纠正我:
这些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 相关的一切是什么?
答案 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。就我而言,我找不到“Cybertrust 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模拟器中复制了一个并将其放在我的手机上: