是否可以使用自签名的证书与需要从API网关客户端证书一个EC2实例
这里是我的情况:是否可以使用自签名的证书与需要从API网关客户端证书一个EC2实例
我使用弹性魔豆旋转起来一个EC2实例没有ELB。我想让实例只能通过API网关访问。所以,我走了使用客户端证书进行身份验证的路线,如here所述。
我的EC2实例有Nginx为Rails应用程序提供服务。我在我的机器上生成了一个自签名证书,并配置Nginx使用它来通过https提供服务。
似乎一切都很好,但是当我尝试从API网关控制台调用我的代理终结,我得到一个500错误象下面这样:
...
Thu Sep 14 02:27:05 UTC 2017 : Endpoint request URI: https://xxxxxxxxx.xxxxxxxxx.us-east-1.elasticbeanstalk.com/health
Thu Sep 14 02:27:05 UTC 2017 : Endpoint request headers: {x-amzn-apigateway-api-id=xxxxxxxxx, User-Agent=AmazonAPIGateway_xxxxxxxx, Accept-Encoding=identity}
Thu Sep 14 02:27:05 UTC 2017 : Endpoint request body after transformations:
Thu Sep 14 02:27:05 UTC 2017 : Sending request to https://xxxxxxxxx.xxxxxxxx.us-east-1.elasticbeanstalk.com/health
Thu Sep 14 02:27:05 UTC 2017 : Execution failed due to configuration error: General SSLEngine problem
Thu Sep 14 02:27:05 UTC 2017 : Method completed with status: 500
我想它有什么做的事实是我在后端使用自签名证书。但是,我真的必须购买合法证书才能完成我的设置吗?是否有任何其他解决方案仅允许我仅通过API网关接受对EC2实例的请求?
我看着那个被描述here拉姆达的方法,但我不希望任何更多的复杂性或延迟添加到该请求。
这里是我的Nginx配置的完整性:
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /etc/pki/tls/certs/server.crt;
ssl_certificate_key /etc/pki/tls/certs/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_prefer_server_ciphers on;
ssl_client_certificate /etc/pki/tls/certs/api_gateway.cer;
ssl_verify_client on;
if ($ssl_protocol = "") {
return 444;
}
}
在这里看到我的答案AWS API Gateway - Use Client-Side SSL Certificates。索知道什么不兼容性是NGINX - 我设法创建POC和与客户端的SSL验证的行为身份验证
这似乎在写这篇文章的时候,API网关具有known incompatibility with NGINX around Client Certificates。
那男人真的很烂,特别是因为他们的支持弹性魔豆平台的一半使用Nginx的,因为它的代理服务器。除了移动平台或建立自己的平台以外,你有什么建议吗? – arjabbar
好吧,我会给这个去看看它是否有效。没有经过certbot步骤。这意味着我必须先得到指向我的EB环境的域名CNAME记录?或者我可以使用AWS提供的动态域名,并将其作为server_name放置在我的nginx配置中?谢谢。 – arjabbar