我希望建立一个ELB,使用HTTPS与后端服务器通信。我正在尝试使用单个后端服务器进行概念验证,但似乎无法让ELB与服务器通信。我几乎可以肯定这是一个证书问题,因为任何没有SSL的设置都可以完美工作。
我如何设置?我尝试了来自多个答案和博客帖子的各种建议,但没有成功。
我现在所做的是使用以下命令设置自签名证书(来自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配置(在启用站点的文件中)如下所示:
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;
}
}
这适用于上面的curl命令。
我尝试过经典和应用程序负载平衡器。对于classic,我尝试添加ssl。crt内容-我看不到应用程序负载平衡器有类似的选项,尽管我希望尽可能使用它们,因为它们可以转发HTTP-
对缺失的内容有什么建议吗?或者如何确定缺少什么?
离这里很近,只差几步。我和ALB ELB一起工作。
首先,我使用了一个类似于这里描述的脚本:https://myopswork.com/how-to-do-end-to-end-encryption-of-data-in-transit-b-w-aws-alb-and-ec2-3b7fd917cddd
#!/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不是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开始看到服务器。
我在调试时还有一个最终的见解:如果从公共互联网访问ELB,ELB必须只有公共子网,并且公共子网应该与目标机器位于相同的可用性区域
我已经准备好了用于在我的 AWS ELB 上终止外部 HTTPS 连接。我现在尝试使用带有自签名证书的 HTTPS 来保护 EC2 上的 ELB 和后端 NGINX 服务器之间的连接。我已经按照文档进行操作,但是通过HTTPS访问服务器会导致408 HTTP超时。我似乎无法获得任何调试信息来确定故障所在。 < li >我已经确认安全组允许EC2上的ELB和NGINX之间的连接。 < li >我已经
问题内容: 我已经开始为API编写包装,该包装要求所有请求都通过HTTPS进行。我不想在开发和测试它时向实际的API发出请求,而是希望在本地运行自己的服务器来模拟响应。 我对如何生成创建HTTPS服务器并向其发送请求所需的证书感到困惑。 我的服务器看起来像这样: Pem文件是使用以下命令生成的: 一个请求看起来像这样: 通过此设置,我得到了,所以我认为我需要为该请求添加一个选项。 所以我的问题是我
问题内容: 我对phonegap比较陌生,最近我在Windows apache服务器上使用自签名证书设置了HTTPS / SSL,并尝试发出HTTPS ajax发布请求。在浏览器中运行时,该请求工作正常,但在phonegap中运行时失败。我尝试将android:debuggable设置为false,但这不能解决问题。我也做了一些研究,似乎phonegap确实支持HTTPS ajax请求,所以我对请
问题内容: 我正在尝试使用自签名服务器证书建立TLS连接。 我使用以下示例代码生成了证书:http : //golang.org/src/pkg/crypto/tls/generate_cert.go 我相关的客户端代码如下所示: 以及类似的服务器代码: 因为服务器证书是自签名的,所以对于服务器和客户端CA_Pool使用相同的证书,但这似乎不起作用,因为我总是会收到此错误: 我怎么了 问题答案:
问题内容: 我完全被困在这里。我有一个Java客户端代码,需要使用自签名证书连接到SSL服务器。 仅 当我在服务器端禁用SSLv2支持时, 才会 出现此问题。 痕迹是 在服务器端,我可以看到以下跟踪: 如果启用SSL2,我会看到 而且一切正常。 我还知道那不是服务器端的东西,因为与其他软件连接可以正常工作。 知道我在做什么错吗? 还有人知道这个“读取客户端问候A / B”是什么意思吗? 谢谢 更新
我需要创建web服务客户端,这家提供服务的公司向我们发送wsdl文件。我有wsdl文件、用户名和密码、服务url和txt文件,其中包含一些密钥,比如“20A9 38 4e 82 3a 94 d1…”。服务器有自签名证书,我试图通过InstallCert获取证书。java,使用keytool等生成密钥库。当我使用axis2 wsdl2java从wsdl生成客户端时,它会生成客户端,但在生成过程结束时