Uso cURL per verificare le transazioni PayPal in un plug-in WordPress. Recentemente ho iniziato a ricevere segnalazioni di bug su utente che non è in grado di completare il processo di acquisto perché la transazione non può essere verificata. Ho rintracciato l'errore:L'utilizzo di CURLOPT_CAINFO con il gruppo di CA aggiornato causa la verifica del certificato non riuscita
SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
ho trovato un sacco di domande qui in StackOverflow relative allo stesso problema, la maggior parte di loro ha detto che la soluzione era quello di fornire un fascio di CA utilizzando l'opzione CURLOPT_CAINFO
di cURL. Ho scaricato e attualmente spedisco con il plug-in la versione più recente (convertita il 28 giugno 2012) di http://curl.haxx.se/ca/cacert.pem. Questo ha risolto la maggior parte dei problemi che avevo ricevuto.
Il problema ora è che ho appena ricevuto un altro rapporto sui pagamenti non riusciti e l'errore era lo stesso: SSL certificate problem, verify that the CA cert is OK.
. La parte interessante è che ora la soluzione era rimuovere l'opzione . Mi chiedo se ci sia una spiegazione per questo. Pensavo che l'utilizzo di un pacchetto di CA aggiornato, come quello scaricato, fosse una soluzione generale, ma sembra essere altrimenti.
Quale sarebbe una soluzione generale per questo tipo di problema? e cosa potrebbe spiegare che l'utilizzo del pacchetto CA aggiornato causa problemi con i certificati SSL, invece di risolverli ?.
Questa è la configuartion cURL:
<?php
$ch = curl_init("https://www.paypal.com/cgi-bin/webscr");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cacert.pem');
curl_setopt($ch, CURLOPT_POSTFIELDS, $content);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
?>
UPDATE: Il certificato per www.paypal.com è firmato da VeriSign. La Gerarchia Certificate (come mostrato in Firefox) è:
- VeriSign classe 3 Public Certification Authority primario - G5
- VeriSign Classe 3 Extended Validation SSL CA
- www.paypal.com
Posso confermare il certificato per l'Autorità di certificazione primaria pubblica di Classe 3 VeriSign - G5 è incluso nella versione che utilizzo di http://curl.haxx.se/ca/cacert.pem.
Grazie per il vostro aiuto.
(Hai ancora questo problema?) Solo per restringere la richiesta: ti connetti a PayPal dallo stesso host per ogni richiesta? Significato, lo stesso codice sorgente, dalla stessa macchina, occasionalmente genera questo errore? –
Ci scusiamo per la risposta in ritardo. Il codice sopra fa parte di un plugin per WordPress. Stavo vedendo risultati diversi con lo stesso codice sorgente, ma con macchine diverse. Alcuni utenti hanno segnalato problemi durante l'utilizzo del pacchetto di certificati personalizzati e altri hanno segnalato problemi durante l'utilizzo del pacchetto predefinito. La mia soluzione era di supportare entrambi gli scenari: provare con il pacchetto personalizzato e ripetere la richiesta senza di esso, in caso di errore. –
Problema interessante. La soluzione che descrivi sembra la tua migliore scommessa. Senza tracciare la versione php + curl di ogni utente sarebbe difficile isolarne la causa: è un problema di permessi, un'API legacy, un bug storico di php/curl, un host configurato male? Troppi fattori Basti pensare che preferire un bundle CA personalizzato aggiornato è una buona pratica e dovrebbe essere affidabile per ambienti php moderni ben configurati. –