【问题标题】:Intermittent and continuous SSLHandshakeException while connecting to android.googleapis.com/gcm/连接到 android.googleapis.com/gcm/ 时出现间歇性和连续性 SSLHandshakeException
【发布时间】:2018-03-14 13:59:09
【问题描述】:

我们在连接到 Google 的 GCM API (https://android.googleapis.com/gcm/send) 以获取来自我们服务器的 Android 推送通知 (SSLHandshakeException) 时遇到一些问题。 从 2018 年 2 月 28 日到 3 月 8 日,问题是间歇性的(有时推送发送,否则 SSL 握手错误)。从 2018 年 3 月 9 日起,该问题一直持续。

请查看下面的日志。想知道颁发的证书是否有任何变化。

com.sun.jersey.api.client.ClientHandlerException:javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:找不到有效的请求目标的认证路径 在 com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:151)

【问题讨论】:

  • 您没有提供日志,您提供了一条错误消息。 SO 不是 IT 服务。错误信息很清楚,找不到有效的证书
  • 问题是,GCM 推送通知到 android 设备之前工作得很好。检查现有证书的有效期,有效期至 2022 年

标签: android google-cloud-messaging


【解决方案1】:

我不完全了解细节,但是当我更新我们的推送提供者/服务器“外部服务证书”并在下面添加证书时......我的推送又开始工作了。因此,即使我最初在 2 年前安装的 Equifax 证书在几周前还可以使用,但 GCM 服务器上发生了一些变化,并且该证书不再有效。它的到期日期为 2018 年 8 月,该日期已近,但应在该日期之前到期。

我确实注意到新证书是 SHA256,而原来的证书是 SHA1,所以这可能是必需的安全升级。由于我的推送内容提供程序是分布式的,而不是在一个易于更新证书的位置,这让我感到很头疼:(

解决我的问题的证书是:

-----开始证书----- MIIEXDCCA0SgAwIBAgINAeOpMBz8cgY4P5pTHTANBgkqhkiG9w0BAQsFADBMMSAw HgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFs U2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjAeFw0xNzA2MTUwMDAwNDJaFw0yMTEy MTUwMDAwNDJaMFQxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVHb29nbGUgVHJ1c3Qg U2VydmljZXMxJTAjBgNVBAMTHEdvb2dsZSBJbnRlcm5ldCBBdXRob3JpdHkgRzMw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKUkvqHv/OJGuo2nIYaNVW XQ5IWi01CXZaz6TIHLGp/lOJ+600/4hbn7vn6AAB3DVzdQOts7G5pH0rJnnOFUAK 71G4nzKMfHCGUksW/mona+Y2emJQ2N+aicwJKetPKRSIgAuPOB6Aahh8Hb2XO3h9 RUk2T0HNouB2VzxoMXlkyW7XUR5mw6JkLHnA52XDVoRTWkNty5oCINLvGmnRsJ1z ouAqYGVQMc/7sy+/EYhALrVJEA8KbtyX+r8snwU5C1hUrwaW6MWOARa8qBpNQcWT kaIeoYvy/sGIJEmjR0vFEwHdp1cSaWIr6/4g72n7OqXwfinu7ZYW97EfoOSQJeAz AgMBAAGjggEzMIIBLzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHfCuFCa Z3Z2sS3ChtCDoH6mfrpLMB8GA1UdIwQYMBaAFJviB1dnHB7AagbeWbSaLd/cGYYu MDUGCCsGAQUFBwEBBCkwJzAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AucGtpLmdv b2cvZ3NyMjAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8vY3JsLnBraS5nb29nL2dz cjIvZ3NyMi5jcmwwPwYDVR0gBDgwNjA0BgZngQwBAgIwKjAoBggrBgEFBQcCARYc aHR0cHM6Ly9wa2kuZ29vZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEA HLeJluRT7bvs26gyAZ8so81trUISd7O45skDUmAge1cnxhG1P2cNmSxbWsoiCt2e ux9LSD+PAj2LIYRFHW31/6xoic1k4tbWXkDCjir37xTTNqRAMPUyFRWSdvt+nlPq wnb8Oa2I/maSJukcxDjNSfpDh/Bd1lZNgdd/8cLdsE3+wypufJ9uXO1iQpnh9zbu FIwsIONGl1p3A8CgxkqI/UAih3JaGOqcpcdaCIzkBaR9uYQ1X4k2Vg5APRLouzVy 7a8IVk6wuy6pm+T7HT4LY8ibS5FEZlfAFLSW8NwsVz9SBK2Vqn1N0PIMn5xA6NZV c7o835DLAFshEWfC7TIe3g== -----结束证书-----

我通过运行这个 openssl cmd 获得了它,它是链中的第二个。很可能不需要那个 CAfile 参数,因为我没有那个文件并且有投诉,但仍然显示了所需的证书链。

openssl s_client -connect gcm-http.googleapis.com:443/gcm/send -debug -showcerts -CAfile entrust_2048_ca.cer

【讨论】:

    【解决方案2】:

    问题是由于将 googleapis.com 的 SSL 证书从 GeoTrust 迁移到 GoogleTrust。当我们从 URL:https://android.googleapis.com 导入新证书并添加到我们服务器的信任库时,问题得到了解决。

    【讨论】:

      【解决方案3】:

      Kari - 我就是这么想的。感谢您的回复.. 但是您列出的 URL 给出了 404.. 如果您的 URL 正确,您能否再次检查并更新。

      【讨论】:

      • 是的,即使链接显示 404,您仍然可以使用与 googleapis 相同的 URL 从浏览器查看和导入证书。
      【解决方案4】:

      我看到同样的问题和同样的 SSL 错误。对此还有什么讨论吗?

      【讨论】:

      • 考虑使用 cmets 部分 add a comment 进行后续问题或编辑帖子。请避免将这些添加到post answer
      猜你喜欢
      • 2015-07-19
      • 2011-01-11
      • 2014-07-14
      • 1970-01-01
      • 2012-10-20
      • 2020-08-17
      • 2023-03-03
      • 2017-10-24
      • 2018-09-25
      相关资源
      最近更新 更多