【问题标题】:Client-side SSL not working with AWS API Gateway客户端 SSL 不适用于 AWS API Gateway
【发布时间】:2016-03-14 12:32:29
【问题描述】:

我在 API Gateway 上生成了一个客户端 SSL 证书并将其添加到我的 nginx 配置中,如下所示:

listen *:443;
ssl on;
server_name api.xxxx.com;
ssl_certificate /etc/letsencrypt/live/api.xxxx.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.xxxx.com/privkey.pem;
ssl_verify_client on;
ssl_client_certificate /etc/nginx/ssl/awsapigateway.crt;

location /home/ubuntu/api  {          
      # if ($ssl_client_verify != SUCCESS) { return 403; }
      # proxy_pass http://my.http.public.endpoint.com;
      # proxy_set_header X-Client-Verify $ssl_client_verify;
}

客户端证书在通过 AWS API 网关测试控制台进行测试后不起作用。最终出现错误 400 - 未发送所需的 SSL 证书。 API Gateway应该在每次请求时将其客户端证书发送到我的服务器,以便我可以验证请求是否真正来自 API Gateway。

我认为它不起作用的原因是我将来自 AWS API 网关控制台的 PEM 编码公钥直接添加到 awsapigateway.crt。对吗?

此外,nginx 是否支持 自签名 客户端 SSL 证书,这是 AWS 为我们提供的?

【问题讨论】:

  • “自签名”客户端证书不应该是问题,因为您正在使用相同的证书来验证传入的证书,这意味着如果它存在,那就很好。您可能会提到您的 nginx 版本,以及您是否使用 SNI(同一 IP 上的多个 SSL 证书),因为您可能会遇到与客户端证书和 SNI 相关的错误或意外交互。
  • nginx 版本:nginx/1.4.6 (Ubuntu)。我认为我没有使用 SNI,因为服务器只配置了 1 个 SSL 证书。附带说明一下,我开始怀疑“测试”按钮是否实际上是在发送带有请求的客户端证书(我在请求有效负载中看到了这一点:{pathWithQueryString: "/wdff", headers: {}, clientCertificateId: " yalaks"}) 或者如果我没有在 AWS 上正确配置某些东西。还编辑了我的问题以从我的 nginx.conf 中添加更多行

标签: ssl amazon-web-services aws-api-gateway lets-encrypt


【解决方案1】:

Api Gateway 团队在这里。

看起来nginx配置是正确的。对于我们的简单测试用例,我们使用节点服务器并简单地将 PEM 证书从控制台直接写入设置为 ca 的 crt 文件,或者在本例中为 ssl_client_certificate。

如果由于某种原因控制台中的测试功能出现问题,我也会使用实际部署的 API 进行测试。确保使用 Stage 设置来指定证书。

【讨论】:

  • 最终成为 CA(Let's Encrypt)和 Cloudflare 的问题,后者将自己的客户端证书发送到服务器。
  • @creavery 是否让我们加密 AWS api 网关支持的 ssl?我在服务器端使用 let 加密,但它不起作用。
  • @Jack 我们 AWS 证书管理器是否可以配置 SSL(我们购买)并在证书链中添加客户端证书?
猜你喜欢
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 2018-07-24
  • 2017-12-11
  • 2018-01-09
  • 1970-01-01
相关资源
最近更新 更多