您已经设置了一个小型服务,从Let的加密生成了免费证书,并配置了Nginx以使用该证书(fullchain.pem和privkey.pem)
然而,当我尝试从我的Android应用程序拨打电话时(使用OkHttp3) 我收到此错误
java.security.cert.CertPathValidatorException: Trust anchor for certification path not found
是否允许加密根证书不受Android证书信任存储区信任?或者在设置nginx时我错过了什么? 解决这个问题的方法如果我还想使用Let的加密证书?
答案 0 :(得分:1)
我不确定它是否有用,但/etc/letsencrypt/live/<your domain>/README
文件说:
此目录包含您的密钥和证书。
privkey.pem
:证书的私钥。
fullchain.pem
:大多数服务器软件中使用的证书文件。
chain.pem
:用于Nginx中的OCSP装订&gt; = 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提供了有关如何为所有常见操作执行此操作的文档 网络服务器。如果您需要该站点工作,这是唯一的方法 默认Android浏览器至少通过Android 4.2。
或者,将中间CA视为任何其他未知CA,并创建一个 TrustManager直接信任它,就像前两个一样 部分。
希望它有所帮助。
答案 1 :(得分:0)
在让我们加密用户指南中:
If you’re using OCSP stapling with Nginx >= 1.3.7, chain.pem should be provided as the ssl_trusted_certificate to validate OCSP responses.
对于其他使用Apache的人,请检查您的apache版本。 对于我的服务器之一,我进行了设置。我正在使用Apache <2.4.8。在我们加密用户指南中:
cert.pem contains the server certificate by itself, and chain.pem contains the additional intermediate certificate...
Apache < 2.4.8 needs these for SSLCertificateFile and SSLCertificateChainFile, respectively.
因此,对于 SSLCertificateFile ,请使用 cert.pem ; 对于 SSLCertificateChainFile ,请使用 chain.pem 。
我最初仅将 fullchain.pem 用于 SSLCertificateFile 。它适用于大多数浏览器和iOS。但是Android抱怨上述错误。
在Apache中分别配置证书和链,所有平台都可以正常工作。