Guida alla configurazione curl SSL, TLS e Proxy
Configurare certificati HTTPS, versioni TLS, proxy e risoluzione DNS personalizzata in curl è essenziale per la comunicazione API sicura, le pipeline CI/CD e il debug dei problemi di rete. Questa guida copre ogni flag SSL, TLS, proxy e di rete — dalla disabilitazione dei controlli certificato con -k per lo sviluppo locale alla configurazione del mutual TLS con --cert e all'instradamento del traffico attraverso proxy SOCKS5. Ogni opzione include una spiegazione chiara, considerazioni sulla sicurezza e un esempio pronto da copiare.
Riferimento rapido flag SSL e Proxy
Consenti connessioni non sicure — salta tutta la verifica SSL
Verifica il certificato del server contro un bundle CA specifico
Fornisci un certificato client per l'autenticazione mutual TLS
Fornisci il file della chiave privata per il certificato client
Usa TLS versione 1.2 o superiore per la connessione
Usa TLS versione 1.3 o superiore per la connessione
Richiedi SSL/TLS per la connessione (fallisci se non disponibile)
Specifica quali cipher SSL usare per la connessione
Specifica il tipo di certificato client (PEM, DER, ENG, P12)
Fissa e verifica la chiave pubblica del server (stile HPKP)
Instrada tutto il traffico attraverso il server proxy specificato
Instrada la connessione attraverso un proxy SOCKS5
Fornisci username:password per il server proxy
Lista di host che non dovrebbero passare attraverso il proxy
Proxy SOCKS5 con risoluzione DNS attraverso il proxy
Certificato CA per verificare il proxy HTTPS stesso
Mappa una specifica coppia host:port a un indirizzo IP personalizzato
Connettiti a un host:port diverso da quello specificato nell'URL
Imposta il numero di porta locale o l'intervallo per la connessione
Vincola la connessione a un'interfaccia di rete specifica
Usa server DNS personalizzati invece dei predefiniti di sistema (c-ares)
curl -k: Ignora gli errori del certificato SSL
- Cosa fa
- Il flag
-k(o--insecure) disabilita tutta la verifica dei certificati SSL/TLS. curl non controllerà se il certificato del server è firmato da una CA affidabile, se il nome host corrisponde o se il certificato è scaduto. - Quando usarlo
- Usa solo per lo sviluppo locale con certificati autofirmati o ambienti di test. Per staging/production, usa
--cacertcon il certificato CA effettivo — è più sicuro e più esplicito.
$ curl -k https://localhost:8443/api/healthNon usare mai -k in script di production o pipeline CI/CD. Disabilita tutta la validazione dei certificati, rendendo la connessione vulnerabile ad attacchi man-in-the-middle. Usa --cacert per fidarti di una CA specifica.
curl --cacert: Usa un certificato CA personalizzato
- Cosa fa
- Il flag
--cacertindica a curl di verificare il certificato SSL del server contro un file bundle CA (Certificate Authority) specifico in formato PEM, invece del trust store predefinito del sistema. - Quando usarlo
- Usa quando il tuo server utilizza un certificato firmato da una CA privata o interna che non è nel trust store di sistema. Questo è comune in ambienti aziendali, cluster Kubernetes e configurazioni Docker con PKI interna.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/datacurl --cert: Certificato client (Mutual TLS)
- Cosa fa
- Il flag
--certfornisce un certificato lato client per il mutual TLS (mTLS). Nel mTLS, sia il server che il client presentano certificati per verificare l'identità reciproca. Il file certificato deve essere in formato PEM o PKCS#12. - Quando usarlo
- Necessario quando il server richiede l'autenticazione con certificato client — comune nelle API bancarie, servizi governativi, comunicazione dispositivi IoT e architetture zero-trust. Accoppia sempre con
--keya meno che la chiave non sia incorporata nel file certificato.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: Chiave privata del certificato client
- Cosa fa
- Il flag
--keyspecifica il file della chiave privata che si accoppia con il certificato client fornito da--cert. La chiave deve corrispondere al certificato. Se la chiave è protetta da password, curl richiederà la passphrase (o usa--pass). - Quando usarlo
- Usa sempre insieme a
--cert. Se la chiave privata è già incorporata nel file certificato (comune con file PKCS#12 / .p12), puoi omettere--key.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Forza TLS 1.2 minimo
- Cosa fa
- Il flag
--tlsv1.2forza curl a usare TLS 1.2 come versione minima accettabile per l'handshake SSL/TLS. I protocolli più vecchi (TLS 1.0, 1.1, SSLv3) vengono rifiutati. - Quando usarlo
- Usa per applicare uno standard di sicurezza minimo. TLS 1.2 è richiesto per la conformità PCI-DSS ed è supportato da tutti i server moderni. La maggior parte delle build moderne di curl usa già TLS 1.2+ per default, ma questo flag lo rende esplicito.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'curl --tlsv1.3: Forza TLS 1.3 minimo
- Cosa fa
- Il flag
--tlsv1.3forza curl a usare TLS 1.3 — la versione TLS più veloce e sicura. TLS 1.3 elimina il round-trip extra nell'handshake (supporto 0-RTT) e rimuove tutte le suite di cifratura obsolete. - Quando usarlo
- Usa quando sai che il server supporta TLS 1.3 e vuoi le migliori prestazioni e sicurezza. Nota: TLS 1.3 richiede OpenSSL 1.1.1+ o una libreria TLS compatibile. Non tutti i server lo supportano ancora.
$ curl --tlsv1.3 https://modern-api.example.com/dataOpzioni SSL/TLS aggiuntive
Richiedi SSL/TLS per la connessione (fallisci se non disponibile)
Specifica quali cipher SSL usare per la connessione
Specifica il tipo di certificato client (PEM, DER, ENG, P12)
Fissa e verifica la chiave pubblica del server (stile HPKP)
curl -x: Usa un proxy HTTP/HTTPS
- Cosa fa
- Il flag
-x(o--proxy) instrada tutto il traffico curl attraverso il server proxy specificato. Il formato è[protocol://]host[:port]. Protocolli proxy supportati: HTTP, HTTPS, SOCKS4, SOCKS5. - Quando usarlo
- Usa per server proxy aziendali, debug con strumenti come Fiddler, Charles o mitmproxy, test di restrizioni geografiche, o quando l'accesso diretto a Internet non è disponibile. Puoi anche impostare le variabili d'ambiente
http_proxy/https_proxyin alternativa.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Usa un proxy SOCKS5
- Cosa fa
- Il flag
--socks5indica a curl di usare un proxy SOCKS5 per la connessione TCP. A differenza dei proxy HTTP, SOCKS5 opera a livello TCP e può gestire qualsiasi protocollo — non solo HTTP. La risoluzione DNS è locale per default; usa--socks5-hostnameper risolvere il DNS attraverso il proxy. - Quando usarlo
- Usa per tunnel SSH (
ssh -D), accesso alla rete Tor, o quando il proxy deve gestire protocolli non-HTTP. SOCKS5 supporta UDP e può opzionalmente gestire il DNS — rendendolo più flessibile dei proxy HTTP.
$ curl --socks5 localhost:1080 https://api.example.com/datacurl --proxy-user: Autenticazione proxy
- Cosa fa
- Il flag
--proxy-user(o-U) invia le credenziali di autenticazione al server proxy. Il formato èuser:password. Questo è separato dall'autenticazione del server (-u). - Quando usarlo
- Necessario quando il server proxy richiede autenticazione — comune in ambienti di rete aziendali e enterprise. Le credenziali vengono inviate al proxy, non al server di destinazione.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/datacurl --noproxy: Bypassa il proxy per host specifici
- Cosa fa
- Il flag
--noproxyspecifica un elenco separato da virgole di host, domini o indirizzi IP che dovrebbero bypassare il proxy e connettersi direttamente. Supporta i caratteri jolly:*.example.comcorrisponde a tutti i sottodomini. - Quando usarlo
- Usa per escludere localhost, servizi interni o domini specifici dal proxying. Questo è importante quando un proxy è impostato globalmente tramite variabili d'ambiente ma alcuni host (come i servizi locali) necessitano di accesso diretto. Usa
*per bypassare il proxy per tutti gli host.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/apiOpzioni proxy aggiuntive
Proxy SOCKS5 con risoluzione DNS attraverso il proxy
Certificato CA per verificare il proxy HTTPS stesso
curl --resolve: Risoluzione DNS personalizzata
- Cosa fa
- Il flag
--resolvefornisce un indirizzo IP personalizzato per una specifica coppiahost:port, bypassando completamente la ricerca DNS. Il formato èhost:port:address. Si possono fornire più voci--resolve. - Quando usarlo
- Essenziale per i test prima della propagazione DNS, la verifica di un backend specifico dietro un load balancer, o lo sviluppo locale dove serve un hostname reale per la validazione del certificato SSL. A differenza della modifica di
/etc/hosts, questo è per-request e specifico per la porta.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/healthcurl --connect-to: Reindirizza la connessione a un host diverso
- Cosa fa
- Il flag
--connect-toreindirizza la connessione TCP a una diversa coppiahost:portmantenendo l'URL originale per la richiesta HTTP (incluso l'headerHoste l'SNI). Formato:HOST1:PORT1:HOST2:PORT2. - Quando usarlo
- Usa per testare un server backend specifico dietro un load balancer senza modificare il DNS o
/etc/hosts. A differenza di--resolve, questo mappa host:port a host:port (non a un IP), utile quando anche il target ha un hostname.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/healthOpzioni di rete aggiuntive
Imposta il numero di porta locale o l'intervallo per la connessione
Vincola la connessione a un'interfaccia di rete specifica
Usa server DNS personalizzati invece dei predefiniti di sistema (c-ares)
Scenari SSL e Proxy reali
Questi esempi combinano più flag per gestire le attività comuni di sicurezza e rete negli ambienti di sviluppo, CI/CD e production.
Test HTTPS su Localhost
Quando sviluppi localmente con un certificato autofirmato, combina --resolve con --cacert (o -k per test rapidi). Questo ti permette di usare un hostname reale per la corretta validazione SSL/SNI senza modificare il file hosts.
$ curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/api/statusMutual TLS (Autenticazione con certificato client)
Alcune API richiedono che sia il server che il client presentino certificati. Fornisci --cert, --key e --cacert per stabilire una connessione TLS bidirezionale completamente verificata.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://mtls-api.example.com/dataProxy aziendale con autenticazione
Nelle reti aziendali con server proxy obbligatori, combina -x con -U per le credenziali proxy. Aggiungi --noproxy per escludere i servizi interni dal proxying.
$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/dataContainer Docker con CA interna
Quando i servizi in Docker usano certificati da una CA interna, monta il certificato CA nel container e riferiscilo con --cacert. Questo è più sicuro di -k perché valida ancora la catena di certificati.
$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/healthProxy SOCKS5 via tunnel SSH
Crea un proxy SOCKS5 con ssh -D e instrada il traffico curl attraverso di esso usando --socks5. Questo è utile per accedere ai servizi interni attraverso un bastion host.
$ curl --socks5 localhost:1080 https://internal-api.example.com/statusDomande frequenti su curl SSL e Proxy
Come posso saltare la verifica del certificato SSL in curl?
Usa curl -k URL o curl --insecure URL. Questo disabilita tutti i controlli sui certificati — scadenza, mancata corrispondenza hostname, CA non affidabile. Usa solo per lo sviluppo locale. Per production, usa --cacert con il certificato CA effettivo.
Come faccio a far fidare curl di un certificato autofirmato?
Usa curl --cacert /percorso/ca.pem URL per specificare il certificato CA che ha firmato il tuo certificato autofirmato. Questo è più sicuro di -k perché valida ancora la catena di certificati — fidandosi solo della tua CA specifica.
Come posso verificare quale versione TLS sta usando curl?
Esegui curl -v URL e cerca la riga * SSL connection using TLSv1.x / CipherSuite nell'output verbose. Per forzare una versione specifica, usa --tlsv1.2 o --tlsv1.3.
Cos'è il mutual TLS (mTLS) e come lo uso con curl?
Il mutual TLS richiede che sia il server che il client presentino certificati. Uso: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. La coppia --cert/--key autentica il client; --cacert verifica il server.
Come posso usare curl attraverso un proxy HTTP?
Usa curl -x http://proxy:port URL. Per un proxy HTTPS: curl -x https://proxy:port URL. In alternativa, imposta le variabili d'ambiente http_proxy e https_proxy — curl le rileva automaticamente.
Come posso usare curl con un proxy SOCKS5?
Usa curl --socks5 host:port URL per la risoluzione DNS locale, o curl --socks5-hostname host:port URL per risolvere il DNS attraverso il proxy (importante per privacy/Tor). Esempio con tunnel SSH: ssh -D 1080 user@bastion, poi curl --socks5 localhost:1080 URL.
Come posso autenticarmi con un server proxy in curl?
Usa curl -x http://proxy:port -U user:password URL. Il flag -U (o --proxy-user) invia le credenziali al proxy. Questo è separato da -u, che autentica con il server di destinazione.
Come posso escludere certi host dal proxy in curl?
Usa --noproxy "localhost,127.0.0.1,*.internal.com" o imposta la variabile d'ambiente NO_PROXY. Supporta i caratteri jolly (*.example.com). Usa --noproxy "*" per bypassare il proxy completamente per una singola richiesta.
Come posso testare HTTPS su localhost con curl?
Per test rapidi: curl -k https://localhost:8443/. Per validazione corretta: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. L'approccio --resolve permette al nome host del certificato di corrispondere correttamente.
Come posso sovrascrivere la risoluzione DNS per un host specifico in curl?
Usa curl --resolve host:port:IP URL. Esempio: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Questo bypassa il DNS solo per quella coppia host:port — non serve modificare /etc/hosts.
Come posso risolvere 'SSL certificate problem: certificate has expired' in curl?
Il certificato del server è scaduto. Soluzioni: (1) Rinnova il certificato sul server, (2) Aggiorna il bundle CA: curl --cacert /percorso/ca-aggiornato.pem URL, (3) Solo per test: curl -k URL. Verifica la scadenza: curl -v URL 2>&1 | grep expire.
È sicuro usare curl --insecure (-k) in production?
No. Il flag -k disabilita tutta la validazione dei certificati — scadenza, hostname e catena di fiducia. Questo rende la connessione vulnerabile ad attacchi man-in-the-middle. Usa sempre --cacert con il certificato CA specifico in production e nelle pipeline CI/CD.