CNAME 到安全 url
CNAME to a secure url
我有一个 AWS 弹性负载均衡器,具有以下安全 url:
https://example.us-west-2.elasticbeanstalk.com/
我还有以下1&1注册的域名:
example.com
然后我在 1&1 配置中添加一个 www
的子域,结果是 www.example.com
.
我想添加一个 CNAME
别名以将流量从域名路由到 ELB。
www.example.com -> https://example.us-west-2.elasticbeanstalk.com/
所以我尝试添加 CNAME
:
如您所见,它不接受 url,因为它是 Invalid host name
。
我需要别名才能安全 (https
) url。但是,我认为这可能是错误的原因。
问题
如何设置 CNAME
指向安全的 url?
谢谢
更新
我的 Elastic Load Balanacer 确实有一个安全侦听器。
从 CNAME 中删除 'http://',只需使用:
example.us-west-2.elasticbeanstalk.com
您必须使用 mod_rewrite
在 NGINX using a redirect
or Apache 中指定 HTTPS
。如果你想要更高级别的 HTTP 到 HTTPS 翻转,你可以在你的应用程序中通过指定你的证书所在的位置并执行 listen
在端口 80 上 redirect/relocate 到端口 443
在 DNS 级别您只指定 location
。在您的应用程序中,或在您服务器上的某处,您指定 HTTP/HTTPS protocol
。 DNS,作为协议本身,不能在其响应中指定其他协议。 HTTPS 是在您的服务器上完成的处理器密集型加密操作。
我强烈推荐使用 AWS Certificate Manager to assign a certificate to your domain. If you'd rather have it in your beanstalk application, check out letsencrypt
。对于这些东西,这是一个很棒的 CLI 工具。
Ubuntu + NGINX + letsencrypt
在 Ubuntu 上将 HTTP 配置为 HTTPS。是的,只有一个特定于操作系统的示例,但是 letsencrypt
应该可以随时随地处理任何事情。
sudo apt-get update
sudo apt-get install letsencrypt
sudo apt-get install nginx
sudo systemctl stop nginx #if it starts by default...
sudo letsencrypt certonly --standalone -n -m richard@thewhozoo.com.com -d thewhozoo.com -d cname.thewhozoo.com --agree-tos
sudo ls -l /etc/letsencrypt/live/thewhozoo.com/ #you should see your stuff in this folder
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 #make yo'self a diffie
sudo vim /etc/nginx/sites-available/default
在您的 default
文件中:
(片段来自:HERE and HERE and HERE and HERE)
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name thewhozoo.com www.thewhozoo.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name thewhozoo.com www.thewhozoo.com;
ssl_certificate /etc/letsencrypt/live/thewhozoo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/thewhozoo.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
}
既然您的 NGINX 文件已经列出了您的 certs/keys/pems/whatever,您必须仔细检查您的防火墙。
对于 Ubuntu 和 ufw
,您可以通过以下方式允许访问:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw allow 'OpenSSH'
sudo ufw enable
sudo ufw status
您应该会看到 Nginx HTTPS
已启用。
无论您使用哪种 HTTPS(SSL、TLSvXX 等),您都需要在防火墙级别打开端口 22,因为它们都在使用它,因此 'OpenSSH'
。
务必在 ufw enable
之前 运行 allow 'OpenSSH'
。如果你不这样做......你的 SSH 会话将被终止......祝你好运。
现在您的防火墙已经准备就绪,重新启动 nginx
并且您 应该 已设置:
sudo systemctl start nginx
对未来有用的提示:
NGINX 默认将续订政策设置为 3 个月。我不确定这是否是 "standard" 互联网法,但用于续订证书的附加组件是:
将此添加到您的 crontab
:
sudo systemctl stop nginx
sudo letsencrypt renew
sudo systemctl start nginx
有用的注释:
您必须将域名链接到所选服务器BEFORE 运行 letsencrypt
。它会进行反向 IP 查找以确保您是域的 owner/admin。
您不需要 庞大的加密类型列表,但我强烈建议保留其中的大部分。椭圆曲线 Diffie Hellman 是上面使用的密钥类型所必需的,但您可以将其缩减为 ECDH?E
、AES
、GCM
和 RSA
或 SHA
取决于您要支持的密码套件数量。如果您不会支持SSLvX
并且只支持TLSvX
,您只需要支持(并限制)以下内容:ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
AWS Certificate Manager (ACM) + Elastic Load Balancer
- 转到 EC2 资源控制台中的负载均衡器
- Select 你的听众
- 大概应该说:
HTTPS: 443
粗体字
- 检查并单击操作 => 编辑
- 仔细检查你的协议是 HTTPS 端口 443 和你的目标群体是好的
- 在弹出窗口的底部,select“从 AWS Certificate Manager (ACM)
选择一个 existing 证书
- 然后 select 您的 ACM 证书
- 保存
- 在 EBS/whatever
上通过 SSH 连接到您的 instance/application
编写用于将 HTTP 流量重定向到 HTTPS 的 NGINX 策略:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name thewhozoo.com www.thewhozoo.com;
return 301 https://$host$request_uri;
}
重启 NGINX
对于 Elastic Beanstalk 环境 检查 THIS INFO.
等待大约 5 分钟让所有东西都吸收,你应该可以开始了!
Check this for help if needed
我有一个 AWS 弹性负载均衡器,具有以下安全 url:
https://example.us-west-2.elasticbeanstalk.com/
我还有以下1&1注册的域名:
example.com
然后我在 1&1 配置中添加一个 www
的子域,结果是 www.example.com
.
我想添加一个 CNAME
别名以将流量从域名路由到 ELB。
www.example.com -> https://example.us-west-2.elasticbeanstalk.com/
所以我尝试添加 CNAME
:
如您所见,它不接受 url,因为它是 Invalid host name
。
我需要别名才能安全 (https
) url。但是,我认为这可能是错误的原因。
问题
如何设置 CNAME
指向安全的 url?
谢谢
更新
我的 Elastic Load Balanacer 确实有一个安全侦听器。
从 CNAME 中删除 'http://',只需使用:
example.us-west-2.elasticbeanstalk.com
您必须使用 mod_rewrite
在 NGINX using a redirect
or Apache 中指定 HTTPS
。如果你想要更高级别的 HTTP 到 HTTPS 翻转,你可以在你的应用程序中通过指定你的证书所在的位置并执行 listen
在端口 80 上 redirect/relocate 到端口 443
在 DNS 级别您只指定 location
。在您的应用程序中,或在您服务器上的某处,您指定 HTTP/HTTPS protocol
。 DNS,作为协议本身,不能在其响应中指定其他协议。 HTTPS 是在您的服务器上完成的处理器密集型加密操作。
我强烈推荐使用 AWS Certificate Manager to assign a certificate to your domain. If you'd rather have it in your beanstalk application, check out letsencrypt
。对于这些东西,这是一个很棒的 CLI 工具。
Ubuntu + NGINX + letsencrypt
在 Ubuntu 上将 HTTP 配置为 HTTPS。是的,只有一个特定于操作系统的示例,但是 letsencrypt
应该可以随时随地处理任何事情。
sudo apt-get update
sudo apt-get install letsencrypt
sudo apt-get install nginx
sudo systemctl stop nginx #if it starts by default...
sudo letsencrypt certonly --standalone -n -m richard@thewhozoo.com.com -d thewhozoo.com -d cname.thewhozoo.com --agree-tos
sudo ls -l /etc/letsencrypt/live/thewhozoo.com/ #you should see your stuff in this folder
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 #make yo'self a diffie
sudo vim /etc/nginx/sites-available/default
在您的 default
文件中:
(片段来自:HERE and HERE and HERE and HERE)
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name thewhozoo.com www.thewhozoo.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name thewhozoo.com www.thewhozoo.com;
ssl_certificate /etc/letsencrypt/live/thewhozoo.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/thewhozoo.com/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
}
既然您的 NGINX 文件已经列出了您的 certs/keys/pems/whatever,您必须仔细检查您的防火墙。
对于 Ubuntu 和 ufw
,您可以通过以下方式允许访问:
sudo ufw allow 'Nginx Full'
sudo ufw delete allow 'Nginx HTTP'
sudo ufw allow 'OpenSSH'
sudo ufw enable
sudo ufw status
您应该会看到 Nginx HTTPS
已启用。
无论您使用哪种 HTTPS(SSL、TLSvXX 等),您都需要在防火墙级别打开端口 22,因为它们都在使用它,因此 'OpenSSH'
。
务必在 ufw enable
之前 运行 allow 'OpenSSH'
。如果你不这样做......你的 SSH 会话将被终止......祝你好运。
现在您的防火墙已经准备就绪,重新启动 nginx
并且您 应该 已设置:
sudo systemctl start nginx
对未来有用的提示: NGINX 默认将续订政策设置为 3 个月。我不确定这是否是 "standard" 互联网法,但用于续订证书的附加组件是:
将此添加到您的 crontab
:
sudo systemctl stop nginx
sudo letsencrypt renew
sudo systemctl start nginx
有用的注释:
您必须将域名链接到所选服务器BEFORE 运行
letsencrypt
。它会进行反向 IP 查找以确保您是域的 owner/admin。您不需要 庞大的加密类型列表,但我强烈建议保留其中的大部分。椭圆曲线 Diffie Hellman 是上面使用的密钥类型所必需的,但您可以将其缩减为
ECDH?E
、AES
、GCM
和RSA
或SHA
取决于您要支持的密码套件数量。如果您不会支持SSLvX
并且只支持TLSvX
,您只需要支持(并限制)以下内容:ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
AWS Certificate Manager (ACM) + Elastic Load Balancer
- 转到 EC2 资源控制台中的负载均衡器
- Select 你的听众
- 大概应该说:
HTTPS: 443
粗体字
- 大概应该说:
- 检查并单击操作 => 编辑
- 仔细检查你的协议是 HTTPS 端口 443 和你的目标群体是好的
- 在弹出窗口的底部,select“从 AWS Certificate Manager (ACM) 选择一个 existing 证书
- 然后 select 您的 ACM 证书
- 保存
- 在 EBS/whatever 上通过 SSH 连接到您的 instance/application
编写用于将 HTTP 流量重定向到 HTTPS 的 NGINX 策略:
server { listen 80 default_server; listen [::]:80 default_server; server_name thewhozoo.com www.thewhozoo.com; return 301 https://$host$request_uri; }
重启 NGINX
对于 Elastic Beanstalk 环境 检查 THIS INFO.
等待大约 5 分钟让所有东西都吸收,你应该可以开始了! Check this for help if needed