Сертификат SSL недействителен во внутреннем приложении узла (обратный прокси-сервер Nginx) - PullRequest
0 голосов
/ 06 июня 2019

Итак, у меня возникли некоторые проблемы с сертификатами SSL.

У меня есть приложение реагирования, работающее на порту 80. и внутренний узел, работающий на порту 443.

У меня есть домен, указывающий на IP (xx.xx.xxx.xx), который указывает на приложение реакции. Я использую nginx для прокси-запросов на запросы от внешнего интерфейса к бэкенду, так как оба они находятся на одном сервере.

Вот конфиг nginx:

server {
  listen 80 ssl;
  server_name xx.xx.xxx.xx;
  ssl_client_certificate /etc/letsencrypt/live/domain.com/cert.pem;
  ssl_certificate /etc/letsencrypt/live/domain.com/cert.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
  root /home/ubuntu/build;
  index index.html;

  access_log /var/log/nginx/build.access.log;
  error_log /var/log/nginx/build.error.log;
  location / {
    try_files $uri /index.html =404;
  }
}

upstream backend {
  server 127.0.0.1:443;
  server 127.0.0.1:443 max_fails=1 fail_timeout=30s backup;
  keepalive 64;
}

server {
  listen 443 ssl;
  server_name xx.xx.xxx.xx;
  ssl_client_certificate /etc/letsencrypt/live/domain.com/cert.pem;
  ssl_certificate /etc/letsencrypt/live/domain.com/cert.pem;
  ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
  keepalive_timeout 10;
  location / {
    proxy_pass http://backend;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
    proxy_set_header Connection '';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    proxy_redirect off;
   }
}

Я получаю следующую ошибку при выполнении запроса к бэкэнду:

Net :: ERR_CERT_COMMON_NAME_INVALID

это связано с тем, что сертификат действителен для «domain.com», а не по IP-адресу, на котором работает серверная часть (я знаю, что для сертификата необходимо использовать полностью квалифицированный домен).

У меня вопрос: что я могу сделать по-другому (с помощью nginx), чтобы мои запросы могли отправляться через https на обратном прокси-сервере?

1 Ответ

0 голосов
/ 11 июня 2019

Вы используете стандартные порты 80 и 443 по-разному.Эти порты являются точками входа на ваш сервер, и их не рекомендуется использовать в качестве портов, работающих внутри обратных прокси-серверов.

При использовании обратных прокси-серверов мы сопоставляем другие порты либо с портом 80, либо с портом 443, поэтому они могут быть общедоступными.доступны через HTTP или HTTPS соответственно.

Если мы хотим получить доступ ко всему по HTTPS, нам потребуется сопоставить приложения реагирования и узла с 443 через обратный прокси-сервер и перенаправить весь доступ HTTP, идущий к HTTPS.

Итак, как предложенные шаги для исправления:

1) Используйте разные порты, скажем, 3000 для реагирования и 3001 для узла.

2) Настройте блок сервера, прослушивающий порт 80 для перенаправления наhttps, как return 301 https://<yourdomainhere.com>

3) Удалите ssl строк в блоке сервера вашего порта 80.Используйте их только внутри блоков сервера, прослушивая порт 443

4) Измените свой блок upstream {}, чтобы использовать порт 3001 для приложения узла.Сохраните использование proxy_pass http://backend;, все в порядке.

5) Добавьте новый блок местоположения с proxy_pass http://localhost:3000; внутри блока сервера, который прослушивает порт 443. Теперь у вас будет два блока местоположения, одиндля реакции и один для узла.

6) Определите server_name для каждого блока с помощью yourdomainhere.com, поскольку IP-адреса, как правило, не разрешено выдавать с SSL-сертификатами.Я предлагаю использовать другой блок сервера для перенаправления IP-адреса в ваш домен с префиксом HTTPS

7), чтобы проверить ошибки, а затем перезапустить nginx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...