Falha no handshake de TLS de backend HTTPS
Descubra como diagnosticar e solucionar problemas de falhas de handshake de TLS no backend HTTPS ao criar implantações de API com o serviço API Gateway.
Quando uma implantação de API usa um back-end HTTPS, uma falha de handshake TLS pode interromper a solicitação antes que o serviço de back-end processe qualquer tráfego HTTP. Em geral, a falha significa que o API Gateway não pode validar a cadeia de certificados ou a configuração TLS que o back-end apresenta.
Sintomas do Problema
Você pode ver um ou mais dos seguintes sintomas:
-
O URL de back-end está correto, mas a solicitação falha antes que o serviço de back-end processe a solicitação HTTP.
-
O log de execução mostra o código de log
httpBackend.requestError. -
A mensagem de log de execução termina com
HANDSHAKE_FAILED. -
As solicitações falham quando o serviço de back-end usa uma autoridade de certificação (CA) privada, um bundle de CAs personalizado ou uma cadeia de certificados em que o Gateway de API não confia.
Possíveis Causas
Falhas de handshake TLS no back-end HTTPS geralmente têm uma das seguintes causas:
-
O certificado de backend expirou, está incompleto ou é inválido.
-
A cadeia de certificados de back-end não tem um certificado intermediário.
-
A cadeia de certificados usa uma CA que não está no armazenamento confiável do Gateway de API.
-
O listener TLS de back-end está configurado incorretamente, incluindo definições TLS não suportadas ou incorretas.
-
A sessão TLS falha antes que o API Gateway possa enviar a solicitação HTTP para o back-end.
Revisar Mensagens de Log
Repita a solicitação por meio do Gateway de API e, em seguida, revise o log de execução da mesma solicitação.
Use o seguinte comando para repetir a solicitação:
-
curl -i https://<gateway-hostname>/<deployment-path-prefix>/<api-route-path>
No Logging, verifique os seguintes detalhes de log:
-
Capture o
opc-request-idda solicitação com falha. -
Abra o log de execução da mesma solicitação.
-
Confirme se o código de log é
httpBackend.requestError. -
Confirme se a mensagem termina com
HANDSHAKE_FAILED.
A seguinte mensagem de log indica que o handshake TLS falhou antes que o gateway enviasse a solicitação HTTP para o back-end:
-
An error occurred whilst sending request to https://<backend-url>: HANDSHAKE_FAILED
Revisar a Configuração de Back-End HTTPS
Revise a rota e a configuração de back-end para a solicitação com falha.
-
Confirme se
backend.urlaponta para o back-end HTTPS esperado. -
Confirme se o listener de back-end apresenta uma cadeia de certificados completa.
-
Se o back-end usar uma CA privada ou um bundle de CAs personalizado, confirme se o armazenamento confiável do gateway de API inclui o bundle de CAs ou a CA necessária.
-
Confirme se a configuração do listener TLS corresponde aos requisitos de back-end e armazenamento confiável HTTPS para a implantação de API.
Validar o Back-End HTTPS Diretamente
Em um sistema que pode acessar o back-end diretamente, teste o listener HTTPS fora do Gateway de API.
Use o seguinte comando para inspecionar o handshake TLS:
-
curl -v <backend-url>
Revise os resultados do teste direto para obter os seguintes detalhes:
-
A cadeia de certificados que o listener de back-end apresenta.
-
As datas de expiração do certificado e a cobertura do nome do host.
-
O protocolo TLS e a configuração de cifragem.
-
Qualquer erro de validação de certificado que ocorra antes do envio da solicitação HTTP.
Corrigir Problemas de TLS de Back-End HTTPS
Aplique a correção que corresponde ao problema encontrado.
-
Se o certificado back-end expirou, está incompleto ou é inválido, substitua ou corrija a cadeia de certificados.
-
Se a cadeia de certificados não tiver um certificado intermediário, configure o listener de back-end para apresentar a cadeia completa.
-
Se o back-end usar uma CA privada ou um bundle de CAs personalizado, adicione a CA ou o bundle de CAs necessário ao armazenamento confiável do gateway de API.
-
Se o listener de back-end usar definições TLS incorretas, atualize a configuração do listener e repita a solicitação.
-
Se o log de execução mostrar
httpBackend.requestErrorcomHANDSHAKE_FAILED, diagnostique e solucione problemas do listener HTTPS antes de alterar a configuração da rota do Gateway de API.
Verificar Conectividade de Back-End HTTPS
Depois de corrigir a configuração de TLS, verifique se a implantação de API pode atingir o back-end HTTPS.
-
Envie a mesma solicitação por meio do API Gateway.
-
Confirme se o log de execução não mostra mais
httpBackend.requestErrorcomHANDSHAKE_FAILED. -
Confirme se o serviço de back-end recebe e processa a solicitação HTTP.
Para obter mais informações
Para obter mais informações, consulte: