【发布时间】: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