Como soluciono erros com certificados SSL gerados pelo API Gateway?

4 minuto de leitura
0

Estou enfrentando problemas com certificados SSL autoassinados e expirados instalados no meu sistema de back-end. Como faço para corrigir esses erros?

Breve descrição

Quando o Amazon API Gateway executa um handshake SSL com o back-end, o API Gateway espera que o back-end forneça certificados obtidos de emissores confiáveis. O API Gateway espera que os certificados sejam válidos e não expirem. O API Gateway também espera que a cadeia de confiança esteja intacta. Isso significa que o API Gateway espera que o certificado contenha uma autoridade de certificação (CA) raiz, CAs intermediárias e os detalhes do certificado principal. Com essas informações, o API Gateway pode concluir a validação do certificado percorrendo a cadeia de certificados.

Resolução

Integração de proxy HTTP

Para se familiarizar com as integrações de proxy HTTP, teste certificados SSL incorretos no console do API Gateway. Para obter mais informações sobre certificados SSL inválidos e para testes, consulte o site do Bad SSL.

1.    Crie um recurso chamado “/selfsigned” com um método GET. Em seguida, configure uma integração de proxy HTTP com o URL https://self-signed.badssl.com/.

No console do API Gateway, teste a API. Você recebe o seguinte erro:

Thu Dec 15 16:05:05 UTC 2022 : Sending request to https://self-signed.badssl.com/
Thu Dec 15 16:05:05 UTC 2022 : Execution failed due to configuration error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

2.    Crie um recurso chamado “/expiredcert” com um método GET. Em seguida, configure uma integração de proxy HTTP com o URL https://expired.badssl.com/.

No console do API Gateway, teste a API. Você recebe o seguinte erro:

Thu Dec 15 16:06:02 UTC 2022 : Sending request to https://expired.badssl.com/
Thu Dec 15 16:06:02 UTC 2022 : Execution failed due to configuration error: PKIX path validation failed: java.security.cert.CertPathValidatorException: validity check failed

3.    Crie um recurso chamado “/untrustedRootCA” com um método GET. Configure uma integração de proxy HTTP com o URL https://untrusted-root.badssl.com/.

No console do API Gateway, teste a API. Você recebe o seguinte erro:

Thu Dec 15 16:06:28 UTC 2022 : Sending request to https://untrusted-root.badssl.com/
Thu Dec 15 16:06:28 UTC 2022 : Execution failed due to configuration error: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Integração de links da VPC

Com a integração de links da VPC, o API Gateway realiza a validação do certificado com o próximo salto que executa a terminação de TLS.

Quando um Network Load Balancer tem um receptor TLS, ele executa uma terminação TLS e cria outra conexão com o destino. O certificado anexado ao Network Load Balancer deve atender a todos os requisitos. Um Network Load Balancer não realiza a validação do certificado durante o handshake SSL com o destino. O Network Load Balancer aceita certificados expirados ou autoassinados que são instalados nas instâncias de destino. O Network Load Balancer e os grupos de destino estão vinculados a uma VPC e as comunicações são seguras. Se o Network Load Balancer estiver usando um receptor TCP, o handshake TLS acontece de ponta a ponta. Nesses casos, a aplicação de back-end deve estar em conformidade com os requisitos de SSL.

O API Gateway é compatível com Server Name Indication (SNI) durante um handshake SSL por meio de uma integração de links da VPC.

Se o Network Load Balancer de back-end tiver um certificado autoassinado ou privado que não tenha sido emitido por uma CA, você receberá o seguinte erro:

Execution failed due to configuration error: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

A solução alternativa para o erro de falha na execução é definir insecureSkipVerification como true (verdadeiro) no objeto tlsConfig da integração:

Nota: Substitua EXAMPLE-REST-API-ID e EXAMPLE-RESOURCE-ID por seus valores.

aws apigateway update-integration --rest-api-id EXAMPLE-REST-API-ID --resource-id EXAMPLE-RESOURCE-ID --http-method GET --patch-operations "op='replace',path='/tlsConfig/insecureSkipVerification',value=true"

Informações relacionadas

Gerar e configurar um certificado SSL para autenticação de backend

Autoridades de certificado compatíveis com o API Gateway para integrações HTTP e de proxy HTTP

Target groups for your Network Load Balancers (Grupos de destino para seus Network Load Balancers)