Sto provando a scrivere uno script PHP utilizzando cURL che può autorizzare un utente attraverso una pagina che utilizza un certificato SSL, oltre a nome utente e password, e non riesco a ottenere passato lo stadio cert SSL.Errore nell'uso di PHP cURL con i certificati SSL
In questo caso, curl_setopt($handle, CURLOPT_VERIFYPEER, 0)
purtroppo non è un'opzione. Il certificato è una parte necessaria dell'autenticazione, altrimenti viene visualizzato l'errore menzionato in this other similar SO post.
Ho provato un paio di riga di comando viene eseguito con l'arricciatura:
> curl --url https://website
Questo restituisce l'errore (60) SLL certificate problem
. Se ho regolare il comando per includere l'opzione --cacert
:
> curl --url https://website --cacert /path/to/servercert.cer
funziona bene; il sito Web auth viene restituito.
Tuttavia, ho provato il seguente codice PHP:
$handle = curl_init();
$options = array(
CURLOPT_RETURNTRANSFER => false,
CURLOPT_HEADER => true,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_SSL_VERIFYHOST => '0',
CURLOPT_SSL_VERIFYPEER => '1',
CURLOPT_CAINFO => '/path/to/servercert.cer',
CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
CURLOPT_VERBOSE => true,
CURLOPT_URL => 'https://website'
);
curl_setopt_array($handle, $options);
curl_exec($handle);
if (curl_errno($handle)) {
echo 'Error: ' . curl_error($handle);
}
curl_close($handle);
avrei pensato che il codice è stato sostanzialmente in linea con i comandi di shell, ma invece ho salutato con il seguente messaggio di errore:
Error: error setting certificate verify locations: CAfile: /path/to/servercert.cer CApath: none
ho letto tutta la letteratura che posso trovare (in particolare su php.net e curl.haxx) e non riesco a trovare nulla che risolve questo problema. Eventuali suggerimenti?
MODIFICA: Ho provato chmod 777 servercert.cer
senza successo. Tuttavia, nell'esecuzione dello script PHP con il codice precedente dalla riga di comando anziché il browser tramite php test.php
, funziona perfettamente. Qualche spiegazione del perché non funziona nel browser?
EDIT 2: Queste dritte downvotes sulle uniche anime abbastanza coraggiose da rispondere a questa domanda stanno invecchiando. O contribuire con qualcosa di significativo o trasmetterlo, per favore.
PHP ha sicuramente il permesso di leggere quel file? Prova a eseguire lo script dalla riga di comando: php my.php – Greg
Strano! L'ho provato come hai detto tu, e ha funzionato perfettamente! Perché dovrebbe funzionare dalla riga di comando, ma non dal browser? – Magsol
http://serverfault.com/questions/121768/curl-or-ssl-problems-how-to-solve/297484#297484 –