2015-01-29 19 views
14

Tôi đã làm việc qua các hướng dẫn của Ray Wenderlich về các thông báo đẩy bằng cách sử dụng Tập lệnh PHP.Thông báo Đẩy trong PHP bằng tệp PEM

tham khảo: 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

Tôi đã làm một tấn nghiên cứu nhưng tôi đã chạy vào một vấn đề về phần 2, nơi bạn chạy file push.php sử dụng file ck.pem.

/Applications/XAMPP/bin/php push.php development

khác biệt duy nhất của tôi là tôi đang sử dụng XAMPP và không MAMP.

Tôi đã xác nhận rằng tất cả các tiện ích đều được cài đặt.

tôi có thể kiểm tra giấy chứng nhận của tôi trong nhà ga bằng cách làm này:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem

Nó hỏi tôi để nhập cụm từ mật khẩu của tôi và tôi làm. Tất cả mọi thứ hoạt động thành công trong thiết bị đầu cuối.

Tuy nhiên, khi tôi chạy file push.php, tôi nhận được các lỗi này:

PHP Warning: stream_socket_client(): hoạt động SSL thất bại với mã 1. OpenSSL Thông báo lỗi: lỗi: thói quen SSL: 14.090.086: SSL3_GET_SERVER_CERTIFICATE: giấy chứng nhận Kiểm định thất bại PHP Warning: stream_socket_client(): không thể cho phép crypto trong

PHP Warning: stream_socket_client(): không thể kết nối ssl: //gateway.sandbox.push.apple.com: 2195 (Vô danh lỗi) trên dòng 140

Dòng 140 trong p tập tin hp là:

$this->fp = stream_socket_client('ssl://' . $this->server, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

tôi thấy những:

iOS push notification does not work when using crontab scheduler

https://devforums.apple.com/message/1054840#1054840

Push notification in PHP

Tôi có nghĩa là thử lại tất cả mọi thứ. Tôi biết cụm từ mật khẩu của tôi là chính xác. Tôi đã tạo lại chứng chỉ, tệp pem và khóa của mình. Không có gì hiệu quả. Cùng một lỗi mỗi khi tôi làm điều này.

Tôi đang bối rối.

Có ai có bất kỳ đề xuất hoặc biết điều gì đang xảy ra không?

Cảm ơn bạn!

CẬP NHẬT 1:

Tôi cũng đã thử đặt đường dẫn đầy đủ tới tệp ck.pem không sửa lỗi đó.

+0

Bạn có chắc bạn xuất khẩu sang đuôi .p12 của bạn một cách chính xác? Đảm bảo bạn đã lấy khóa riêng tư và không chỉ khóa công khai khi bạn xuất khóa từ keychain – Emilie

+0

@Emilie Tôi chỉ xuất khóa riêng tư. Tôi đã không xuất khóa công khai vì hướng dẫn cũng không cho tôi biết. –

+0

giá trị '$ ctx' là gì và tùy chọn nào được đặt trên đó? – oflannabhra

Trả lời

58

Được rồi, cuối cùng tôi đã tìm ra điều này! Sau 2 ngày làm việc với điều này.

Vì vậy, đối với bất kỳ ai khác chạy vào vấn đề này:

Tải về giấy chứng nhận entrust_2048_ca.cer từ: https://www.entrust.com/get-support/ssl-certificate-support/root-certificate-downloads/

Cuộn xuống và nhận được Certificate Authority Entrust.net (2048)

Sau đó, trong tệp push.php, sau khi bạn đặt ngữ cảnh cho cụm mật khẩu, hãy thêm dòng này: stream_context_set_option($ctx, 'ssl', 'cafile', 'entrust_2048_ca.cer');

+1

Đó là sự giúp đỡ to lớn! –

+3

URL trong câu trả lời giờ đã bị hỏng. Chính xác tại thời điểm này là https://www.entrust.com/get-support/ssl-certificate-support/root-certificate-downloads/ và cuộn xuống ** Cơ quan cấp chứng chỉ Entrust.net (2048) **. – swifthorseman

+0

Cảm ơn @ user3104465 Tôi đã cập nhật bài đăng. =) –

6

cập nhật để hệ điều hành MacOS Sierra 10.12.4


Vấn đề là ở PHP Version mới trong hệ điều hành MacOS Sierra. Họ đã thay đổi cách hoạt động với chứng chỉ.

Tôi sẽ đề xuất một thay đổi nhỏ trong câu trả lời được chấp nhận để làm cho mọi thứ rõ ràng.

Bạn phải thiết lập đường-entrust_2048_ca.cer và các thông số khác trong khi tạo bối cảnh dòng như

$streamContext = stream_context_create([ 
     'ssl' => [ 
      'verify_peer'  => true, 
      'verify_peer_name' => true, 
      'cafile'   => '/path/to/bundle/entrust_2048_ca.cer', 
     ] 
    ]); 

The full explanation and links are here

3

thêm

stream_context_set_option($ctx, 'ssl', 'verify_peer', false);

mà đánh bại máy chủ xác nhận . Tín dụng @One Trong một triệu ứng dụng trong một nhận xét ở trên.

5

Update để hệ điều hành MacOS sierra 10.12.5

xin vui lòng thêm

stream_context_set_option($ctx, 'ssl', 'verify_peer', false); 

Vấn đề là ở mới Phiên bản PHP trong hệ điều hành MacOS Sierra

Các vấn đề liên quan