在进行HTTPS调用时使用了错误版本的密钥库。

11

大家好,我是安卓程序员。

我正在尝试从我的安卓代码中进行https安全调用。虽然在模拟器上调用很顺利,但在实际的三星Galaxy设备上却遇到了SSL错误。

我使用了Crazy Bob的方法来处理证书。以下是Crazy Bob的链接:http://blog.crazybob.org/2010/02/android-trusting-ssl-certificates.html

问题是我在自定义SSLSocketFactory对象内部得到了一个"keystore版本不正确"的错误。

你们有什么建议可以解决这个问题吗? 谢谢。


可能是在Android调用中使用错误版本的密钥库的重复问题。 - Cukic0d
3个回答

28

您是否使用Bouncy Castle格式创建了密钥库?当使用keytool创建密钥库(特别是密钥库类型必须BKS)时,这3个参数都是必需的:

  -storetype BKS
  -provider org.bouncycastle.jce.provider.BouncyCastleProvider
  -providerpath /path/to/bouncycastle.jar

Android使用版本为1.46的bouncycastle,请确保在创建密钥库时使用此版本。 可以在这里找到1.46版本。


0

一个简单的替代方法是使用Portecle生成BKS:

  1. 下载Boucycastle Provider 1.46
  2. 将bcprov.jar替换为您的Portecle安装目录中的文件(例如:C:\ Program Files(x86)\ Portecle \ bcprov.jar)。需要相同的命名。
  3. 重新启动Portecle并生成您的BKS信任库。

备注:对我来说,问题出现在Android 4.0.3上,这样解决了。

更多解释在这里


0
如果有人偶然遇到这个问题,而@Jcs的优秀答案并没有解决它:我也遇到了完全相同的问题,结果发现我没有正确地在我的Web服务器上安装SSL证书。当我使用digicert的SSL测试工具时,我得到了这个想法:我的证书提供商使用了常见的做法,即使用中间CA签署服务器证书。在安装证书链(将发行者的中间CA链接到其根CA)之后,一切都正常工作了。

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