Как исправить ошибку «Сертификат эмитента недействителен» при попытке отправить в Firebase Cloud Messaging из PHP Curl на CENTOS 7? - PullRequest
0 голосов
/ 14 июля 2020

Я не мастер SSL, поэтому я надеюсь, что кто-нибудь из них сможет помочь с этим. Я разрабатываю демонстрацию приложения, которое некоторое время назад могло успешно отправлять сообщения FCM. Мобильное приложение вызывает сценарий PHP на сервере CentOS 7, который использует следующий код для отправки запроса. Это сработало нормально.

                        $notification = array('title' =>$this->title , 'body' => $this->body, 'sound' => 'default', 'badge' => '1');
//                      $arrayToSend = array('to' => $token, 'notification' => $notification,'priority'=>'high');
                        $params_android = array('ttl'=>'0s','priority'=>'high');
                        $headers_apns = array('apns-expiration'=>'400','apns-priority'=>'10');
                        $params_apns = array('headers'=>$headers_apns);
                        // if only one recipient, must use the 'to' field instead of registration_ids
                        if (1 == sizeof($this->recipients)) {
                                $arrayToSend = array('to' => $this->recipients[0], 'notification' => $notification, 'android'=>$params_and$
                        } else {
                                $arrayToSend = array('registration_ids' => $this->recipients, 'notification' => $notification, 'android'=>$
                        }
                        $json = json_encode($arrayToSend);

                        $headers = array();
                        $headers[] = 'Content-Type: application/json';
                        $headers[] = 'Authorization: key='. self::$SERVER_KEY_COMMTEST;
                        $ch = curl_init();

                        curl_setopt($ch, CURLOPT_URL, self::$FCM_URL);
                        curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"POST");
                        curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
                        curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
                        curl_setopt($ch, CURLOPT_FAILONERROR,true);
                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                        //Send the request
                        $response = curl_exec($ch);

                        //Close request
                        if ($response === FALSE) {
                                $this->errorstring .= curl_error($ch) . "\n";
                                return false;
                        }
                        curl_close($ch);

                        $this->fcm_response = $response;

URL, на который я отправляю запрос, предоставляется Google: https://fcm.googleapis.com/fcm/send

Около шести месяцев go, Я приостановил работу над этим проектом. Теперь я пытаюсь возобновить его, но вызовы FCM возвращают ошибку: «Сертификат эмитента недействителен»

Поддержка FCM здесь бесполезна.

Я могу выполнить ручной вызов CURL из командной строки, чтобы получить более подробный ответ. Это:

curl: (60) Issuer certificate is invalid.
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.

Я вижу ссылку на подробности в подробном ответе. Он предполагает, что мне нужно получить сертификаты и go в процессе установки. Где я могу получить указанные сертификаты?

Это ошибка сертификата на моем или их сервере? И как мне это исправить?

1 Ответ

0 голосов
/ 17 июля 2020

Эта проблема решена. Для информации, вот он.

DNS-серверы, настроенные на моем Linux сервере, не предоставляли необходимую информацию DNS. Таким образом, исходящие запросы перехватывались интернет-провайдером. Естественно, это означало, что вызовы, предположительно идущие в FCM, действительно попадали на сервер провайдера, и возникла ситуация несоответствия сертификата SSL.

Это было решено путем обращения к провайдеру, который предоставил новые адреса DNS-серверов. Теперь исходящие запросы достигают правильных мест назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...