java.security.cert.CertPathValidatorException:未找到证书路径的信任锚

时间:2012-09-17 23:36:47

标签: android ssl certificate

我正在Android上开发一个客户端应用程序,它连接到负载均衡器后面的AWS上的服务器,我在GoDaddy上创建了一个SSL证书并将其添加到负载均衡器上。

浏览器上的一切进展顺利,它识别证书,但是当我尝试使用Android调用API时,我遇到了这个例外:

  

09-18 01:18:55.187:W / System.err(32585):引起:   java.security.cert.CertPathValidatorException:信任锚   未找到证书路径。

我发现一些讨论谁说要在应用程序上添加证书,但是没有办法在证书服务器端修复它?这不是证书的问题吗?

3 个答案:

答案 0 :(得分:2)

我通过创建一个具有正确的组织单位名称和公共名称的新的.cs来修复它

答案 1 :(得分:0)

我想说官方Android文档将是你在这种情况下最好的朋友。见这里:http://developer.android.com/training/articles/security-ssl.html#UnknownCa

这就是他们所说的,这既解决了问题又同时非常聪明:

  

在这种情况下,发生SSLHandshakeException是因为您有CA.   这不受系统信任。可能是因为你有一个   来自尚未受Android或您信任的新CA的证书   应用程序在没有CA的旧版本上运行。更常见的是CA.   未知因为它不是公共CA,而是由私人CA发布的   政府,公司或教育等组织   机构供自己使用。

     

幸运的是,您可以教HttpsURLConnection来信任特定的集合   CA.这个程序可能有点复杂,所以下面是一个   从InputStream获取特定CA的示例,使用它   创建一个KeyStore,然后用于创建和初始化   的TrustManager。 TrustManager是系统用于验证的内容   来自服务器的证书,并通过从KeyStore创建一个   一个或多个CA--这些CA将是唯一受其信任的CA.   的TrustManager。

     

给定新的TrustManager,该示例初始化一个新的SSLContext   它提供了一个SSLSocketFactory,可用于覆盖默认值   来自HttpsURLConnection的SSLSocketFactory。这样连接就会   使用您的CA进行证书验证。

答案 2 :(得分:-1)

这个奇怪的错误消息表示找不到您指定的信任库。