Como ignorar erros de certificado SSL com cURL: Um Guia Passo-a-Passo

Comentários: 0

Ao executar solicitações HTTP usando cURL, às vezes há um problema com a verificação de certificados SSL. Isso pode acontecer quando um certificado de servidor auto-assinado é usado, ou se ele expirou. Nessas circunstâncias, o cURL, por defeito, nega a ligação para proteger o utilizador de possíveis riscos. No entanto, isso pode obstruir o processo durante o teste da API, trabalhando em redes fechadas ou usando serviços locais. É por isso que precisamos descobrir em que circunstâncias o cURL ignora o SSL e como implementá-lo.

Este artigo detalhará como ignorar certificados SSL no cURL, os comandos específicos que precisam ser executados e possíveis preocupações relacionadas à segurança.

unnamed.jpg

O que são cURL e SSL?

cURL (Client URL) é um projeto de software que fornece uma linha de comando e uma biblioteca para transferência de dados usando vários protocolos. Essa ferramenta é muito útil para automatizar solicitações, testes de API ou recuperação de informações de vários recursos da Web, pois funciona com uma infinidade de tipos de rede.

SSL (Secure Sockets Layer) é uma forma de tecnologia de encriptação que assegura a transmissão de dados através da Internet. Este certificado é um documento que prova que um determinado site é autêntico e estabelece uma ligação segura entre o utilizador e o servidor. Certificados de servidor auto-assinados, expirados ou inválidos levam a bloqueios durante a operação do cURL.

Para escapar a tais desafios, é melhor desativar o SSL do cURL, assim, a execução de pedidos cURL terá uma taxa de sucesso mais elevada. Esse método de teste é muito útil, mas pode ser perigoso em termos de segurança.

cURL, curl, ou Curl: Qual a Diferença?

O nome oficial da ferramenta é cURL, a primeira letra da palavra é minúscula e as demais são maiúsculas. Nos documentos, artigos e códigos, você encontrará várias outras formas:

  • curl (tudo minúsculo) - É assim que a maioria dos desenvolvedores tende a escrevê-lo em códigos e linhas de comando.
  • Curl (C maiúsculo) - Esta forma é por vezes utilizada em documentos não oficiais, mas está incorrecta.

Independentemente da ortografia, cURL é sempre cURL. É uma ferramenta multiplataforma e de linha de comando para transferência de dados com sintaxe de URL. A maioria das pessoas em desenvolvimento web, administração de sistemas e DevOps usam-no para fazer solicitações HTTP, testar APIs e realizar interações de automação de servidor.

Por que desativar a verificação SSL?

Normalmente, o utilitário de transferência de dados valida os certificados que aparecem no ecrã do utilizador para impedir sites falsos e ataques. No entanto, existem cenários em que o cURL ignora a verificação do certificado. Vamos ver quando essas instâncias surgem:

  • Certificados auto-emitidos sendo usados com servidores de teste ou locais. Ao testar APIs ou aplicativos, os desenvolvedores geralmente criam certificados auto-assinados que não são endossados pelas Autoridades de Certificação (CA) oficiais.
  • Acesso de funcionários a serviços corporativos internos. Os servidores internos de uma organização geralmente têm certificados que não são confiáveis. Quando o acesso automatizado a esses recursos é obrigatório, desativar a verificação de certificados é uma solução temporária ideal.
  • Alguns sites têm um certificado de servidor que expirou ou é inválido. Se for crucial obter informações de tal recurso, a validação pode ser desativada temporariamente sem que o usuário encontre o erro específico do certificado. Nesse caso, o cURL ignora os erros SSL e tudo funciona bem.
  • Desativar a verificação ajuda a evitar falhas em scripts que requerem a automatização de pedidos de rede. Quando um script envia consistentemente solicitações a um servidor que possui um certificado incorreto, a verificação precisa ser desativada.

Apesar de a verificação ser um fator vital, desactivá-la completamente pode causar problemas e riscos. Vamos discuti-los a seguir.

Riscos de segurança da desativação do SSL

Quando o cURL ignora os certificados, isso significa que a ligação pode ser explorada através de vários ataques de segurança, o que é particularmente importante quando estão envolvidas informações sensíveis, incluindo palavras-passe, tokens ou mesmo dados de pagamento.

Principais ameaças:

  • Man In The Middle Attack (MITM) - uma técnica em que a informação entre o utilizador e o servidor é interceptada e os dados são alterados ou substituídos. Representa um risco ainda maior quando não há ninguém para verificar, porque se torna demasiado fácil implementar ataques maliciosos. Por exemplo, uma página de início de sessão pode ser substituída por uma falsa para que o atacante possa facilmente recolher as credenciais.
  • cURL não consegue verificar o certificado do servidor, invalidando-o. Assim, não há forma de garantir que o nó pretendido é aquele a que se está a ligar, e permite a substituição de sítios por actores que se fazem passar por recursos de confiança.
  • Se, durante os testes, a verificação for desactivada e esse código for transportado para o ambiente de produção, pode haver um aumento da probabilidade de fugas ou mesmo de ataques de força bruta que comprometam informações confidenciais.

Se for necessário que o cURL ignore os erros SSL, então é fundamental visualizar os certificados auto-assinados:

  • Passar a verificação apenas num ambiente de teste e evitá-la na produção;
  • Não transmita informações confidenciais por meio de uma conexão não criptografada;
  • Adicionar o certificado auto-assinado à confiança manualmente;
  • Monitorar o código, excluindo erros de configuração, para garantir que a verificação permaneça no código de produção.

No próximo bloco, analisaremos detalhadamente os processos que são executados na linha de comando para desativar a verificação de certificados.

Como contornar erros SSL com cURL

Para fazer com que o cURL ignore o SSL, é necessário incluir parâmetros específicos que suspendam a verificação da autenticação. Como observado anteriormente, essas práticas só podem ser usadas em um ambiente devidamente protegido.

O método mais eficaz para atenuar um erro de certificado de site inválido é configurar manualmente uma falsificação de verificação temporária. Isso pode ser feito com os seguintes parâmetros:

  • -k ou --insecure—para utilização na ligação a um sítio em que o certificado do servidor se revela inválido;
  • --cacert—para definir a localização onde o ficheiro do certificado do utilizador está armazenado.

Eis como pode criar um exemplo de chamada cURL que ignora a verificação do certificado:


curl -k https://example.com

Isso permitirá que a chamada cURL seja executada mesmo com um certificado de servidor expirado.

Se você quiser enviar dados (como em uma solicitação POST):


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

Para maior segurança, deve selecionar diretamente o diretório onde se encontra o ficheiro.


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

Desabilitando a verificação SSL no seu script

Se o pedido se destina a ser automatizado através de uma linha de comando e a presença do utilizador não deve ser necessária, então é benéfico desativar as verificações de certificados em tais cenários.

Aqui está um exemplo em Bash, de como o cURL ignora o SSL:


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

Com Python, pode utilizar o módulo requests com verify definido como False:


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

Ao executar este comando, o Python irá emitir um aviso relativo a uma ligação insegura. Adicionalmente, terá de se certificar que escreve código para desativar os avisos que surgem no caso de o site ter um certificado de servidor inválido:


import requests import urllib3 

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) 

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

E agora o PHP com 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;

A tabela abaixo lista os métodos mais comuns de ignorar a verificação SSL, a sua utilização e os possíveis riscos.

Método Comando / Parâmetro Quando utilizar Riscos
Desativação completa da verificação SSL e do nome de anfitrião curl -k / --insecure Testar APIs, serviços locais Risco elevado de MITM
Utilizar um certificado personalizado curl --cacert /path/to/cert.pem No caso de ter o seu próprio certificado Mais seguro, mas requer configuração
Desativar apenas o SSL no código CURLOPT_SSL_VERIFYPEER=false Ensaios temporários Perigoso se continuar em produção

Conclusão

Os certificados de servidor que não funcionam corretamente criam mais problemas do que apenas quando são utilizados com o cURL. Os certificados garantem a segurança dos utilizadores durante a transferência de dados. Assim, desativar a verificação é o último recurso quando se encontra um erro na depuração do cURL. Com base na causa do erro, existem outras abordagens menos extremas, como a atualização do documento, a adição à região de confiança ou a simples troca pelo certificado correto.

Sem a verificação SSL, a ligação não seria saudável e seria facilmente abusada por outros utilizadores. Esta abordagem só é aceitável em ambientes controlados, como quando se está a fazer um teste ou quando o serviço é externo. Em circunstâncias normais, quando é apresentado um certificado de servidor inválido, é crucial que esta cláusula não seja definida no código de trabalho, uma vez que se verificariam mascaramentos de dados e outras falhas de segurança.

Comentários:

0 Comentários