Tengo una API HTTP simple creada con AWS API Gateway que usa una integración lambda para devolver algunos datos. También lo configuré con un DN personalizado usando route53 (CNAME)
Recientemente he recibido el siguiente error al realizar una llamada al punto final
Error: Hostname/IP does not match certificate's altnames: Host: xxxxxx. is not in the cert's altnames:DNS:*.execute-api.eu-west-2.amazonaws.com¿Alguien puede ayudar con por qué sucede esto? También configuré un certificado para mi dominio personalizado usando el administrador de certificados de AWS, por lo que son todos los servicios de AWS, pero ¿por alguna razón simplemente dejó de funcionar?
gracias andres
Editar: Extrañamente, recibo este problema de manera intermitente, cuando hago una llamada a la API en un navegador, aparece el siguiente error:
This server could not prove that it is api.xxxx.co.uk; its security certificate is from *.execute-api.eu-west-2.amazonaws.com. This may be caused by a misconfiguration or an attacker intercepting your connection.Luego desaparece y vuelve a funcionar? ¿EH? ¿Algunas ideas?
OK, he encontrado cuál es el problema gracias a la siguiente publicación
Si observa los comentarios debajo de la publicación original, justo en la parte inferior, el autor ha resuelto el problema, pero no se ha puesto como respuesta a la publicación, por lo que debe leer todo para averiguarlo.
El problema es que debe asegurarse de tener la configuración de DNS correcta en route53. Originalmente estaba creando un CNAME desde mi DN personalizado a la URL de invocación de la API.
En su lugar, lo que debe hacer es crear un registro ALIAS A desde su DN personalizado al DN de su API regional (prefijo con d-*)
NOTA: Esto es diferente a su URL de invocación
Haciendo este cambio todos mis problemas desaparecieron.
Para cualquiera que haga esto en Terraform, esto es lo que necesita
//HTTP API using quick create (regional) resource "aws_apigatewayv2_api" "qc_technical_test" { name = "qc_technical_test" protocol_type = "HTTP" target = aws_lambda_function.tt_lambda.arn route_key = "GET /persons/address" } //custom domain name for API (regional) resource "aws_apigatewayv2_domain_name" "qc_tt_custom_domain" { domain_name = "api.${aws_route53_zone.quadcorps.name}" domain_name_configuration { certificate_arn = aws_acm_certificate.tt_acm.arn endpoint_type = "REGIONAL" security_policy = "TLS_1_2" } } //route53 alias a record to api resource "aws_route53_record" "tt_api" { zone_id = aws_route53_zone.quadcorps.zone_id name = aws_apigatewayv2_domain_name.qc_tt_custom_domain.domain_name type = "A" alias { name = aws_apigatewayv2_domain_name.qc_tt_custom_domain.domain_name_configuration.0.target_domain_name zone_id = aws_apigatewayv2_domain_name.qc_tt_custom_domain.domain_name_configuration.0.hosted_zone_id evaluate_target_health = false } }Espero que esto le ahorre a alguien mucho tiempo en el futuro.