2017-08-03 94 views
3

您已经设置了一个小服务器,生成一个免费证书让我们加密并配置Nginx以使用该证书(fullchain.pem和privkey 。质子交换膜)让我们在Android上加密给出java.security.cert.CertPathValidatorException:找不到证书路径的信任锚

然而,当我试图从我的Android应用(与OkHttp3) 拨打电话我得到这个错误

java.security.cert.CertPathValidatorException: Trust anchor for certification path not found 

是不是由Android的证书信任存储信任让我们的加密根证书?或者我在设置nginx时错过了什么? 这是什么工作如果我仍然想使用让我们加密证书?

+0

“让我们加密不被Android证书信任存储所信任的根证书?” - 它将部分取决于Android的版本。旧设备更可能有问题。 “或者我在设置nginx时错过了什么?” - 使用常规的Web浏览器进行测试,看看浏览器是否存在抱怨。 “什么是解决此问题的方法” - 在OkHttp中设置证书锁定,锁定Let's Encrypt根证书。 – CommonsWare

+0

使用常规的Android浏览器工作得很好。看起来更像是JDK信任存储的问题:/ – Johny19

+0

您是否找到了解决方案?我有同样的问题 – jaumard

回答

1

我不知道它是有用的,但,在/etc/letsencrypt/live/<your domain>/README文件说:

该目录包含您的密钥和证书。

privkey.pem:证书的私钥。

fullchain.pem:在大多数服务器软件中使用的证书文件。

chain.pem:用于Nginx中的OCSP装订> = 1.3.7。

cert.pem:会中断许多服务器配置,不应使用 而不读取更多文档(请参阅下面的链接)。

我们建议不要移动这些文件。有关更多信息,请参阅 Certbot用户指南,网址为 https://certbot.eff.org/docs/using.html#where-are-my-certificates

所以,也许你应该使用chain.pem

另一方面,对于那些甚至不使用Nginx,我从Android得到相同的错误,因为我错误地使用了chain.pem而不是fullchain.pem Android应用程序的解决方案之一,需要您发送证书的整个链(即:fullchain.pem),因为这里说明:

https://developer.android.com/training/articles/security-ssl.html#CommonHostnameProbs

有解决这个问题的两种方法:

  • 配置服务器以将中间CA包含在服务器 链中。大多数CA提供有关如何为所有常见的 Web服务器执行此操作的文档。如果您需要网站至少通过Android 4.2使用默认Android浏览器工作 ,则这是唯一的方法。

  • 或者,像对待其他未知CA一样对待中间CA,并创建一个TrustManager直接信任它,如前两个 部分所做的那样。

希望它有帮助。

相关问题