2009-11-20 6 views
12

Tôi đang sử dụng giấy chứng nhận và tư nhân chínhstream_socket_client không thể kết nối (kết nối timed out)

$ctx = stream_context_create(); 
stream_context_set_option($ctx, 'ssl', 'local_cert', $certfile); 
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass); 
$fp = stream_socket_client('ssl://gateway.xyz.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); 

nó chạy trong XAMPP Server nội bộ của tôi, nhưng nó không làm việc trong các máy chủ bên ngoài:

Cảnh báo: stream_socket_client() [function.stream-socket-client]: không thể kết nối với ssl: //gateway.sandbox.push.apple.com: 2195 (Kết nối hết thời gian chờ) trong/home/biranchi/public_html/push .php trên dòng 42

Không thành công d để kết nối 110

Lỗi là gì? Tôi có cần thay đổi một số cài đặt trong máy chủ không?

Trả lời

18

Tôi đã khắc phục sự cố bằng cách mở cổng 2195 trên máy chủ sản xuất. Bạn có thể xác minh bằng cách làm theo lệnh $ telnet gateway.push.apple.com 2195

-bash-3.2# telnet gateway.push.apple.com 2195 

Trying 17.149.38.141... 
Connected to gateway.push.apple.com (17.149.38.141). 
Escape character is '^]'. 
Connection closed by foreign host. 
+0

hey @palaniraja, tôi sử dụng LittleSnitch trên Mac và tôi đã bật cổng 2195 cả khi đến và đi. Nó vẫn đang đóng cửa sau một thời gian ........ bất kỳ đề nghị? –

+0

để bạn đang thử nghiệm tập lệnh với máy của mình? máy chủ? có thể thử tắt littlesnitch trong một thời gian. Tôi đoán Apple ga nếu bạn có một kết nối mở mà không cần đẩy bất kỳ dữ liệu (nhàn rỗi). – palaniraja

+1

i am thử nghiệm từ localhost ....... Trong ít snitch, tôi đã kích hoạt SILENT MODE> Cho phép kết nối thử ............ chưa may mắn ....... chính xác là gì telnet sẽ hiển thị nếu nó không kết nối với cổng? trong trường hợp của tôi, nó cho thấy tối đa 'Escape character is '^]'.' Sau đó ở lại một thời gian ... Sau khoảng một hoặc hai phút, nó cho thấy 'Kết nối đóng bởi máy chủ nước ngoài.' Đó có phải là bình thường không? –

4

Kiểm tra cài đặt tường lửa cá nhân của bạn và đảm bảo bạn không chặn cài đặt này. Thử tắt tường lửa.

Ngoài ra, một số API như yêu cầu đến từ miền thực tế chứ không phải máy tính để bàn. Tôi không có lý do để tin rằng Apple làm việc theo cách này, nhưng đó là một cái gì đó để kiểm tra cũng.

Cũng đảm bảo và ping gateway.sandbox.push.apple.com và đảm bảo bạn có kết nối tốt.

1

Bạn phải thiết lập tường lửa của bạn để cho phép tất cả các khối 17.0.0.0/8 (tất cả thuộc về Apple!). Kiểm tra THIS ANSWER

Và theo Apple:

Các máy chủ APN sử dụng cân bằng tải, vì vậy các thiết bị của bạn sẽ không luôn luôn kết nối với địa chỉ IP công cộng tương tự cho thông báo. Tốt nhất là cho phép truy cập vào các cổng này trên toàn bộ khối địa chỉ 17.0.0.0/8, được gán cho Apple.

Nếu bạn đang sử dụng tường lửa CSF (như tôi), tôi khuyên bạn nên để thêm dòng này vào csf.allow file:

tcp|out|d=2195|d=17.0.0.0/8

Sử dụng này thay vì chỉ "17.0.0.0/ 8 "sẽ chỉ cho phép kết nối outbond với Apple và đặc biệt là cổng 2195. NSA sẽ không thích nó nhưng điều này chính xác hơn và an toàn hơn nhiều! ;)