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

Ale*_*xis 81 android ssl-certificate

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

 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)
Run Code Online (Sandbox Code Playgroud)

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

Luc*_*eos 92

您可能缺少证书文件中的中间证书.如果您已访问过具有相同证书销售商的其他网站,则会在您的浏览器中记住中间证书.对于您网站的每位访问者来说,这可能不会 - 甚至更好 - 不会出现这种情况.要解决SSL连接中缺少的中间证书,您需要将中间证书添加到您自己的证书文件中.

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

我曾经有过这个问题的中间证书(也有Commodo),并且必须将我自己的证书文件与中间CA一起工作.完成后不再发生错误.

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

以下是Commodo自己最常见的安装指南列表:https://support.comodo.com/index.php?/ Default/Knoveledgebase/Article/View/1145/0/how-do-i-make- 我-自己束文件,从-CRT-文件

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

  1. 域名证书
  2. 中级证书
  3. 根证书

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

cat domainfile intermediatefile rootfile > targetfile
Run Code Online (Sandbox Code Playgroud)

证书测试工具

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

SNI支持Android 2.2及更低版本

请注意,android 2.2(可能更旧)不支持SNI,它允许不同主机名的多个SSL证书在一个IP地址上无问题地工作.感谢@technyquist提供该信息.有关此问题的更多信息,请查看有关SNI的此问题.

  • 那个networking4all网站检查链接是一个救星,谢谢! (2认同)

小智 19

你必须创建一个crt包然后它会没事的.您将收到三个crt文件.全部使用它们!如果您只使用domain.crt,则会在Android上发出警告,但不会在PC上发出警告.

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

效果很好.


k00*_*00k 9

在这里添加它可能对某人有帮助.我遇到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

然后我使用该捆绑文件作为我ssl_certificate_key的nginx.就是这样,现在有效.

灵感来自这个要点:https://gist.github.com/ipedrazas/6d6c31144636d586dcc3