我正在Android上开发一个客户端应用程序,它连接到负载均衡器后面的AWS上的服务器,我在GoDaddy上创建了一个SSL证书并将其添加到负载均衡器上。
浏览器上的一切进展顺利,它识别证书,但是当我尝试使用Android调用API时,我遇到了这个例外:
09-18 01:18:55.187:W / System.err(32585):引起: java.security.cert.CertPathValidatorException:信任锚 未找到证书路径。
我发现一些讨论谁说要在应用程序上添加证书,但是没有办法在证书服务器端修复它?这不是证书的问题吗?
答案 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)
这个奇怪的错误消息表示找不到您指定的信任库。