Come ignorare gli errori dei certificati SSL con cURL: Una guida passo passo

Commenti: 0

Durante l'esecuzione di richieste HTTP con cURL, a volte si verifica un problema di verifica dei certificati SSL. Ciò può accadere quando si utilizza un certificato del server autofirmato o scaduto. In tali circostanze, cURL nega per impostazione predefinita la connessione per salvaguardare l'utente da eventuali rischi. Tuttavia, questo potrebbe ostacolare il processo durante il test delle API, il lavoro su reti chiuse o l'utilizzo di servizi locali. Ecco perché è necessario scoprire in quali circostanze cURL ignora SSL e come implementarlo.

Questo articolo spiegherà come ignorare i certificati SSL in cURL, i comandi specifici che devono essere eseguiti e i possibili problemi legati alla sicurezza.

unnamed.jpg

Che cosa sono cURL e SSL?

cURL (Client URL) è un progetto software che fornisce una linea di comando e una libreria per trasferire dati utilizzando vari protocolli. Questo strumento è molto utile per automatizzare le richieste, i test API o il recupero di informazioni da varie risorse web, perché funziona con una moltitudine di tipi di rete.

SSL (Secure Sockets Layer) è una forma di tecnologia di crittografia che protegge la trasmissione di dati su Internet. Il certificato è un documento che dimostra l'autenticità di un determinato sito web e stabilisce una connessione sicura tra l'utente e il server. Certificati di server autofirmati, scaduti o non validi causano blocchi durante l'utilizzo di cURL.

Per evitare tali problemi, è meglio disabilitare SSL su cURL, in modo che l'esecuzione di richieste cURL abbia un tasso di successo più elevato. Questo metodo di test è molto utile, ma può essere pericoloso dal punto di vista della sicurezza.

cURL, curl o Curl: Qual è la differenza?

Il nome ufficiale dello strumento è cURL, la prima lettera della parola è minuscola e le altre sono maiuscole. Nei documenti, negli articoli e nei codici si trovano diverse altre forme:

  • curl (tutto minuscolo) - Questo è il modo in cui la maggior parte degli sviluppatori tende a scriverlo nei codici e nelle righe di comando.
  • Curl (C maiuscola) - Questo è talvolta usato in documenti non ufficiali, ma non è corretto.

Indipendentemente dall'ortografia, cURL è sempre cURL. È uno strumento multipiattaforma e a riga di comando per trasferire dati con la sintassi degli URL. La maggior parte delle persone che si occupano di sviluppo web, amministrazione di sistema e DevOps lo utilizzano per effettuare richieste HTTP, testare API ed eseguire interazioni di automazione del server.

Perché disattivare la verifica SSL?

Normalmente, l'utilità di trasferimento dei dati convalida i certificati che appaiono sullo schermo dell'utente per contrastare siti falsi e attacchi. Esistono tuttavia scenari in cui cURL ignora la verifica dei certificati. Vediamo quando si verificano questi casi:

  • Certificati autoemessi utilizzati con server di prova o locali. Durante il test di API o applicazioni, gli sviluppatori spesso creano certificati autofirmati che non sono approvati da autorità di certificazione (CA) ufficiali.
  • Accesso dei dipendenti ai servizi aziendali interni. I server interni di un'organizzazione hanno solitamente certificati non affidabili. Quando l'accesso automatico a tali risorse è obbligatorio, la disattivazione del controllo dei certificati è una soluzione temporanea ottimale.
  • Alcuni siti hanno un certificato del server scaduto o non valido. Se è fondamentale estrarre informazioni da una risorsa di questo tipo, è possibile disattivare temporaneamente la convalida senza che l'utente incontri l'errore specifico del certificato. In questo caso cURL ignora gli errori SSL e tutto funziona bene.
  • La disattivazione del controllo aiuta a evitare fallimenti negli script che richiedono l'automazione delle richieste di rete. Quando uno script invia costantemente richieste a un server che ha un certificato non corretto, il controllo deve essere disabilitato.

Nonostante il controllo sia un fattore vitale, disattivarlo completamente può comportare problemi e rischi. Ne parleremo in seguito.

Rischi per la sicurezza della disattivazione di SSL

Quando cURL ignora i certificati, significa che la connessione può essere sfruttata attraverso vari attacchi alla sicurezza, e questo è particolarmente importante quando sono coinvolte informazioni sensibili come password, token o persino dati di pagamento.

Minacce principali:

  • Man In The Middle Attack (MITM) - una tecnica in cui le informazioni tra l'utente e il server vengono intercettate e i dati vengono alterati o sostituiti. Il rischio è ancora maggiore quando non c'è nessuno che possa verificare, perché diventa troppo facile implementare attacchi dannosi. Ad esempio, una pagina di login può essere sostituita con una falsa, in modo che l'aggressore possa facilmente raccogliere le credenziali.
  • cURL non è in grado di verificare il certificato del server, invalidandolo. In questo modo, non c'è modo di garantire che il nodo desiderato sia quello a cui ci si sta connettendo e permette di sostituire i siti spacciandoli per risorse affidabili.
  • Se durante i test la verifica viene disabilitata e il codice viene portato nell'ambiente di produzione, può aumentare la possibilità di perdite o addirittura di attacchi brute force che compromettono informazioni riservate.

Se è necessario che cURL ignori gli errori SSL, allora è fondamentale visualizzare i certificati autofirmati:

  • Bypassare la verifica solo in un ambiente di test ed evitarla in produzione;
  • Non trasmettere informazioni riservate attraverso una connessione non criptata;
  • Aggiungere manualmente il certificato autofirmato a quello attendibile;
  • Monitorare il codice, escludendo gli errori di configurazione, per garantire che la verifica rimanga nel codice di produzione.

Nel prossimo blocco, analizzeremo in dettaglio i processi che vengono eseguiti nella riga di comando per disabilitare la verifica dei certificati.

Come bypassare gli errori SSL con cURL

Per far sì che cURL ignori SSL, è necessario includere parametri specifici che sospendano la verifica dell'autenticazione. Come già detto, tali pratiche possono essere utilizzate solo in un ambiente adeguatamente protetto.

Il metodo più efficace per mitigare un errore di certificato del sito non valido è quello di configurare manualmente uno spoof di verifica temporaneo. Questo può essere fatto con i seguenti parametri:

  • -k o --insecure—per la connessione a un sito in cui il certificato del server risulta non valido.
  • --cacert—per definire il percorso in cui è memorizzato il file del certificato utente.

Ecco come si può creare un esempio di chiamata cURL che ignora la verifica del certificato:


curl -k https://example.com

In questo modo la chiamata cURL potrà essere eseguita anche con un certificato del server scaduto.

Se si desidera inviare dati (ad esempio in una richiesta POST):


curl -k -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "param=value" https://example.com/api

Per la massima sicurezza, si dovrebbe selezionare direttamente la directory in cui si trova il file.


curl --cacert /path/to/cert.pem https://example.com

Disabilitare la verifica SSL nello script

Se la richiesta è destinata a essere automatizzata attraverso una riga di comando e la presenza dell'utente non dovrebbe essere necessaria, è utile disabilitare i controlli dei certificati in questi scenari.

Ecco un esempio in Bash di come cURL ignora SSL:


#!/bin/bash
URL="https://example.com"
DATA=$(curl -k $URL)
echo "Server response: $DATA"

Con Python, è possibile utilizzare il modulo requests con verify impostato su False:


import requests
url = "https://example.com"
response = requests.get(url, verify=False)
print(response.text)

Quando si esegue questo comando, Python fornisce un avviso relativo a una connessione non sicura. Inoltre, dovrete assicurarvi di scrivere del codice per disabilitare gli avvisi che si presentano nel caso in cui il sito abbia un certificato del server non valido:


import requests import urllib3 

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) 

url = "https://example.com"
response = requests.get(url, verify=False)
print(response.text)

E ora il PHP con cURL:


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

La tabella seguente elenca i metodi più comuni per ignorare il controllo SSL, il loro utilizzo e i possibili rischi.

Metodo Comando / Parametro Quando utilizzare I rischi
Disabilitazione completa di SSL e verifica dell'hostname curl -k / --insecure Test di API, servizi locali Alto rischio di MITM
Utilizzo di un certificato personalizzato curl --cacert /path/to/cert.pem Nel caso in cui si disponga di un proprio certificato Più sicuro, ma richiede una configurazione
Disabilitare solo SSL nel codice CURLOPT_SSL_VERIFYPEER=false Test temporanei Pericoloso se rimane in produzione

Conclusione

Certificati di server non funzionanti creano più di un problema quando vengono utilizzati con cURL. I certificati garantiscono la sicurezza degli utenti durante il trasferimento dei dati. Pertanto, la disabilitazione della verifica è l'ultima risorsa quando si riscontra un errore nel debug di cURL. In base alla causa dell'errore, ci sono altri approcci meno estremi, come l'aggiornamento del documento, l'aggiunta alla regione attendibile o il semplice scambio con quella corretta.

Senza il controllo SSL, la connessione sarebbe malsana e facilmente abusabile da altri utenti. Questo approccio è accettabile solo in ambienti controllati, come quando si effettua un test o quando il servizio è esterno. In circostanze normali, quando viene presentato un certificato del server non valido, è fondamentale che questa clausola non venga impostata nel codice di lavoro, poiché si verificherebbero mascheramenti dei dati e altre falle nella sicurezza.

Commenti:

0 Commenti