ELB使用带有自签名证书的HTTPS到后端服务器



我正在寻找使用HTTPS与后端服务器通信的ELB。我正在尝试使用单个后端服务器设置概念证明,但似乎无法让ELB与服务器进行通信。我几乎可以肯定这是证书问题,因为任何没有SSL的设置都可以正常工作。

我该如何设置?我尝试了多个答案和博客文章中的各种建议,但没有运气。

我现在正在做的是使用以下命令设置一个自签名证书(来自带有自签名证书的HTTPS的AWS ELB - >后端服务器):

$ openssl genrsa 
  -out /path/to/ssl.key 2048
$ openssl req 
  -sha256 
  -new 
  -key /path/to/ssl.key 
  -out /path/to/ssl.csr
$ openssl x509 
  -req 
  -days 365 
  -in /path/to/ssl.csr 
  -signkey /path/to/ssl.key 
  -out /path/to/ssl.crt

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

curl https://[Public DNS, or private DNS or IP used to create the SSL crt]/status --cacert /path/to/ssl.crt

我应该在这里使用域/IP/DNS条目吗?我感觉很不错,至少可以工作。

当前我的nginx config(在启用站点的文件中)看起来像:

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;
    }
}

这与上面的卷曲命令一起使用。

我尝试了经典和应用程序负载平衡器。有了Classic,我尝试添加SSL.CRT内容 - 我看不到应用程序负载平衡器的类似选项,尽管我想在可能的情况下使用它们,因为它们可以很容易地转发HTTP-> https。无论哪种方式,经典或应用程序负载平衡器都不与服务器通信。

关于缺少什么的任何建议?或如何确定缺少什么?

这很接近,只缺少几个小步骤。我与Alb Elb一起工作。

首先,我使用了与此处描述的脚本相似的脚本:https://myopswork.com/how-to-do-end-end-end-to-end-end-to-data-data-in-transit-b-w-w-s----------------------------------------------Alb-and-EC2-3B7FD917CDD

#!/bin/bash
DIR=$(dirname $0)
domain=$(uname -n)
echo "Generating SSL for $domain"
commonname="$domain"
country="US"
state="California"
locality="LA"
organization="My Inc."
organizationalunit="Org"
email="my@email.com"
# Optional
password=dummypassword
echo "Generating key request for $domain"
mkdir -p /etc/ssl/private
chmod 700 /etc/ssl/private
mkdir -p /etc/ssl/certs
# Generate a key
openssl genrsa -des3 -passout pass:$password -out /etc/ssl/private/$domain.key 2048 -noout
# Remove passphrase from the key. Comment the line out to keep the passphrase
echo "Removing passphrase from key"
openssl rsa -in /etc/ssl/private/$domain.key -passin pass:$password -out /etc/ssl/private/$domain.key
# Create the request
echo "Creating CSR"
openssl req -new -key /etc/ssl/private/$domain.key -out /etc/ssl/private/$domain.csr -passin pass:$password 
    -subj "/C=$country/ST=$state/L=$locality/O=$organization/OU=$organizationalunit/CN=$commonname/emailAddress=$email"
# Create the cert
openssl x509 -req -days 365 -in /etc/ssl/private/$domain.csr -signkey /etc/ssl/private/$domain.key -out /etc/ssl/certs/$domain.crt
# Setup nginx config
sed "s/{{hostname}}/${domain}/" < $DIR/template.conf > /etc/nginx/sites-available/site.conf
ln -sf /etc/nginx/sites-available/site.conf /etc/nginx/sites-enabled/site.conf

模板看起来像这样:

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 / {
        ...
    }
}

域看起来像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无法捏合,而是可卷曲的。我相信我测试了这两种方法。首先,我尝试了:

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开始看到服务器。

我在调试此调试时也有1个最终见解:如果从公共互联网访问ELB,ELB必须只有公共子网,并且公共子网应与Target Machines

处于相同的可用性区域。

相关内容

  • 没有找到相关文章

最新更新