连接到 android.googleapis.com/gcm/ 时出现间歇性和连续性 SSLHandshakeException

Intermittent and continuous SSLHandshakeException while connecting to android.googleapis.com/gcm/

我们在连接到 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 path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target at com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:151)

我遇到了同样的问题和同样的 SSL 错误。关于这个还有更多的讨论吗?

我不完全理解细节,但是当我更新我们的推送 provider/server "External Services Certs" 并在下面添加证书时..我的推送又开始工作了。因此,即使我 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 AgMBAAGjggEzMIIIBLzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUH AwEGCCsGAQUFBwMCMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFHfCuFCa Z3Z2sS3ChtCDoH6mfrpLMB8GA1UdIwQYMBaAFJviB1dnHB7AagbeWbSaLd/cGYYu MDUGCCsGAQUFBwEBBCkwJzAlBggrBgEFBQcwAYYZaHR0cDovL29jc3AucGtpLmdv b2cvZ3NyMjAyBgNVHR8EKzApMCegJaAjhiFodHRwOi8vY3JsLnBraS5nb29nL2dz cjIvZ3NyMi5jcmwwPwYDVR0gBDgwNjA0BgZngQwBAgIwKjAoBggrBgEFBQcCARYc aHR0cHM6Ly9wa2kuZ29vZy9yZXBvc2l0b3J5LzANBgkqhkiG9w0BAQsFAAOCAQEA HLeJluRT7bvs26gyAZ8so81trUISd7O45skDUmAge1cnxhG1P2cNmSxbWsoiCt2e ux9LSD+PAj2LIYRFHW31/6xoic1k4tbWXkDCjir37xTTNqRAMPUyFRWSdvt+nlPq wnb8Oa2I/maSJukcxDjNSfpDh/Bd1lZNgdd/8cLdsE3+wypufJ9uXO1iQpnh9zbu FIwsIONGl1p3A8CgxkqI/UAih3JaGOqcpcdaCIzkBaR9uYQ1X4k2Vg5APRLouzVy 7a8IVk6wuy6pm+T7HT4LY8ibS5FEZlfAFLSW8NwsVz9SBK2Vqn1N0PIMn5xA6NZV c7o835DLAFshEWfC7TIe3g== -----证书结束-----

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

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

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

Kari - 这就是我的想法。感谢您的回复..但是您列出的 URL 给出了 404.. 如果您有正确的 URL.

,您能仔细检查并更新吗