当我使用具有后端集成功能的 SSL 证书时,如何对 API 网关错误进行故障排除?
我想在 Amazon API Gateway 中使用具有后端集成功能的 SSL 证书,但我收到了一个错误。
简短描述
当 API Gateway 与后端执行 SSL 握手时,API Gateway 期望后端提供来自可信颁发者的证书。API Gateway 期望证书有效且未过期。API Gateway 还期望信任链完好无损。这意味着,API Gateway 期望证书包含根证书颁发机构 (CA)、中间 CA 和父证书的详细信息。凭借这些信息,API Gateway 可以在通过证书链时完成证书验证。
解决方法
测试 HTTP 代理集成
要熟悉 HTTP 代理集成,请从 API 网关控制台测试错误的 SSL 证书。有关错误的 SSL 证书和测试的详细信息,请参阅错误的 SSL 网站。
-
使用 GET 方法创建名为**/selfsigned** 的资源。然后,使用 URL https://self-signed.badssl.com/ 配置 HTTP 代理集成。
在 API Gateway 控制台中,测试 API。您会收到以下错误:
“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(UTC 时间 2022 年 12 月 15 日周四 16:05:05:向 https://self-signed.badssl.com/ 发送请求 UTC 时间 2022 年 12 月 15 日周四 16:05:05:由于配置错误而执行失败:PKIX 路径验证失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径)” -
使用 GET 方法创建名为 /expiredcert 的资源。然后,使用 URL https://expired.badssl.com/ 配置 HTTP 代理集成。
在 API Gateway 控制台中,测试 API。您会收到以下错误:
“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(UTC 时间 2022 年 12 月 15 日周四 16:06:02:向 https://expired.badssl.com/ 发送请求 UTC 时间 2022 年 12 月 15 日周四 16:06:02:由于配置错误而执行失败:PKIX 路径验证失败:java.security.cert.CertPathValidatorException:有效性检查失败)” -
使用 GET 方法创建名为 /untrustedRootCA 的资源。使用 URL https://untrusted-root.badssl.com/ 配置 HTTP 代理集成。
在 API Gateway 控制台中,测试 API。您会收到以下错误:
“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(UTC 时间 2022 年 12 月 15 日周四 16:05:05:向 https://self-signed.badssl.com/ 发送请求 UTC 时间 2022 年 12 月 15 日周四 16:05:05:由于配置错误而执行失败:PKIX 路径验证失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径)”
解决“PKIX path building failed(PKIX 路径构建失败)”错误
通过 VPC 链接集成,API Gateway 使用执行 TLS 终止的下一跳执行证书验证。当网络负载均衡器具有 TLS 侦听器时,网络负载均衡器执行 TLS 终止并创建与目标的另一个连接。附加到网络负载均衡器的证书必须满足所有要求。在与目标进行 SSL 握手期间,网络负载均衡器不执行证书验证。
网络负载均衡器接受安装在目标实例上的过期或自签名证书。网络负载均衡器和目标组绑定在 VPC 内,通信是安全的。如果网络负载均衡器使用 TCP 侦听器,则 TLS 握手将端到端进行。在这些情况下,后端应用程序必须符合 SSL 要求。
在通过 VPC 链接集成进行 SSL 握手期间,API Gateway 支持服务器名称指示 (SNI)。
当 API Gateway 无法验证您的后端网络负载均衡器证书的证书颁发机构 (CA) 时,您会收到以下错误:
“Execution failed due to configuration error: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target(由于配置错误而执行失败:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径)”
如果您收到 PKIX path building failed(PKIX 路径构建失败)错误,则可能存在以下证书问题之一:
- **证书链不完整:**如果您的 SSL 证书不包含预期的中间证书或完整的证书链不存在,则证书验证将失败。
- **不支持的 CA:**如果证书不是由 API Gateway 支持的 CA 颁发的,则验证失败。对于非 CA 颁发的自签名证书或私有证书,也是如此。
要对此问题进行故障排除,请执行以下步骤:
开启“insecureSkipVerification”
**注意:**对生产用例使用这种方法并非最佳做法。
对于导致错误的特定集成,将 insecureSkipVerification 选项设置为 true。请注意,只有 HTTP 和 HTTP_PROXY 集成支持此设置。当您将此选项设置为 true 时,API Gateway 会跳过集成端点证书的 CA 验证。这也会允许您使用自签名证书或私有 CA 的证书。
**注意:**将 EXAMPLE-REST-API-ID 和 EXAMPLE-RESOURCE-ID 替换为您的值。
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"
当您开启 insecureSkipVerification 时,API Gateway 仍会执行基本的证书验证。此验证包括验证证书的到期日期、主机名和根 CA 的存在。
验证证书链是否完整
要检查证书路径链是否完整,请运行以下 OpenSSL 命令:
**注意:**要运行此命令,必须安装 OpenSSL。有关详细信息,请参阅 OpenSSL 网站。
$ openssl s_client -servername example.com -connect example.com:443
有关详细信息,请参阅 OpenSSL 网站上的 s_client。
如果您的证书链已完成,则命令将返回 verify ok(验证正常)。否则,输出将表明任何类型的证书(支持或不支持的 CA)的证书链都不完整。
**注意:**此外,请确保您在与网络负载均衡器的 API Gateway 中的集成 URI 使用有效的顶级域 (TLD)。API Gateway 控制台可能不允许使用以特定域扩展名结尾的端点 URL。
相关信息
相关内容
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前