O OpenSSL falha aleatoriamente ao verificar a cadeia de certificados de uma URL na porta 443 e pode verificar todas as portas da instância

O OpenSSL falha aleatoriamente ao verificar a cadeia de certificados de uma URL na porta 443 e pode verificar todas as portas da instância

Espero que alguém possa me ajudar porque estou perdido. Minha equipe tem sofrido com problemas de falta de certificados intermediários em nossos serviços. Recebi a tarefa de escrever um script que testaria continuamente todos os nossos URLs de serviço de alto tráfego, um por um, para verificar se a cadeia de certificados estava completa. Escrevi um programa C# que executou OpenSSL e analisou a saída. Aqui está o comando OpenSSL que executei em cada URL:

"openssl.exe s_client -showcerts -servername " + uri + " -verify_hostname " + uri + " -connect " + uri +":" + port

Ou

openssl.exe s_client -showcerts -servername www.euro-example-01.com -verify_hostname www.euro-example-01.com -connect www.euro-example-01.com:443

A porta é 443 por padrão e é usada 99% do tempo. Se o OpenSSL retornasse “Verify return code: 21 (unable to verify the first certificate)”, eu saberia que estava faltando um certificado intermediário e um alerta seria disparado. Além disso, o OpenSSL gera a cadeia para eu verificar isso. Isso funcionou ao testar sites como incomplete-chain.badssl.com.

Agora ele está sendo executado continuamente na nuvem e emitirá alertas ocasionalmente. No entanto, muitas vezes nosso engenheiro de serviço verificará cada servidor da URL com falha usando a porta da instância e encontraremos0 casos em que está falhando. Usamos balanceamento de carga round-robin, então não deveríamos esperar que pelo menos um desses servidores individuais seja o que causa a falha do 443? Os logs OpenSSL do caso de falha :443 mostram apenas um certificado na cadeia e sites como o SSLLabs também confirmaram um intermediário ausente.

Se nosso engenheiro reiniciasse o(s) endpoint(s) incorreto(s), a cadeia completa seria encontrada e os alertas de intermediários ausentes desapareceriam.

Talvez a parte mais estranha seja que eu configurei um script separado para testar apenas 4 URLs em vez de todos os cerca de 160 URLs diferentes. Ontem, em um intervalo de 30 minutos, euro-example-01.com:443foi testado 12 vezes e falhou 6 delas no script original. Nos mesmos 30 minutos, o novo script de tamanho de teste menor euro-example-01.com:443foi testado 12 vezes e aprovado em todas as 12 vezes. Pode ser que os dois scripts tenham atingido servidores diferentes, mas me parece suspeito.

Como eu disse, não sabemos por que isso está acontecendo. Pedi ao nosso engenheiro de serviço para verificar o balanceador de carga e eles disseram que está funcionando bem. Não localizamos nenhum padrão do que faz com que os testes comecem a falhar. Algum de vocês tem alguma ideia de por que isso está acontecendo? Como alternativa, existe uma maneira de saber qual porta da instância está sendo atingida quando testamos usando: 443? Talvez precisemos mudar para testes em portas de instância em vez de :443, mas nossas contagens de instâncias mudam regularmente e há um grande número delas.

Agradecemos antecipadamente por qualquer ajuda que você possa dar!

dr.: A porta 443 em nosso URL não retornará um certificado intermediário, mas quando verificamos os servidores individuais para esse URL, um certificado intermediário sempre é encontrado.

informação relacionada