我正在寻找使用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
处于相同的可用性区域。