是否可以使用自签名的证书与需要从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验证的行为身份验证

+0

好吧,我会给这个去看看它是否有效。没有经过certbot步骤。这意味着我必须先得到指向我的EB环境的域名CNAME记录?或者我可以使用AWS提供的动态域名,并将其作为server_name放置在我的nginx配置中?谢谢。 – arjabbar

这似乎在写这篇文章的时候,API网关具有known incompatibility with NGINX around Client Certificates

+0

那男人真的很烂,特别是因为他们的支持弹性魔豆平台的一半使用Nginx的,因为它的代理服务器。除了移动平台或建立自己的平台以外,你有什么建议吗? – arjabbar