Push-Benachrichtigung in PHP mittels PEM Datei
Ich habe durch Ray Wenderlich die tutorials auf push-Benachrichtigungen werden über ein PHP-Skript.
Referenz: http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1
http://www.raywenderlich.com/32963/apple-push-notification-services-in-ios-6-tutorial-part-2
Ich habe eine Tonne von Forschung, aber ich lief in ein Problem an Teil 2, wo laufen Sie push.php Datei mit dem ck.pem-Datei.
/Applications/XAMPP/bin/php push.php development
Mein einzige Unterschied ist, dass ich mit XAMPP und MAMP nicht.
Habe ich bestätigt, dass alle Erweiterungen installiert sind.
Ich bin in der Lage zu testen, mein Zertifikat in das terminal durch das tun:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
Fordert es mich zur Eingabe meiner passphrase und ich. Funktioniert alles erfolgreich in das terminal.
Jedoch, wenn ich das push.php Datei, bekomme ich diese Fehler:
PHP-Warnung: stream_socket_client(): SSL-Vorgang ist fehlgeschlagen mit Fehlercode 1. OpenSSL-Fehler-Meldungen:
Fehler:14090086:SSL-Routinen:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
PHP-Warnung: stream_socket_client(): Failed to enable crypto in
PHP-Warnung: stream_socket_client(): unable to connect to ssl://gateway.in der sandbox.push.apple.com:2195 (Unbekannter Fehler) in on line 140
Linie 140 in der php-Datei ist:
$this->fp = stream_socket_client('ssl://' . $this->server, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
Fand ich diese:
iOS push-Benachrichtigung funktioniert nicht, wenn mit crontab scheduler
https://devforums.apple.com/message/1054840#1054840
Ich habe wörtlich wiederholt alles. Ich weiß, dass meine passphrase korrekt ist. Habe ich neu erstellt, meine Zertifikate, pem-Dateien und Schlüsseln. Nichts funktioniert. Die gleichen Fehler, jedes mal, wenn ich dies tun.
Ich bin über verwirrt.
Hat jemand irgendwelche Vorschläge haben, oder wissen, was Los ist?
Danke!
UPDATE 1:
Ich habe auch versucht, die Einstellung der vollständige Pfad zur ck.pem-Datei, die nicht behoben werden kann der Fehler entweder.
- Sind Sie sicher, dass Sie exportiert Ihre .der p12, richtig ? Stellen Sie sicher, Sie haben den private key, und nicht nur den öffentlichen Schlüssel, wenn Sie, exportieren Sie es aus Ihrem Schlüsselbund
- Ich habe nur den Export der privaten Schlüssel. Ich wusste nicht, exportieren Sie den öffentlichen Schlüssel, da das tutorial hat mir nicht zu sagen, zu.
- was ist der Wert von
$ctx
, und welche Möglichkeiten gibt es? - Optionen: stream_context_set_option($ctx, 'ssl', 'local_cert', $this->Zertifikate); stream_context_set_option($ctx, 'ssl', 'passphrase', $this->passphrase); $ctx-druckt Resource id #9 natürlich, ich habe keine Ahnung, was das bedeutet.
$this->certificate
sollte der absolute Dateipfad für Ihr lokales Zertifikat.- Ich hatte ja erwähnt im Update 1, die mit dem vollständigen Pfad hat nicht funktioniert. Bitte siehe meine Antwort -- das war das problem.
- Download Entrust.net Certification Authority (2048) von Anzuvertrauen ist Website. Verwenden Sie dann das Zertifikat mit dem OpenSSL-Befehl, mit
-CAfile
:openssl s_client -connect gateway.sandbox.push.apple.com:2195 -CAfile entrust-ca.pem
. Sie sollten wahrscheinlich Benutzer TLS 1.0 und SNI, zu:openssl s_client -connect gateway.sandbox.push.apple.com:2195 -CAfile entrust-ca.pem -tls1 -servername gateway.sandbox.push.apple.com
. - Hab ich schon beantwortet. Aber danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, ich endlich herausgefunden es aus! Nach 2 Tagen Arbeit mit diesem.
So, für jemand anderes, der läuft in dieser Ausgabe:
Laden Sie die entrust_2048_ca.cer-Zertifikat aus:
https://www.entrust.com/get-support/ssl-certificate-support/root-certificate-downloads/
Blättern Sie nach unten und Holen Sie sich die Entrust.net Certificate Authority (2048)
Dann, in der push.php Datei, nachdem Sie den Kontext für die passphrase ein, fügen Sie diese Zeile:
stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer');
stream_context_set_option($ctx, 'ssl', 'cafile', '/path/to/entrust_2048_ca.cer');
UNDstream_context_set_option($ctx, 'ssl', 'local_cert', 'PushChatKey.pem');
Aktualisiert macOS Sierra 10.12.4
Das problem ist in neue PHP-Version in macOS Sierra.
Sie verändert die Art und Weise funktioniert es mit Zertifikaten.
Ich würde vorschlagen, eine kleine änderungen in der akzeptierten Antwort, um die Dinge explizit.
Müssen Sie setup-Pfad zu entrust_2048_ca.cer und andere Parameter während der Erstellung der stream Kontext wie
Die vollständige Erklärung und links sind hier
Update auf macOS sierra 10.12.5
bitte fügen Sie
Ist das problem bei der neuen PHP Version in macOS Sierra
hinzufügen
stream_context_set_option($ctx, 'ssl', 'verify_peer', false);
die Niederlagen der server-überprüfung.
Credits @One In a Million Apps in einem Kommentar oben.