2014-04-04 10 views
7

Ho letto tutti gli altri post su questo problema, ma ancora inutile.Errore ios nofitcation PHP: stream_socket_client(): operazione SSL non riuscita con il codice 1

Sono consapevole che questo problema può generare certificati errati, tuttavia ho verificato che il mio certificato e la mia chiave fossero validi prima di combinarli in un singolo file .pem che ho inserito nel server.

Non ho assolutamente idea di come risolvere il problema in seguito, quindi qualsiasi consiglio è molto apprezzato. Ecco il mio codice server

$ctx = stream_context_create(); 
     stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 
     stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 

     // Open a connection to the APNS server 
     $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 

P.S. il file ck.pem si trova nella stessa directory con le autorizzazioni di lettura impostate.

Ecco il messaggio di errore completo:

Warning: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in /var/www/site/pages/Callback.php on line 3515 Warning: stream_socket_client(): Failed to enable crypto in /var/www/site/pages/Callback.php on line 3515 Warning: stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /var/www/site/pages/Callback.php on line 3515 Failed to connect BECUSE OF ERROR: 0 
UPDATE 
It does seem to be a certificate validation issue after all but Im not sure why, when I check the ssl against APNS I get this error: 
depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C 
verify error:num=20:unable to get local issuer certificate 
verify return:0 
--- 
Certificate chain 
0 s:/C=US/ST=California/L=Cupertino/O=Apple Inc./OU=iTMS Engineering/CN=gateway.sandbox.push.apple.com 
    i:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C 
1 s:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C 
    i:/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) 
--- 
No client certificate CA names sent 
+0

ho il sospetto che il server non ha il certificato Entrust CA, in modo non può verificare il server APNS cert - https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/Communicati ngWIthAPS.html. Puoi scaricarlo qui http://www.entrust.net – Paulw11

+0

La documentazione per stream_context dice che non verifica il peer di default (questo è un cattivo valore!), Quindi potrebbe non essere il tuo problema, ma puoi usa l'opzione cafile per specificare il certificato CA http://www.php.net/manual/en/context.ssl.php – Paulw11

+1

Proverò entrambi questi suggerimenti grazie! – Aggressor

risposta

4

Scarica entrust_2048_ca.cer

Aggiungi percorso completo entrust_2048_ca.cer

/var/www/site/pages/entrust_2048_ca.cer 
+0

Come aggiungere utilizzare questa soluzione in un server APNS? Ho un file PHP, chiamato push.php. Questa spinta viene attivata quando si utilizza l'URL "localhost/folderPush/push.php. Ho cambiato la versione del mio Xampp e utilizzando la nuova versione, mi è stato restituito lo stesso errore. –

+0

@TiagoAmaral questa domanda era per CLI PHP ma se si è eseguendo localhost puoi farlo nel tuo browser – meda

Problemi correlati