Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 使用带有自签名证书的HTTPS将ELB连接到后端服务器_Amazon Web Services_Ssl_Aws Elb - Fatal编程技术网

Amazon web services 使用带有自签名证书的HTTPS将ELB连接到后端服务器

Amazon web services 使用带有自签名证书的HTTPS将ELB连接到后端服务器,amazon-web-services,ssl,aws-elb,Amazon Web Services,Ssl,Aws Elb,我期待着建立一个ELB,使用HTTPS与后端服务器通信。我试图使用一个后端服务器建立一个概念验证,但似乎无法让ELB与服务器通信。我几乎可以肯定这是一个证书问题,因为任何没有SSL的设置都可以完美地工作 我如何设置这个?我尝试了来自多个答案和博客帖子的各种建议,但没有成功 我现在正在使用以下命令(从)设置自签名证书: 我在签名时尝试了多个域名,我可以使用它们: curl https://[Public DNS, or private DNS or IP used to create the SS

我期待着建立一个ELB,使用HTTPS与后端服务器通信。我试图使用一个后端服务器建立一个概念验证,但似乎无法让ELB与服务器通信。我几乎可以肯定这是一个证书问题,因为任何没有SSL的设置都可以完美地工作

我如何设置这个?我尝试了来自多个答案和博客帖子的各种建议,但没有成功

我现在正在使用以下命令(从)设置自签名证书:

我在签名时尝试了多个域名,我可以使用它们:

curl https://[Public DNS, or private DNS or IP used to create the SSL crt]/status --cacert /path/to/ssl.crt
这里有我应该使用的域/IP/DNS条目吗?我感觉很好,至少卷发有效

当前,我的nginx配置(在启用站点的文件中)如下所示:

server {
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate     /path/to/ssl.crt;
    ssl_certificate_key /path/to/ssl.key;

    server_name <dummy value of "_" or name used to make SSL certs>;
    client_max_body_size 20M;
    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log;

    location / {
        proxy_pass         http://127.0.0.1:8000/;
        proxy_redirect     off;

        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}
server {
    # listen 80 #uncomment to also listen on port 80 - useful for debugging
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name {{hostname}};

    ssl_certificate /etc/ssl/certs/{{hostname}}.crt;
    ssl_certificate_key /etc/ssl/private/{{hostname}}.key;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";

    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";
    add_header X-Frame-Options sameorigin;
    add_header X-Content-Type-Options nosniff;

    location / {
        ...
    }
}
服务器{
听443ssl;
听[:]:443 ssl;
ssl_证书/path/to/ssl.crt;
ssl\u证书\u密钥/path/to/ssl.key;
服务器名称;
客户最大尺寸为20M;
access\u log/var/log/nginx/access.log;
error\u log/var/log/nginx/error.log;
地点/{
代理通行证http://127.0.0.1:8000/;
代理_重定向关闭;
代理设置头主机$Host;
代理集头X-Real-IP$remote\u addr;
proxy\u set\u header X-Forwarded-For$proxy\u add\u X\u Forwarded\u For;
}
}
这与上面的curl命令一起使用

我尝试过经典和应用程序负载平衡器。对于classic,我尝试添加ssl.crt内容-我没有看到应用程序负载平衡器的类似选项,尽管我希望尽可能使用它们,因为它们可以非常轻松地转发HTTP->HTTPS。无论采用哪种方式,经典负载平衡器或应用程序负载平衡器都不会与服务器通信


对遗漏的内容有什么建议吗?或者如何确定遗漏了什么?

这很接近,只遗漏了几个小步骤。我和ALB ELB一起工作

首先,我使用了一个类似于这里描述的脚本:

域看起来有点像ip-172-10-11-12

为了调试所有的东西,我运行了以下类似的东西-这是从内存中获得的,所以它可能有详细信息。我首先通过点击nginx确保可以在本地卷曲服务器:

curl https://ip-172-10-11-12/healthcheck --cacert /etc/ssl/certs/ip-172-10-11-12.crt
然后我得到了ELB的地址,并确保我能靠着它卷曲。我必须在一台可以进入ELB机器的机器上。请注意,由于安全规则,ELB不是pinagable,而是curl。我相信我用两种方法测试了这一点。首先,我尝试:

curl https://elb-address/healthcheck --insecure
然后我将ip-172-10-11-12添加到/etc/hosts文件并尝试:

curl https://ip-172-10-11-12/healthcheck --cacert /cert/file/copied/onto/machine
一旦我开始工作,ALB ELB就开始工作了。我必须检查防火墙规则、AWS安全组等,在最后一次通话成功之前。但当它工作时,ELB开始看到服务器

在调试时,我还有最后一点见解:如果从公共internet访问ELB,则ELB必须只有公共子网,并且公共子网应与目标机器位于同一可用区域

curl https://elb-address/healthcheck --insecure
curl https://ip-172-10-11-12/healthcheck --cacert /cert/file/copied/onto/machine