Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Ao desenvolver aplicações que consomem APIs externas usando Feign, um dos desafios mais comuns é lidar com certificados SSL autoassinados ou inválidos, especialmente em ambientes de testes ou redes internas. Mesmo sendo uma prática altamente desencorajada para ambientes de produção, muitas equipes precisam de uma solução rápida para evitar bloqueios e garantir a continuidade do desenvolvimento.
Quando um cliente Feign tenta estabelecer conexão com um endpoint HTTPS que possui um certificado SSL que não corresponde a uma autoridade confiável, ele lança uma exceção de verificação de certificado, interrompendo a requisição. Isso ocorre porque o padrão do Java e do Spring Boot é validar a autenticidade do certificado, garantindo segurança, mas também dificultando testes com infraestrutura própria ou certificados autoassinados. A decisão fica mais saudável quando o time consegue medir o impacto depois.
Para identificar esse problema, uma estratégia simples é ativar logs de depuração na camada SSL, observando mensagens de erro relacionadas a "SSLHandshakeException" ou "CertificateValidationFailed". Além disso, verificar as configurações do cliente Feign, que normalmente herdam a configuração padrão do Java, ajuda a entender se há algum método customizado para validação de certificados. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
A solução mais rápida é criar uma configuração personalizada do cliente HTTP que ignora erros de certificados inválidos. Isso envolve criar um SSLSocketFactory que aceita qualquer certificado e um HostnameVerifier que aceita qualquer hostname, permitindo chamadas a endpoints com certificados autoassinados.
#### Exemplo técnico
public class UnsafeSSLConfig {
public static Client createUnsafeClient() throws NoSuchAlgorithmException, KeyManagementException {
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]. }
public void checkClientTrusted(X509Certificate[] certs, String authType) { }
public void checkServerTrusted(X509Certificate[] certs, String authType) { }
}
}. SSLContext sslContext = SSLContext.getInstance("TLS"). sslContext.init(null, trustAllCerts, new SecureRandom()). HostnameVerifier allHostsValid = (hostname, session) -> true. return new Client.Default(sslContext.getSocketFactory(), allHostsValid). }
} Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
Esse trecho cria um cliente Feign que ignora verificações de certificados e hostnames, útil para ambientes de teste, mas deve ser evitado em produção por motivos de segurança.
Ignorar SSL expõe a aplicação a ataques man-in-the-middle, além de comprometer a integridade dos dados trafegados. Portanto, essa abordagem deve ser usada apenas em ambientes de desenvolvimento ou testes, nunca em produção. Em produção, o ideal é sempre obter certificados válidos e confiáveis, preferencialmente utilizando serviços como Let's Encrypt. A decisão fica mais saudável quando o time consegue medir o impacto depois. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
1. Criar uma configuração de cliente Feign com SSLCustomizado.
2. Aplicar essa configuração apenas em ambientes de teste ou staging.
3. Planejar a renovação ou substituição do certificado autoassinado por um válido.
4. Monitorar logs e garantir que a implementação temporária não vaze para produção.
Embora seja tentador usar soluções rápidas para contornar problemas de SSL, a segurança da comunicação deve estar sempre em primeiro lugar. Ignorar certificados inválidos pode ajudar a acelerar o desenvolvimento, mas é uma medida que deve ter uma data de validade clara e um plano de transição para certificados confiáveis. Equipes que adotam essa prática precisam estar conscientes dos riscos e garantir que essa configuração não seja aplicada inadvertidamente em ambientes críticos. Sem esse critério, a solução pode parecer simples no começo e cara no suporte. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Carregando comentários...