PHP

Risolvere l'errore di certificato SSL di cURL su WAMP

calendar_today personTeam EGSOFT schedule2 min di lettura
info

Disclaimer: le informazioni pubblicate in questa sezione hanno finalità di pura divulgazione tecnica. EG Software S.r.l. non si assume alcuna responsabilità per un utilizzo improprio dei contenuti, né per eventuali danni diretti o indiretti derivanti dalla loro applicazione, e non garantisce l'aggiornamento, l'accuratezza o la completezza delle informazioni riportate. Prima di utilizzare in produzione codice o procedure qui descritte, verificane sempre l'adeguatezza al proprio contesto.

Su un'installazione WAMP appena configurata, una chiamata PHP con cURL verso un endpoint https:// può fallire con un errore del tipo SSL certificate problem: unable to get local issuer certificate. La causa non è un problema del server remoto, ma il fatto che a PHP manca un bundle di certificati radice attendibili con cui verificare la catena di certificazione — un bundle che le distribuzioni Linux includono di norma nel sistema operativo, mentre su Windows va procurato e indicato esplicitamente.

I tre passaggi della correzione

La sistemazione è rapida e si fa in tre passi: abilitare l'estensione OpenSSL (spesso già presente ma disattivata), scaricare il bundle di certificati radice mantenuto dal progetto curl, e indicarne il percorso a PHP.

# In php.ini (percorso tipico: C:\wamp64\bin\php\php8.x.x\php.ini)

# 1. Decommenta l'estensione OpenSSL (rimuovi il ; iniziale se presente)
extension=openssl

# 2. Scarica https://curl.se/ca/cacert.pem e salvalo, ad esempio, in:
#    C:\wamp64\bin\php\php8.x.x\extras\ssl\cacert.pem

# 3. Indica il percorso del bundle a PHP
openssl.cafile="C:\wamp64\bin\php\php8.x.x\extras\ssl\cacert.pem"

Dopo la modifica di php.ini serve un riavvio dei servizi WAMP perché il file venga riletto: un semplice refresh della pagina non basta, PHP legge php.ini solo all'avvio del processo (o del modulo Apache).

Perché succede solo su Windows/WAMP

Le distribuzioni Linux mantengono un bundle di certificati radice di sistema (tipicamente in /etc/ssl/certs), aggiornato dai pacchetti di sistema e usato di default da OpenSSL e quindi da cURL. Su Windows, PHP compilato per WAMP non ha un equivalente integrato: senza indicare esplicitamente openssl.cafile, cURL non ha modo di stabilire se il certificato presentato dal server remoto è firmato da un'autorità riconosciuta, e per prudenza rifiuta la connessione invece di procedere comunque.

Un dettaglio da non dimenticare

Il bundle cacert.pem non è "installa e dimentica": le autorità di certificazione radice cambiano nel tempo (nuove aggiunte, revoche), quindi vale la pena riscaricare periodicamente una versione aggiornata dallo stesso URL ufficiale e sostituire il file esistente, specialmente se in futuro una chiamata che prima funzionava inizia a fallire di nuovo con lo stesso errore.

Altri articoli su PHP grid_viewTutte le tematiche
Scrivici su WhatsApp