Как обрабатывать SSL-сертификаты для реализации опции WhiteLabel в веб-приложении, работающем на сервере NGINX - PullRequest
6 голосов
/ 17 февраля 2020

Я работаю над веб-приложением.

Мое приложение работает на поддомене app.mydomain.com

Мне нужно WhiteLabel мое приложение. Я прошу своих Клиентов указать свой собственный сайт через CNAME для моего приложения.

design.customerwebsite.com указывает на app.mydomain.com

Вот что я пытался решить эту проблему.

Я создал новый файл в /etc/nginx/sites-available с именем customerwebsite.com Добавил символическую ссылку на файл.

Я установил SSL с помощью certbot с помощью приведенной ниже команды.

sudo certbot --nginx -n --redirect -d design.customerwebsite.com

Вот код моего NGINX conf файла customerwebsite.com

server
{

 server_name www.customerwebsite.com;
 return 301 $scheme://customerwebsite.com$request_uri;
}


server {

#  proxy_hide_header X-Frame-Options;

 listen       80;
 listen       443;

  server_name design.customerwebsite.com;

        ssl_certificate /etc/letsencrypt/live/design.customerwebsite.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/design.customerwebsite.com/privkey.pem;


 root /opt/bitnami/apps/myapp/dist;
  location / {
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_hide_header X-Frame-Options;
      proxy_pass http://localhost:3000;
  }

 proxy_set_header X-Forwarded-Proto $scheme;
 if ( $http_x_forwarded_proto != 'https' )
 {
    return 301 https://$host$request_uri;
 }


}

Я успешно могу запустить свое веб-приложение на https://design.customerwebsite.com

Но сертификат SSL показывает, что он указывает на app.mydomain.com и показывает небезопасно.

My app.mydomain.com имеет сертификат SSL от Amazon ACM, который подключен через балансировщик нагрузки.

Каким должен быть подход, чтобы решить эту проблему?

Ответы [ 3 ]

1 голос
/ 26 февраля 2020

Для этого есть два решения: 1) добавить ssl-сертификаты в баланс нагрузки: вам нужно запросить сертификат со всеми поддерживаемыми DNS-именами (app.mydomain.com и design.customerwebsite.com) / и вам необходимо управлять Домен customerwebsite.com с Route53. Я думаю, что это невозможно в вашем случае.

2- Не используйте ssl на балансировщике нагрузки: для этой опции мы не будем прерывать ssl на балансировщике нагрузки, однако он будет передан nginx обрабатывать. Ваши конфигурации loadbalancer должны выглядеть следующим образом:

enter image description here

, вам необходимо сгенерировать новый сертификат SSL, который включает оба домена


sudo certbot --nginx -n --redirect -d app.mydomain.com -d *.mydomain.com -d design.customerwebsite.com -d *.customerwebsite.com

Nginx конфиги

server
{
 server_name www.customerwebsite.com;
 return 301 $scheme://customerwebsite.com$request_uri;
}


server {
 listen       80 default_server;
 server_name design.customerwebsite.com;
 return 301 https://$host$request_uri;
}

server {
  listen       443 ssl default_server;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_certificate /etc/letsencrypt/live/design.customerwebsite.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/design.customerwebsite.com/privkey.pem;

  server_name design.customerwebsite.com;
  root /opt/bitnami/apps/myapp/dist;

  location / {
      resolver 127.0.0.11 ipv6=off;

      proxy_set_header Host $host;
      proxy_set_header X-Forwarded-Proto https
      proxy_set_header X-Real-IP $remote_addr;
      proxy_hide_header X-Frame-Options;
      proxy_pass http://localhost:3000;
  }
}
0 голосов
/ 27 февраля 2020

вы забываете некоторые детали ... вам нужно выполнить настройку для домена

/////// app.myDominio.com ////////

, как вы это сделали для обычного домена, а также создайте SSL только для этого домена. Вы можете использовать скрипт let. Настройте путь для NGINX LOG, чтобы вы могли проверять наличие ошибок, обнаруженных NGINX.

Вы также можете использовать его в NGINX settings * .domain.com (где * означает приложение, возможно, он обнаруживает)

0 голосов
/ 25 февраля 2020

Я думаю, что элементы, предоставляемые для балансировки нагрузки ACM, должны соответствовать каждому домену, на который вы можете получать запросы. В сертификате у вас должно быть альтернативное имя субъекта, содержащее каждый соответствующий домен.

Например, на stackoverflow.com сертификат имеет CN * .stackexchange.com, но имеет альтернативное имя субъекта:

DNS:*.askubuntu.com, DNS:*.blogoverflow.com, DNS:*.mathoverflow.net, DNS:*.meta.stackexchange.com, DNS:*.meta.stackoverflow.com, DNS:*.serverfault.com, DNS:*.sstatic.net, DNS:*.stackexchange.com, DNS:*.stackoverflow.com, DNS:*.stackoverflow.email, DNS:*.superuser.com, DNS:askubuntu.com, DNS:blogoverflow.com, DNS:mathoverflow.net, DNS:openid.stackauth.com, DNS:serverfault.com, DNS:sstatic.net, DNS:stackapps.com, DNS:stackauth.com, DNS:stackexchange.com, DNS:stackoverflow.blog, DNS:stackoverflow.com, DNS:stackoverflow.email, DNS:stacksnippets.net, DNS:superuser.com
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...