PHP CURL CURLOPT_SSL_VERIFYPEER ignorato


117

Per qualche motivo non sono in grado di utilizzare CURL con HTTPS. Tutto funzionava bene fino a quando non ho eseguito l'aggiornamento delle librerie curl. Ora sto riscontrando questa risposta quando provo a eseguire richieste CURL: Problema con il certificato CA SSL (percorso? Diritti di accesso?)

Seguendo i suggerimenti pubblicati qui su problemi correlati, ho provato a fare quanto segue:

  • Disabilita la verifica per host e peer

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
  • Abilita CURLOPT_SSL_VERIFYPEERe punta a cacert.pem scaricato da http://curl.haxx.se/docs/caextract.html

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
  • Ho anche provato a fare la stessa cosa con positiveSSL.ca-bundle che è stato fornito come certificato CA del bundle per il server a cui sto cercando di connettermi.

  • Modifica le impostazioni di php ini con curl.cainfo=cacert.pem(file nella stessa directory e accessibile da apache)

  • Rinomina /etc/pki/nssdbin/etc/pki/nssdb.old

Sfortunatamente nessuno dei precedenti è in grado di risolvere il mio problema e ricevo costantemente Problemi con il messaggio SSL CA cert (percorso? Diritti di accesso?).

E non ho bisogno di questa verifica in primo luogo (sono a conoscenza di problemi di sicurezza).

Qualcuno ha altri suggerimenti?

AGGIORNARE

Dopo l'aggiornamento alle ultime librerie e il riavvio dell'intera scatola, non solo apache che stavo facendo, sembra che ora funzioni di nuovo !!!


1
La libreria Curl aggiornata è stata compilata con uno stack SSL diverso (GnuTLS vs OpenSSL, forse)?
Bruno

Non penso sia così. Il sistema è Fedora 16 ed era davvero il caso dell'aggiornamento yum. La cosa più fastidiosa è che non ho bisogno / voglio l'intera convalida e non riesco a disabilitarla semplicemente.
Greg

Se stai mirando a utilizzare HTTPS per la sicurezza, vorrai sempre disporre di questo processo di convalida.
Bruno

Ne sono consapevole, tuttavia il mio caso d'uso qui rende tutto un po 'ridondante. Inoltre, ho aggiornato curl all'ultimo disponibile e php a 5.4. Ora, il messaggio di errore è sparito, ma non ricevo alcun cotnent da curl :)
Greg

Ah, ora ottengo da qualche parte la funzione curl_errno che riporta lo stato 77 che secondo il manuale è CURLE_SSL_CACERT_BADFILE.
Greg

Risposte:


240

Secondo la documentazione: per verificare il certificato host o peer è necessario specificare certificati alternativi con l' CURLOPT_CAINFOopzione oppure è possibile specificare una directory dei certificati con l' CURLOPT_CAPATHopzione.

Guarda anche CURLOPT_SSL_VERIFYHOST:

  • 1 per verificare l'esistenza di un nome comune nel certificato peer SSL.
  • 2 per verificare l'esistenza di un nome comune e verificare anche che corrisponda al nome host fornito.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

5
Disattivare la verifica SSL praticamente rimuove comunque tutta la sicurezza di SSL. Dovresti invece correggere la tua configurazione PHP.
Scopey

7
@Scopey, ma a volte potrebbe essere necessario su ambienti di sviluppo locale con certificati autofirmati. Quindi probabilmente non ha senso in ambienti non pubblici, ma come promemoria è sempre meglio avere qualche avvertimento nel registro (ad esempio SSL verification disabled)
Ivan Borshchov

2

Abbiamo avuto lo stesso problema su una macchina CentOS7. La disabilitazione di VERIFYHOST VERIFYPEERnon ha risolto il problema, non abbiamo più avuto l'errore cURL ma la risposta non era ancora valida. Anche l'esecuzione di un wgetcollegamento allo stesso collegamento di cURL ha generato un errore del certificato.

-> La nostra soluzione era anche riavviare il VPS, questo lo ha risolto e siamo stati in grado di completare nuovamente la richiesta.

Per noi questo sembrava essere un problema di danneggiamento della memoria. Il riavvio del VPS ha ricaricato nuovamente la libreria in memoria e ora funziona. Quindi, se la soluzione di cui sopra @clovernon funziona, prova a riavviare la macchina.


Assicurati che non sia intermittente. Ho avuto un problema con PayPal e la verifica tra pari in cui a volte funzionava, a volte no. Sembrava casuale. Impostazione esplicita del percorso cafile e dire a curl dove è stato risolto il problema.
Neil Davis
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.