首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >证书受PC信任,但不受Android信任

证书受PC信任,但不受Android信任
EN

Stack Overflow用户
提问于 2012-07-05 16:12:37
回答 14查看 115.3K关注 0票数 82

从今天早上开始,我的证书在Android上不再受信任,然后我的应用程序就无法再连接了:

代码语言:javascript
复制
 Catch exception while startHandshake: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
 return an invalid session with invalid cipher suite of SSL_NULL_WITH_NULL_NULL
 javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
    at org.apache.harmony.xnet.provider.jsse.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:137)
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:93)
    at org.apache.http.conn.ssl.SSLSocketFactory.createSocket(SSLSocketFactory.java:381)
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:165)
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:591)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:807)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:781)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:770)

如果我在Google Chrome (在PC上)上尝试,没有问题,证书是可信的,但如果我在Android上的Chrome浏览器上尝试,它会告诉我证书不可信。我能做什么?

EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2012-07-05 16:26:35

证书文件中可能缺少中间证书。如果您已经访问过具有相同证书销售商的其他网站,则会在您的浏览器中记住中间证书。这可能不是--甚至更好--并不是你网站的每个访问者都是这样。要解决SSL连接中缺少的中间证书,您需要将中间证书添加到您自己的证书文件中。

GoDaddy有一些关于中间证书的信息(但最好的来源总是您的证书提供商):http://support.godaddy.com/help/article/868/what-is-an-intermediate-certificate

我曾经有过一个中间证书的问题(也有Commodo ),我不得不将我自己的证书文件与中间CA相结合才能工作。一旦完成,就不会再发生错误。

每台网络服务器的安装说明,作者:http://support.godaddy.com/help/article/5346/installing-an-ssl-server-instructions?locale=en

下面是Commodo自己提供的最常用的安装指南列表:https://support.comodo.com/index.php?/Default/Knowledgebase/Article/View/1145/0/how-do-i-make-my-own-bundle-file-from-crt-files

根据您使用的for服务器,您需要按以下顺序指定所有证书(域证书、中间证书和根证书)或将它们组合为一个证书(例如Nginx):

  1. 域certificate
  2. intermediate certificate
  3. root证书

在SSH终端中执行此操作的一种简单方法是键入:

代码语言:javascript
复制
cat domainfile intermediatefile rootfile > targetfile

证书测试工具

如果您遇到更多问题或不确定证书是否正确,请尝试使用在线工具验证您的SSL证书。例如: networking4all.com/en/ssl+certificates/quickscan

对android 2.2及更低版本的SNI支持

请注意,android 2.2 (以及可能更早的版本)不支持SNI,SNI允许不同主机名的多个SSL证书在一个单独的IP地址上工作而不会出现问题。感谢@technyquist提供了这些信息。有关此问题的更多信息,请查看this SO question about SNI

票数 95
EN

Stack Overflow用户

发布于 2012-12-03 04:49:46

你必须创建一个crt包,然后就可以了。您将收到三个crt文件。把它们都用上!如果你只使用domain.crt,那么在安卓系统上会有警告,但在PC上不会。

我在nginx上。我打开domain_name.crt,然后打开positivesslca2.crt,选择all并复制到domain_name.crt的末尾。然后打开AddTrustExternalCARoot.crt,再次复制到domain_name.crt的末尾。然后安装domain_name.crt

效果很好。

票数 19
EN

Stack Overflow用户

发布于 2015-06-18 23:44:35

在这里添加这个,因为它可能会对某人有所帮助。我在Android显示弹出窗口和无效证书错误时遇到了问题。

我们有一个Comodo扩展验证证书,并且我们收到了包含4个文件的zip文件:

  • AddTrustExternalCARoot.crt
  • COMODORSAAddTrustCA.crt
  • COMODORSAExtendedValidationSecureServerCA.crt
  • www_mydomain_com.crt

我将它们连接在一行上,如下所示:

cat www_mydomain_com.crt COMODORSAExtendedValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >www.mydomain.com.ev-ssl-bundle.crt

然后我使用这个包文件作为我在nginx中的ssl_certificate_key。就是这样,现在起作用了。

受此启发:https://gist.github.com/ipedrazas/6d6c31144636d586dcc3

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11340298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档