Guia de Configuracao SSL, TLS e Proxy do curl
Configurar certificados HTTPS, versoes TLS, proxies e resolucao DNS personalizada no curl e essencial para comunicacao segura com APIs, pipelines CI/CD e depuracao de problemas de rede. Este guia cobre todas as opcoes de SSL, TLS, proxy e rede — desde desativar verificacoes de certificado com -k para desenvolvimento local ate configurar TLS mutuo com --cert e encaminhar trafego atraves de proxies SOCKS5. Cada opcao inclui uma explicacao clara, consideracoes de seguranca e um exemplo pronto a copiar.
Referencia Rapida das Opcoes SSL e Proxy
Permitir ligacoes inseguras — ignorar toda a verificacao SSL
Verificar o certificado do servidor contra um bundle CA especifico
Fornecer um certificado de cliente para autenticacao TLS mutua
Fornecer o ficheiro de chave privada para o certificado de cliente
Usar TLS versao 1.2 ou superior para a ligacao
Usar TLS versao 1.3 ou superior para a ligacao
Exigir SSL/TLS para a ligacao (falhar se nao disponivel)
Especificar quais cifras SSL usar para a ligacao
Especificar o tipo de certificado de cliente (PEM, DER, ENG, P12)
Fixar e verificar a chave publica do servidor (estilo HPKP)
Encaminhar todo o trafego atraves do servidor proxy especificado
Encaminhar a ligacao atraves de um proxy SOCKS5
Fornecer utilizador:palavra-passe para o servidor proxy
Lista de hosts que nao devem passar pelo proxy
Proxy SOCKS5 com resolucao DNS atraves do proxy
Certificado CA para verificar o proprio proxy HTTPS
Mapear um par host:porta especifico para um endereco IP personalizado
Ligar a um host:porta diferente do especificado no URL
Definir o numero ou intervalo de porta local para a ligacao
Vincular a ligacao a uma interface de rede especifica
Usar servidores DNS personalizados em vez dos predefinidos do sistema (c-ares)
curl -k: Ignorar Erros de Certificado SSL
- O que faz
- A opcao
-k(ou--insecure) desativa toda a verificacao de certificados SSL/TLS. O curl nao verificara se o certificado do servidor foi assinado por uma CA de confianca, 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/producao, use
--cacertcom o certificado CA real — e mais seguro e mais explicito.
$ curl -k https://localhost:8443/api/healthNunca use -k em scripts de producao ou pipelines CI/CD. Desativa toda a validacao de certificados, tornando a sua ligacao vulneravel a ataques man-in-the-middle. Use --cacert para confiar numa CA especifica.
curl --cacert: Usar um Certificado CA Personalizado
- O que faz
- A opcao
--cacertindica ao curl para verificar o certificado SSL do servidor contra um ficheiro de bundle CA (Certificate Authority) especifico em formato PEM, em vez do repositorio de confianca predefinido do sistema. - Quando usar
- Use quando o seu servidor utiliza um certificado assinado por uma CA privada ou interna que nao esta no repositorio de confianca do sistema. Isto e comum em ambientes corporativos, clusters Kubernetes e configuracoes Docker com PKI interna.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/datacurl --cert: Certificado de Cliente (TLS Mutuo)
- O que faz
- A opcao
--certfornece um certificado do lado do cliente para TLS mutuo (mTLS). No mTLS, tanto o servidor como o cliente apresentam certificados para verificar a identidade um do outro. O ficheiro de certificado deve estar em formato PEM ou PKCS#12. - Quando usar
- Necessario quando o servidor exige autenticacao por certificado de cliente — comum em APIs bancarias, servicos governamentais, comunicacao de dispositivos IoT e arquiteturas zero-trust. Combine sempre com
--keya menos que a chave esteja incorporada no ficheiro do certificado.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: Chave Privada do Certificado de Cliente
- O que faz
- A opcao
--keyespecifica o ficheiro de chave privada que corresponde ao certificado de cliente fornecido por--cert. A chave deve corresponder ao certificado. Se a chave estiver protegida por palavra-passe, o curl solicitara a frase secreta (ou use--pass). - Quando usar
- Use sempre em conjunto com
--cert. Se a chave privada ja estiver incorporada no ficheiro de certificado (comum com PKCS#12 / ficheiros .p12), pode omitir--key.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Forcar TLS 1.2 como Minimo
- O que faz
- A opcao
--tlsv1.2forca o curl a usar TLS 1.2 como versao minima aceitavel para o handshake SSL/TLS. Protocolos mais antigos (TLS 1.0, 1.1, SSLv3) sao rejeitados. - Quando usar
- Use para impor um padrao minimo de seguranca. TLS 1.2 e obrigatorio para conformidade PCI-DSS e e suportado por todos os servidores modernos. A maioria das compilacoes modernas do curl ja usa TLS 1.2+ por defeito, mas esta opcao torna-o explicito.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'curl --tlsv1.3: Forcar TLS 1.3 como Minimo
- O que faz
- A opcao
--tlsv1.3forca o curl a usar TLS 1.3 — a versao TLS mais rapida e segura. O TLS 1.3 elimina a viagem de ida e volta extra no handshake (suporte 0-RTT) e remove todos os conjuntos de cifras obsoletos. - Quando usar
- Use quando souber que o servidor suporta TLS 1.3 e quiser o melhor desempenho e seguranca. Nota: TLS 1.3 requer OpenSSL 1.1.1+ ou uma biblioteca TLS compativel. Nem todos os servidores o suportam ainda.
$ curl --tlsv1.3 https://modern-api.example.com/dataOpcoes SSL/TLS Adicionais
Exigir SSL/TLS para a ligacao (falhar se nao disponivel)
Especificar quais cifras SSL usar para a ligacao
Especificar o tipo de certificado de cliente (PEM, DER, ENG, P12)
Fixar e verificar a chave publica do servidor (estilo HPKP)
curl -x: Usar um Proxy HTTP/HTTPS
- O que faz
- A opcao
-x(ou--proxy) encaminha todo o trafego do curl atraves do servidor proxy especificado. O formato e[protocol://]host[:port]. Protocolos de proxy suportados: HTTP, HTTPS, SOCKS4, SOCKS5. - Quando usar
- Use para servidores proxy corporativos, depuracao com ferramentas como Fiddler, Charles ou mitmproxy, teste de restricoes geograficas ou quando o acesso direto a internet nao esta disponivel. Tambem pode definir as variaveis de ambiente
http_proxy/https_proxy.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Usar um Proxy SOCKS5
- O que faz
- A opcao
--socks5indica ao curl para usar um proxy SOCKS5 para a ligacao TCP. Ao contrario dos proxies HTTP, o SOCKS5 opera ao nivel TCP e pode lidar com qualquer protocolo — nao apenas HTTP. A resolucao DNS e feita localmente por defeito; use--socks5-hostnamepara resolver DNS atraves do proxy. - Quando usar
- Use para tuneis SSH (
ssh -D), acesso a rede Tor ou quando o proxy deve lidar com protocolos nao-HTTP. O SOCKS5 suporta UDP e pode opcionalmente lidar com DNS — tornando-o mais flexivel que proxies HTTP.
$ curl --socks5 localhost:1080 https://api.example.com/datacurl --proxy-user: Autenticacao no Proxy
- O que faz
- A opcao
--proxy-user(ou-U) envia credenciais de autenticacao para o servidor proxy. O formato euser:password. Isto e separado da autenticacao no servidor (-u). - Quando usar
- Necessario quando o servidor proxy exige autenticacao — comum em ambientes de rede corporativos e empresariais. As credenciais sao enviadas para o proxy, nao para o servidor de destino.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/datacurl --noproxy: Contornar o Proxy para Hosts Especificos
- O que faz
- A opcao
--noproxyespecifica uma lista separada por virgulas de hosts, dominios ou enderecos IP que devem contornar o proxy e ligar-se diretamente. Suporta wildcards:*.example.comcorresponde a todos os subdominios. - Quando usar
- Use para excluir localhost, servicos internos ou dominios especificos do proxy. Isto e importante quando um proxy esta definido globalmente atraves de variaveis de ambiente mas alguns hosts (como servicos locais) precisam de acesso direto. Use
*para contornar o proxy para todos os hosts.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/apiOpcoes de Proxy Adicionais
Proxy SOCKS5 com resolucao DNS atraves do proxy
Certificado CA para verificar o proprio proxy HTTPS
curl --resolve: Resolucao DNS Personalizada
- O que faz
- A opcao
--resolvefornece um endereco IP personalizado para um parhost:portespecifico, contornando completamente a consulta DNS. O formato ehost:port:address. Multiplas entradas--resolvepodem ser fornecidas. - Quando usar
- Essencial para testes antes da propagacao DNS, verificacao de um backend especifico atras de um balanceador de carga ou desenvolvimento local onde precisa de um hostname real para validacao de certificados SSL. Ao contrario de editar
/etc/hosts, isto e por pedido e especifico de porta.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/healthcurl --connect-to: Redirecionar Ligacao para Host Diferente
- O que faz
- A opcao
--connect-toredireciona a ligacao TCP para um parhost:portdiferente, mantendo o URL original para o pedido HTTP (incluindo o cabecalhoHoste SNI). Formato:HOST1:PORT1:HOST2:PORT2. - Quando usar
- Use para testar um servidor backend especifico atras de um balanceador de carga sem modificar DNS ou
/etc/hosts. Ao contrario de--resolve, isto mapeia host:porta para host:porta (nao para um IP), o que e util quando o destino tambem tem um hostname.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/healthOpcoes de Rede Adicionais
Definir o numero ou intervalo de porta local para a ligacao
Vincular a ligacao a uma interface de rede especifica
Usar servidores DNS personalizados em vez dos predefinidos do sistema (c-ares)
Cenarios Reais de SSL e Proxy
Estes exemplos combinam multiplas opcoes para lidar com tarefas comuns de seguranca e rede em ambientes de desenvolvimento, CI/CD e producao.
Testar HTTPS em Localhost
Ao desenvolver localmente com um certificado autoassinado, combine --resolve com --cacert (ou -k para testes rapidos). Isto permite usar um hostname real para SSL/SNI adequado sem modificar o ficheiro hosts.
$ curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/api/statusTLS Mutuo (Autenticacao por Certificado de Cliente)
Algumas APIs exigem que tanto o servidor como o cliente apresentem certificados. Forneca --cert, --key e --cacert para estabelecer uma ligacao TLS bidirecional totalmente verificada.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://mtls-api.example.com/dataProxy Corporativo com Autenticacao
Em redes corporativas com servidores proxy obrigatorios, combine -x com -U para credenciais do proxy. Adicione --noproxy para excluir servicos internos do proxy.
$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/dataContentor Docker com CA Interna
Quando servicos em Docker usam certificados de uma CA interna, monte o certificado CA no contentor e referencie-o com --cacert. Isto e 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 Tunel SSH
Crie um proxy SOCKS5 com ssh -D e encaminhe o trafego do curl atraves dele usando --socks5. Isto e util para aceder a servicos internos atraves de um bastion host.
$ curl --socks5 localhost:1080 https://internal-api.example.com/statusPerguntas Frequentes sobre SSL e Proxy no curl
Como ignoro a verificacao de certificado SSL no curl?
Use curl -k URL ou curl --insecure URL. Isto desativa todas as verificacoes de certificado — expiracao, incompatibilidade de hostname, CA nao confiavel. Use apenas para desenvolvimento local. Para producao, use --cacert com o certificado CA real.
Como faco o curl confiar num certificado autoassinado?
Use curl --cacert /path/to/ca.pem URL para especificar o certificado CA que assinou o seu certificado autoassinado. Isto e mais seguro que -k porque ainda valida a cadeia de certificados — confiando apenas na sua CA especifica.
Como verifico qual versao TLS o curl esta a usar?
Execute curl -v URL e procure a linha * SSL connection using TLSv1.x / CipherSuite na saida verbosa. Para forcar uma versao especifica, use --tlsv1.2 ou --tlsv1.3.
O que e TLS mutuo (mTLS) e como o uso com curl?
O TLS mutuo requer que tanto o servidor como o 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 uso o curl atraves de um proxy HTTP?
Use curl -x http://proxy:port URL. Para um proxy HTTPS: curl -x https://proxy:port URL. Em alternativa, defina as variaveis de ambiente http_proxy e https_proxy — o curl deteta-as automaticamente.
Como uso o curl com um proxy SOCKS5?
Use curl --socks5 host:port URL para resolucao DNS local, ou curl --socks5-hostname host:port URL para resolver DNS atraves do proxy (importante para privacidade/Tor). Exemplo com tunel SSH: ssh -D 1080 user@bastion, depois curl --socks5 localhost:1080 URL.
Como me autentico num servidor proxy no curl?
Use curl -x http://proxy:port -U user:password URL. A opcao -U (ou --proxy-user) envia credenciais para o proxy. Isto e separado de -u, que autentica com o servidor de destino.
Como excluo certos hosts do proxy no curl?
Use --noproxy "localhost,127.0.0.1,*.internal.com" ou defina a variavel de ambiente NO_PROXY. Suporta wildcards (*.example.com). Use --noproxy "*" para contornar o proxy completamente para um unico pedido.
Como testo HTTPS em localhost com curl?
Para teste rapido: curl -k https://localhost:8443/. Para validacao 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 substituo a resolucao DNS para um host especifico no curl?
Use curl --resolve host:port:IP URL. Exemplo: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Isto contorna o DNS apenas para esse par host:porta — sem necessidade de editar /etc/hosts.
Como corrijo 'SSL certificate problem: certificate has expired' no curl?
O certificado do servidor expirou. Solucoes: (1) Renovar o certificado no servidor, (2) Atualizar o bundle CA: curl --cacert /path/to/updated-ca.pem URL, (3) Apenas para testes: curl -k URL. Verificar expiracao: curl -v URL 2>&1 | grep expire.
E seguro usar curl --insecure (-k) em producao?
Nao. A opcao -k desativa toda a validacao de certificados — expiracao, hostname e cadeia de confianca. Isto torna a sua ligacao vulneravel a ataques man-in-the-middle. Use sempre --cacert com o certificado CA especifico em producao e pipelines CI/CD.