我们正在运行一个简单的Rails 4.0应用程序(在Ubuntu 14.04上),其中config.force_ssl = true。 SSL已上传到我们的ELB,ELB上的443和80端口都转发到服务器上的80。
我们一直使PCI扫描失败,因为使用HTTP / 1.0,ELB的专用IP显示在Location标头中。关于如何解决此问题的任何想法?我已经对此进行了广泛的研究,现在确实停滞了。
$ telnet app.ourwebsite.com 80
GET / HTTP/1.0
HTTP/1.1 301 Moved Permanently
...
*Location: https://172.31.26.236/*
Server: nginx/1.6.2 + Phusion Passenger 4.0.57
Set-Cookie: AWSELB=...
最佳答案
之所以无法通过PCI兼容,是因为所使用的测试nessus plugin 10759使用HTTP 1.0并且未发送主机头,并且AWS ELB在连接到您的实例并且出于任何原因将其设置为自己的主机头负载均衡器的内部IP。
这是使用Apache的mod_forensics进行的此类请求的捕获。请注意主机标头,该标头设置为负载均衡器的内部IP:
+11143:551306af:1 | GET / HTTP / 1.1 | host:10.3.2.57 | X-Forwarded-For: REDACTED | X-Forwarded-Port:443 | X-Forwarded-Proto:https | Connection:keep-alive
发出请求的方式(使用bash在* nix上):
(echo -ne "GET / HTTP/1.0\r\n\r\n"; sleep 2) | openssl s_client -connect 1.2.3.4:443
其中1.2.3.4是ELB的IP地址。您必须像这样制作请求,因为ELB不会接受\ n \ n直接键入openssl的内容。
请注意,此处发送的唯一标头是
GET
。我的站点的PCI扫描失败,这导致了我的到来,因此我觉得需要进一步解释。