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_rewriteNGINX using a redirect or Apache 中指定 HTTPS。如果你想要更高级别的 HTTP 到 HTTPS 翻转,你可以在你的应用程序中通过指定你的证书所在的位置并执行 listen 在端口 80 上 redirect/relocate 到端口 443

在 DNS 级别您只指定 location。在您的应用程序中,或在您服务器上的某处,您指定 HTTP/HTTPS protocolDNS,作为协议本身,不能在其响应中指定其他协议。 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 工具。

Here is a helpful resource


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?EAESGCMRSASHA 取决于您要支持的密码套件数量。如果您不会支持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