如何配置后端服务器以使用由 aws gateway api 生成的客户端 SSL 证书?

Posted

技术标签:

【中文标题】如何配置后端服务器以使用由 aws gateway api 生成的客户端 SSL 证书?【英文标题】:How to configure backend server to use client side SSL certificates generated by aws gateway api? 【发布时间】:2017-10-16 09:43:12 【问题描述】:

我已经通过 elasticbeanstalk 将 node js 应用程序部署到单实例类型的 ec2 实例。在此之后,我通过 amazon api gateway 部署了我的应用程序。我的 EC2 实例是公开的。我想限制它只接受来自 amazon api 网关的请求。

为此,我正在关注https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-client-side-ssl-authentication.html

我通过 api 网关生成了客户端证书,但我不知道如何在 EC2 实例上使用或安装此证书,以便 EC2 实例仅接受来自 aws api 网关的请求。我在我的应用程序中使用 Node js 服务器。

请帮忙。

【问题讨论】:

【参考方案1】:

API Gateway 客户端证书功能不使用 ACM 证书。

对于客户端证书,API Gateway 会生成自己的自签名证书,并让您可以使用 PEM 编码的客户端证书公钥来配置您的 Web 服务器。 API Gateway 保留证书的私钥,并在向您的 Web 服务器发出请求时使用它。按照设计,无法从 API Gateway 导出私钥,因此您可以确定调用者是 API Gateway,因为没有其他人可以获取私钥。

要获取客户端证书的 PEM 编码公钥,请调用 get-client-certificate as documented here

请注意,您还必须使用由 API Gateway 信任的证书颁发机构签署的服务器证书配置您的 Web 服务器。不要将此与用于自定义域名的证书混淆。这些用于 TLS 终止对您的 API 的传入请求。我为这个用例谈论的服务器证书只是在您的后端 Web 服务器上使用,因此 API Gateway 可以通过 TLS 调用它。

建议您在 API Gateway 中启用客户端证书之前,先获取、部署、配置和测试您的服务器证书。一旦您的服务器证书与 API 网关一起使用,然后启用客户端证书并修改您的 Web 服务器以要求它。

This article 描述了如何使用 Node.js 配置服务器端和客户端证书。

【讨论】:

“建议您在 API Gateway 中启用客户端证书之前获取、部署、配置和测试您的服务器证书” 似乎是<blink> 标签,如果我见过的话。 :) 至理名言。这并不意味着这一步有什么异常困难,这只是一个可靠的策略——如果没有客户端证书就无法工作,那么将其添加到混合中只会使故障排除变得相当复杂。 @MikeD 是否让 AWS api 网关支持加密?我正在使用让我们在服务器端加密 ssl 证书,但它不起作用。我们也可以在服务端使用 ACM 证书吗?提前感谢您的帮助! 此外,这里是 API 网关信任的接受的证书颁发机构列表:docs.aws.amazon.com/apigateway/latest/developerguide/… 我不确定答案末尾链接的文章是否发生了变化,但它似乎没有回答如何配置由API网关信任的权威机构签署的服务器证书。

以上是关于如何配置后端服务器以使用由 aws gateway api 生成的客户端 SSL 证书?的主要内容,如果未能解决你的问题,请参考以下文章

由光环新网运营的AWS中国(北京)区域AWS Storage Gateway服务现已用于Linux KVM管理程序

添加自定义标头并使用 AWS API Gateway 将其发送到后端服务

AWS Api Gateway 未在 204 上设置 CORS

AWS - 使用 @connections websocket 回调 url 从后端发送响应(单向) - API Gateway websocket 协议

如何配置 AWS 用户 cognito 身份验证流程以在 Java sdk 后端生成身份令牌、访问令牌?

如何使用 OpenAPI 为 AWS API Gateway 配置 CORS?