In breve: WordPress cURL error 60 significa che il client HTTP usato da PHP non riesce a verificare il certificato del server remoto. Individua l’URL chiamato, controlla corrispondenza del nome host, validità e catena TLS, confronta browser, curl CLI e WordPress, quindi verifica orologio, proxy e bundle CA. Non disattivare la verifica SSL in produzione.
Indice dei contenuti
WordPress cURL error 60: che cosa significa
WordPress usa la propria HTTP API per contattare aggiornamenti, licenze, webhook e servizi esterni. Quando il trasporto cURL riceve un certificato che non riesce a collegare a un’autorità attendibile, restituisce l’errore 60, spesso accompagnato da messaggi come unable to get local issuer certificate, self signed certificate o certificate has expired.
L’errore descrive la verifica eseguita dal client, non identifica da solo il componente da correggere. Il server remoto può inviare una catena incompleta; il certificato può non includere il nome richiesto; il trust store usato da PHP può essere obsoleto; un proxy può sostituire il certificato; la data di sistema può rendere non valido un certificato altrimenti corretto.

Identificare URL e client coinvolto
- Copia il messaggio completo e individua l’host remoto. Se l’URL non è visibile, attiva per breve tempo il log del plugin in staging o usa gli strumenti diagnostici previsti.
- Annota data, ora, fuso, operazione che genera l’errore e versione del plugin.
- Verifica se fallisce una sola integrazione o ogni richiesta HTTPS di WordPress.
- Riprova una volta dalla stessa funzione; non creare una raffica di webhook, ordini o chiamate API.
- Controlla
wp-content/debug.loge log PHP, eliminando token e dati personali dalle copie condivise.
Il certificato da analizzare è quello dell’host effettivamente chiamato dopo DNS, redirect e proxy. Se un endpoint reindirizza a un dominio differente, la verifica riguarda anche il nuovo hostname.
Controllare hostname e catena TLS
curl -Iv https://api.esempio.it/
openssl s_client \
-connect api.esempio.it:443 \
-servername api.esempio.it \
-showcerts < /dev/nullEsegui i test dal server WordPress quando sei autorizzato, perché rete e trust store del computer locale possono essere diversi. Controlla Subject Alternative Name, date notBefore/notAfter, issuer e certificati intermedi presentati. L’opzione SNI -servername è necessaria per verificare il certificato del virtual host corretto.
Non usare curl -k come prova di validità: dimostra soltanto che la connessione riesce ignorando l’autenticità del certificato. Se con verifica attiva fallisce e con -k riesce, hai confermato un problema di trust o identità da correggere.
Confrontare browser, cURL, PHP e WordPress
| Client | Trust store/percorso | Che cosa dimostra |
|---|---|---|
| Browser locale | Sistema o store del browser, rete locale | Esperienza dell’utente, non il server WordPress |
| curl CLI sul server | Build e CA configurate per curl | Catena vista dal server via shell |
| PHP cURL | curl.cainfo o store della build PHP | Ambiente vicino a WordPress |
| WordPress HTTP API | Trasporto, bundle e filtri WordPress | Percorso applicativo reale |
Un browser verde non esclude un intermedio mancante: può averlo memorizzato o recuperato. Se curl CLI funziona ma PHP fallisce, confronta versioni, php.ini caricato, curl.cainfo, openssl.cafile e bundle incluso da WordPress.

Controllare orologio, CA bundle e proxy
Orologio di sistema
Verifica data, ora e sincronizzazione NTP. Un orologio fuori intervallo può far apparire il certificato non ancora valido o scaduto. Correggere l’orario richiede privilegi di sistema e va eseguito secondo la gestione del server.
Bundle CA
Aggiorna sistema operativo, pacchetto ca-certificates, PHP/cURL e WordPress. Non scaricare un file CA da fonti casuali e non sostituire globalmente il bundle senza backup. Nel PHP Selector assicurati che il percorso configurato esista e sia leggibile dalla versione PHP realmente usata dal sito.
Proxy e ispezione HTTPS
Un proxy aziendale o software di sicurezza può presentare un certificato firmato da una CA privata. La CA va distribuita attraverso il processo autorizzato soltanto agli ambienti che devono fidarsi del proxy; non importare il certificato del singolo sito come root globale.
Correggere senza disattivare SSL
- Catena remota incompleta: installa sul server remoto certificato e intermedi corretti.
- Hostname errato: usa l’endpoint previsto o emetti un certificato che includa quel nome.
- CA obsolete: aggiorna trust store e componenti, poi riavvia soltanto i servizi necessari.
- Certificato self-signed intenzionale: usa una CA privata gestita e distribuiscine il root, non
sslverify=false. - Proxy: correggi esclusioni o trust della CA aziendale secondo policy.
Filtri WordPress come https_ssl_verify o argomenti sslverify impostati a false abbassano la sicurezza e possono esporre token, aggiornamenti o dati a un attacco man-in-the-middle. Rimuovili dopo qualsiasi test e non inserirli in un fix permanente.
Verificare da WordPress
Esegui la stessa operazione che falliva e, se puoi usare WP-CLI in sicurezza, prova la HTTP API senza stampare segreti:
wp eval '$r=wp_remote_head("https://api.esempio.it/");
if (is_wp_error($r)) { echo $r->get_error_message(); }
else { echo wp_remote_retrieve_response_code($r); }'- La risposta arriva senza errore 60 e con il codice HTTP previsto.
- La catena verifica con il nome host corretto e senza opzioni insecure.
- Il test riesce sia dal client di sistema sia dall’ambiente PHP usato dal sito.
- Non restano log con token, header Authorization o dati personali.
Errori da evitare
- Disattivare globalmente la verifica SSL.
- Correggere il certificato del sito locale quando l’URL fallito è un’API remota.
- Concludere che la catena sia valida perché funziona nel browser del proprio computer.
- Modificare
php.inidi una versione PHP diversa da quella del sito. - Aggiungere un certificato leaf al trust store come se fosse una CA root.
Guide Xlogic correlate
Domande frequenti
Che cosa significa cURL error 60 in WordPress?
Il client HTTP non riesce a verificare il certificato presentato dal server remoto rispetto al nome host e alle autorità di certificazione considerate attendibili.
Posso impostare sslverify su false?
Non come soluzione di produzione. Disattivare la verifica elimina un controllo essenziale contro certificati falsi o connessioni intercettate e nasconde la causa reale.
Perché il sito si apre nel browser ma WordPress fallisce?
Browser e PHP possono usare bundle CA diversi, seguire un proxy differente o ricevere una catena differente. Confronta la stessa URL dallo stesso server e dallo stesso ambiente PHP.
L’errore riguarda il certificato del mio sito o quello remoto?
Dipende dall’URL che WordPress sta chiamando. Individua l’host nel messaggio o nel log: il certificato da verificare è quello presentato durante quella specifica connessione in uscita.
Conclusione
cURL error 60 va risolto ripristinando una catena di fiducia valida per il client che esegue la richiesta. Identificare l’host, confrontare i diversi trust store e correggere certificato, CA bundle, orologio o proxy mantiene HTTPS sicuro e rende la soluzione verificabile.
Fonti tecniche
- curl — SSL CA Certificates
- WordPress Developer Resources — Making HTTP requests
- PHP Manual — cURL configuration