2016-04-04 15 views
2

Bu tür bir şeyde çok yeniyim ve yanlış yaptığımdan emin değilim.SSL handshake'ı gateway.push.apple.com ile tamamlayamadım perl kullanarak IO :: Soket :: SSL

İçinde Mojolicious uygulaması, Apple Push Bildirim SSL Soketine bağlanmak için mücadele ediyorum. Bir uygulamaya push bildirimi göndermek istiyorum.

ayıklama Bilgi:

DEBUG: .../IO/Socket/SSL.pm:2700: new ctx 138351632 
DEBUG: .../IO/Socket/SSL.pm:612: socket not yet connected 
DEBUG: .../IO/Socket/SSL.pm:614: socket connected 
DEBUG: .../IO/Socket/SSL.pm:636: ssl handshake not started 
DEBUG: .../IO/Socket/SSL.pm:669: using SNI with hostname gateway.push.apple.com 
DEBUG: .../IO/Socket/SSL.pm:704: request OCSP stapling 
DEBUG: .../IO/Socket/SSL.pm:736: call Net::SSLeay::connect 
DEBUG: .../IO/Socket/SSL.pm:2601: did not get stapled OCSP response 
DEBUG: .../IO/Socket/SSL.pm:2554: ok=0 [1] /O=Entrust.net/OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Certification  Authority (2048)/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C 
DEBUG: .../IO/Socket/SSL.pm:739: done Net::SSLeay::connect -> -1 
DEBUG: .../IO/Socket/SSL.pm:742: SSL connect attempt failed 
DEBUG: .../IO/Socket/SSL.pm:742: local error: SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
DEBUG: .../IO/Socket/SSL.pm:745: fatal SSL error: SSL connect attempt failed error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 
DEBUG: ...5.18/IO/Socket.pm:48: ignoring less severe local error 'IO::Socket::IP configuration failed', keep 'SSL connect attempt failed error:14090086:SSL  routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed' 
DEBUG: .../IO/Socket/SSL.pm:2733: free ctx 138351632 open=138351632 
DEBUG: .../IO/Socket/SSL.pm:2738: free ctx 138351632 callback 
DEBUG: .../IO/Socket/SSL.pm:2745: OK free ctx 138351632 

Kod kesik bit:

use IO::Socket::SSL qw(debug3); 

my $cl = IO::Socket::SSL->new(
    PeerHost => 'gateway.push.apple.com', 
    # PeerHost => 'gateway.sandbox.push.apple.com', 
    PeerPort => '2195', 
    SSL_verify_mode => SSL_VERIFY_PEER, 
    SSL_ca_file => '/var/www/foo/bar/cert/ck.pem', 
); 

ben nereye gitmek ya da buradan ne yapacağını emin değilim?

+0

sorunu. ssl sertifikasının geçerli olup olmadığını kontrol etmek ister misiniz? –

+2

Tahminimce,/var/www/foo/bar/cert/ck.pem' sunucudan aldığınız sertifikayı imzalayan CA'yı içermiyor. Ancak bu dosyanın içeriğini bilmeden söylemek zor. –

+1

Bunun dışında, bu hizmetin SSL_cert_file ve SSL_key_file ile belirtmeniz gereken bir istemci sertifikasına ihtiyacı olduğunu düşünüyorum. –

cevap

1

Bunu çözdüm: Yanlış geçiş deyimini kullanıyordum! Ben Net::APNS

use Net::APNS; 

my %settings = (
    cert => "$Cert_file", 
    key => "$Cert_key_file", 
    passwd => "$passphrase", 
); 

if(my $Notifier = Net::APNS->new->notify(\%settings)) { 
    $Notifier->write({ 
    devicetoken => "$device_token", 
    message  => "$message", 
    sound  => 'default', 
    badge  => 1 
    }); 

    return 1 if defined($Notifier) and ref($Notifier) eq "Net::APNS::Notification"; 
} 

tüm giriş için teşekkür ederiz çok daha basit perl modülünü uygulamak başardı! Sunucu tarafında ssl sertifikanızla ilgili