Guia de configuração curl SSL, TLS e proxy
Configurar certificados HTTPS, versões TLS, proxies e resolução DNS personalizada no curl é essencial para comunicação segura de API, pipelines CI/CD e depuração de problemas de rede. Este guia cobre todas as flags de SSL, TLS, proxy e rede — desde desabilitar verificações de certificado com -k para desenvolvimento local até configurar TLS mútuo com --cert e rotear tráfego através de proxies SOCKS5. Cada opção inclui uma explicação clara, considerações de segurança e um exemplo pronto para copiar.
Referência rápida de flags SSL e proxy
Permitir conexões inseguras — pular toda verificação SSL
Verificar o certificado do servidor contra um bundle CA específico
Fornecer certificado do cliente para autenticação TLS mútua
Fornecer o arquivo de chave privada para o certificado do cliente
Usar TLS versão 1.2 ou superior para a conexão
Usar TLS versão 1.3 ou superior para a conexão
Exigir SSL/TLS para a conexão (falhar se não disponível)
Especificar quais cifras SSL usar para a conexão
Especificar o tipo de certificado do cliente (PEM, DER, ENG, P12)
Fixar e verificar a chave pública do servidor (estilo HPKP)
Rotear todo tráfego pelo servidor proxy especificado
Rotear a conexão através de um proxy SOCKS5
Fornecer usuário:senha para o servidor proxy
Lista de hosts que não devem passar pelo proxy
Proxy SOCKS5 com resolução DNS pelo proxy
Certificado CA para verificar o próprio proxy HTTPS
Mapear um par host:porta específico para um endereço IP personalizado
Conectar a um host:porta diferente do que a URL especifica
Definir número da porta local ou intervalo para a conexão
Vincular a conexão a uma interface de rede específica
Usar servidores DNS personalizados em vez dos padrões do sistema (c-ares)
curl -k: Ignorar erros de certificado SSL
- O que faz
- A flag
-k(ou--insecure) desabilita toda verificação de certificado SSL/TLS. O curl não verificará se o certificado do servidor é assinado por uma CA confiável, se o hostname corresponde ou se o certificado expirou. - Quando usar
- Use apenas para desenvolvimento local com certificados autoassinados ou ambientes de teste. Para staging/produção, use
--cacertcom o certificado CA real — é mais seguro e mais explícito.
$ curl -k https://localhost:8443/api/healthNunca use -k em scripts de produção ou pipelines CI/CD. Ele desabilita toda validação de certificado, tornando sua conexão vulnerável a ataques man-in-the-middle. Use --cacert para confiar em uma CA específica.
curl --cacert: Usar certificado CA personalizado
- O que faz
- A flag
--cacertinstrui o curl a verificar o certificado SSL do servidor contra um arquivo de bundle CA (Certificate Authority) específico em formato PEM, em vez do armazenamento de confiança padrão do sistema. - Quando usar
- Use quando seu servidor usa um certificado assinado por uma CA privada ou interna que não está no armazenamento de confiança do sistema. Isso é comum em ambientes corporativos, clusters Kubernetes e configurações Docker com PKI interna.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/datacurl --cert: Certificado do cliente (TLS mútuo)
- O que faz
- A flag
--certfornece um certificado do lado do cliente para TLS mútuo (mTLS). No mTLS, tanto o servidor quanto o cliente apresentam certificados para verificar a identidade um do outro. O arquivo de certificado deve estar em formato PEM ou PKCS#12. - Quando usar
- Necessário quando o servidor exige autenticação por certificado do cliente — comum em APIs bancárias, serviços governamentais, comunicação de dispositivos IoT e arquiteturas zero-trust. Sempre combine com
--key, a menos que a chave esteja incorporada no arquivo de certificado.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: Chave privada do certificado do cliente
- O que faz
- A flag
--keyespecifica o arquivo de chave privada que faz par com o certificado do cliente fornecido por--cert. A chave deve corresponder ao certificado. Se a chave for protegida por senha, o curl solicitará a frase secreta (ou use--pass). - Quando usar
- Sempre use junto com
--cert. Se a chave privada já estiver incorporada no arquivo de certificado (comum com PKCS#12 / arquivos .p12), você pode omitir--key.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Forçar TLS 1.2 mínimo
- O que faz
- A flag
--tlsv1.2força o curl a usar TLS 1.2 como versão mínima aceitável para o handshake SSL/TLS. Protocolos mais antigos (TLS 1.0, 1.1, SSLv3) são rejeitados. - Quando usar
- Use para impor um padrão mínimo de segurança. TLS 1.2 é necessário para conformidade PCI-DSS e é suportado por todos os servidores modernos. A maioria dos builds modernos do curl já usa TLS 1.2+ por padrão, mas esta flag torna isso explícito.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'curl --tlsv1.3: Forçar TLS 1.3 mínimo
- O que faz
- A flag
--tlsv1.3força o curl a usar TLS 1.3 — a versão TLS mais rápida e segura. TLS 1.3 elimina o round-trip extra no handshake (suporte 0-RTT) e remove todas as suítes de cifra obsoletas. - Quando usar
- Use quando souber que o servidor suporta TLS 1.3 e quiser o melhor desempenho e segurança. Nota: TLS 1.3 requer OpenSSL 1.1.1+ ou uma biblioteca TLS compatível. Nem todos os servidores suportam isso ainda.
$ curl --tlsv1.3 https://modern-api.example.com/dataOpções SSL/TLS adicionais
Exigir SSL/TLS para a conexão (falhar se não disponível)
Especificar quais cifras SSL usar para a conexão
Especificar o tipo de certificado do cliente (PEM, DER, ENG, P12)
Fixar e verificar a chave pública do servidor (estilo HPKP)
curl -x: Usar proxy HTTP/HTTPS
- O que faz
- A flag
-x(ou--proxy) roteia todo tráfego curl pelo servidor proxy especificado. O formato é[protocolo://]host[:porta]. Protocolos de proxy suportados: HTTP, HTTPS, SOCKS4, SOCKS5. - Quando usar
- Use para servidores proxy corporativos, depuração com ferramentas como Fiddler, Charles ou mitmproxy, teste de restrições geográficas ou quando o acesso direto à internet não está disponível. Você também pode definir as variáveis de ambiente
http_proxy/https_proxy.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Usar proxy SOCKS5
- O que faz
- A flag
--socks5instrui o curl a usar um proxy SOCKS5 para a conexão TCP. Diferente dos proxies HTTP, SOCKS5 opera no nível TCP e pode lidar com qualquer protocolo — não apenas HTTP. A resolução DNS é feita localmente por padrão; use--socks5-hostnamepara resolver DNS pelo proxy. - Quando usar
- Use para túneis SSH (
ssh -D), acesso à rede Tor ou quando o proxy precisa lidar com protocolos não-HTTP. SOCKS5 suporta UDP e pode opcionalmente lidar com DNS — tornando-o mais flexível que proxies HTTP.
$ curl --socks5 localhost:1080 https://api.example.com/datacurl --proxy-user: Autenticação de proxy
- O que faz
- A flag
--proxy-user(ou-U) envia credenciais de autenticação para o servidor proxy. O formato éuser:password. Isso é separado da autenticação do servidor (-u). - Quando usar
- Necessário quando o servidor proxy exige autenticação — comum em ambientes de rede corporativos e empresariais. As credenciais são enviadas para o proxy, não para o servidor de destino.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/datacurl --noproxy: Ignorar proxy para hosts específicos
- O que faz
- A flag
--noproxyespecifica uma lista separada por vírgulas de hosts, domínios ou endereços IP que devem ignorar o proxy e conectar diretamente. Suporta curingas:*.example.comcorresponde a todos os subdomínios. - Quando usar
- Use para excluir localhost, serviços internos ou domínios específicos do proxy. Isso é importante quando um proxy está configurado globalmente via variáveis de ambiente, mas alguns hosts (como serviços locais) precisam de acesso direto. Use
*para ignorar o proxy para todos os hosts.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/apiOpções de proxy adicionais
Proxy SOCKS5 com resolução DNS pelo proxy
Certificado CA para verificar o próprio proxy HTTPS
curl --resolve: Resolução DNS personalizada
- O que faz
- A flag
--resolvefornece um endereço IP personalizado para um parhost:portaespecífico, ignorando completamente a consulta DNS. O formato éhost:port:address. Múltiplas entradas--resolvepodem ser fornecidas. - Quando usar
- Essencial para testes antes da propagação DNS, verificação de um backend específico atrás de um balanceador de carga ou desenvolvimento local onde você precisa de um hostname real para validação de certificado SSL. Diferente de editar
/etc/hosts, isso é por requisição e específico por porta.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/healthcurl --connect-to: Redirecionar conexão para host diferente
- O que faz
- A flag
--connect-toredireciona a conexão TCP para um parhost:portadiferente mantendo a URL original para a requisição HTTP (incluindo o headerHoste SNI). Formato:HOST1:PORTA1:HOST2:PORTA2. - Quando usar
- Use para testar um servidor backend específico atrás de um balanceador de carga sem modificar DNS ou
/etc/hosts. Diferente de--resolve, isso mapeia host:porta para host:porta (não para um IP), o que é útil quando o destino também tem um hostname.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/healthOpções de rede adicionais
Definir número da porta local ou intervalo para a conexão
Vincular a conexão a uma interface de rede específica
Usar servidores DNS personalizados em vez dos padrões do sistema (c-ares)
Cenários reais de SSL e proxy
Estes exemplos combinam múltiplas flags para lidar com tarefas comuns de segurança e rede em ambientes de desenvolvimento, CI/CD e produção.
Testando HTTPS no localhost
Ao desenvolver localmente com certificado autoassinado, combine --resolve com --cacert (ou -k para testes rápidos). Isso permite usar um hostname real para SSL/SNI adequado sem modificar seu arquivo hosts.
$ curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/api/statusTLS mútuo (autenticação por certificado do cliente)
Algumas APIs exigem que tanto servidor quanto cliente apresentem certificados. Forneça --cert, --key e --cacert para estabelecer uma conexão TLS bidirecional totalmente verificada.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://mtls-api.example.com/dataProxy corporativo com autenticação
Em redes corporativas com servidores proxy obrigatórios, combine -x com -U para credenciais de proxy. Adicione --noproxy para excluir serviços internos do proxy.
$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/dataContainer Docker com CA interna
Quando serviços no Docker usam certificados de uma CA interna, monte o certificado CA no container e referencie-o com --cacert. Isso é mais seguro que -k porque ainda valida a cadeia de certificados.
$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/healthProxy SOCKS5 via túnel SSH
Crie um proxy SOCKS5 com ssh -D e roteie o tráfego curl através dele usando --socks5. Útil para acessar serviços internos através de um host bastion.
$ curl --socks5 localhost:1080 https://internal-api.example.com/statusPerguntas frequentes sobre curl SSL e proxy
Como pular a verificação de certificado SSL no curl?
Use curl -k URL ou curl --insecure URL. Isso desabilita todas as verificações de certificado — expiração, incompatibilidade de hostname, CA não confiável. Use apenas para desenvolvimento local. Para produção, use --cacert com o certificado CA real.
Como fazer o curl confiar em um certificado autoassinado?
Use curl --cacert /caminho/para/ca.pem URL para especificar o certificado CA que assinou seu certificado autoassinado. É mais seguro que -k porque ainda valida a cadeia de certificados — confiando apenas na sua CA específica.
Como verificar qual versão TLS o curl está usando?
Execute curl -v URL e procure pela linha * SSL connection using TLSv1.x / CipherSuite na saída detalhada. Para forçar uma versão específica, use --tlsv1.2 ou --tlsv1.3.
O que é TLS mútuo (mTLS) e como usá-lo com curl?
TLS mútuo requer que ambos servidor e cliente apresentem certificados. Use: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. O par --cert/--key autentica o cliente; --cacert verifica o servidor.
Como usar curl através de um proxy HTTP?
Use curl -x http://proxy:porta URL. Para proxy HTTPS: curl -x https://proxy:porta URL. Alternativamente, defina as variáveis de ambiente http_proxy e https_proxy — o curl as detecta automaticamente.
Como usar curl com proxy SOCKS5?
Use curl --socks5 host:porta URL para resolução DNS local, ou curl --socks5-hostname host:porta URL para resolver DNS pelo proxy (importante para privacidade/Tor). Exemplo com túnel SSH: ssh -D 1080 user@bastion, depois curl --socks5 localhost:1080 URL.
Como autenticar com um servidor proxy no curl?
Use curl -x http://proxy:porta -U user:senha URL. A flag -U (ou --proxy-user) envia credenciais para o proxy. Isso é separado de -u, que autentica com o servidor de destino.
Como excluir certos hosts do proxy no curl?
Use --noproxy "localhost,127.0.0.1,*.internal.com" ou defina a variável de ambiente NO_PROXY. Suporta curingas (*.example.com). Use --noproxy "*" para ignorar o proxy completamente para uma única requisição.
Como testar HTTPS no localhost com curl?
Para teste rápido: curl -k https://localhost:8443/. Para validação adequada: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. A abordagem --resolve permite que o hostname do certificado corresponda corretamente.
Como substituir a resolução DNS para um host específico no curl?
Use curl --resolve host:porta:IP URL. Exemplo: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Isso ignora o DNS apenas para aquele par host:porta — sem necessidade de editar /etc/hosts.
Como corrigir 'SSL certificate problem: certificate has expired' no curl?
O certificado do servidor expirou. Soluções: (1) Renove o certificado no servidor, (2) Atualize seu bundle CA: curl --cacert /caminho/para/ca-atualizado.pem URL, (3) Apenas para testes: curl -k URL. Verificar expiração: curl -v URL 2>&1 | grep expire.
É seguro usar curl --insecure (-k) em produção?
Não. A flag -k desabilita toda validação de certificado — expiração, hostname e cadeia de confiança. Isso torna sua conexão vulnerável a ataques man-in-the-middle. Sempre use --cacert com o certificado CA específico em produção e pipelines CI/CD.