1

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

浏览器上一切正常,它可以识别证书,但是当我尝试使用 Android 调用 API 时,我得到了这个异常:

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

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

4

2 回答 2

2

我通过使用正确的组织单位名称和通用名称创建一个新的 .csr 来修复它

于 2012-09-18T12:26:34.453 回答
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 是系统用来验证来自服务器的证书,并且通过从具有一个或多个 CA 的 KeyStore 创建一个证书,这些将是该 TrustManager 信任的唯一 CA。

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

于 2013-08-23T08:32:13.850 回答