Какие ssl-сертификаты куда попадают на обратном прокси? - nginx

Требуются разъяснения для восходящего потока SSL на обратном прокси-сервере nginx

Я читал документацию nginx относительно обратного прокси и защиты ssl-соединений с вышестоящими серверами , но я все еще не понимаю, какие сертификаты ssl иди куда. Во многих примерах, которые я нахожу, nginx выполняет проксирование localhost, но в моей ситуации конечные точки находятся на разных серверах, портах и ​​физических местоположениях.

Я бы хотел, чтобы несколько доменов разрешались на сервере nginx. У каждого из этих доменов есть сертификат ssl на текущем сервере для его фактического доменного имени.

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

Мой конечный результат должен выглядеть как

                             client
                               |
                             nginx
                       https://example1.com
                       https://example2.com 
                       https://example3.com
                             x.x.x.x
                               |
               -----------------------------------------
               |                |                      |
https://example1.com    https://example2.com    https://example3.com
   a.b.c.d:1234             e.f.g.h:5678            i.j.k.l:9012

Прямо сейчас https://example1.com преобразуется в abcd: 1234, для которого установлен собственный сертификат ssl. Поскольку мне нужно показать клиентам, что сервер nginx обслуживает домен example1.com, я думаю, мне нужно, чтобы ssl example1.com был перемещен на внешний сервер nginx, верно? Если я это сделаю, какой SSL-сертификат я буду использовать на a.b.c.d: 1234 для поддержания безопасного восходящего соединения?

В документации nginx указано client.crt и server.crt, но CA использует домен для их регистрации. Что такое клиент и сервер в ситуации обратного прокси? Для меня клиент - это браузер, отправляющий запрос.

Какие ssl-сертификаты отправляются куда на обратном прокси?

Изменить:

Я уже знаю, что вы можете выглядеть так, как будто у вас есть безопасное соединение, просто поместив URL-адрес на основе сертификаты на прокси-сервере. Я надеюсь узнать, какие ssl-сертификаты поставить на внутренние серверы. Просто повторно использовать их соответствующие сертификаты? Может ли example1.com.crt работать как на прокси-сервере, так и на внутреннем сервере?

2
задан 19 July 2019 в 06:11
2 ответа

Сертификат домена должен находиться там, где его «видят» клиенты, поэтому в вашем случае, если вы хотите, чтобы только сервер nginx был доступен из Интернета, все общедоступные сертификаты должны перейдите на сервер nginx.

Если вы хотите защитить бэкэнд-соединения, вы можете использовать любой сертификат на этих серверах. Вы даже можете использовать самозаверяющие и отключить проверку сертификатов на сервере nginx, но, вероятно, будет разумнее создать свой собственный ЦС и распространять сертификаты на бэкэнды.

Ваша конфигурация будет выглядеть точно так, как вы нарисовали, за исключением что внутренние серверы будут иметь внутренний сертификат, соответствующий их «внутреннему» имени:

                                                 client
                                                   |
                                                 nginx
                                           (https://example1.com)
                                           (https://example1.com)
                                           (https://example1.com)
                                                    |
            +---------------------------------------+-----------------------------------+
            |                                       |                                   |
            |                                       |                                   |
https://example1.internal.local/   https://example2.internal.local/   https://example3.internal.local/
       a.b.c.d                                  e.f.g.h                               i.j.k.l

Если внутренние серверы доступны из Интернета, то вы можете захотеть установить брандмауэр на их порты https, чтобы только сервер nginx мог их подключать.

Относительно вашего вопроса о клиенте и сервере: в сети клиент - это тот, кто инициирует соединение. Таким образом, в вашей настройке браузеры являются клиентами, а сервер nginx одновременно является клиентом и сервером: это сервер для браузеров, но он является клиентом для внутренних серверов.

3
ответ дан 3 December 2019 в 09:56

Есть довольно много возможностей, вот 2:

  1. У вас есть 1 сертификат на обратном прокси-сервере, содержащий все ваши домены, использующие SAN
  2. Вы перенаправляете каждый домен от вашего nginx к соответствующему серверу, переписывая URL-адреса

Либо ваши клиенты общаются только с вашим обратным прокси (1), а nginx будет обрабатывать соединения с вышестоящими серверами, либо вы позволяете nginx сообщать вашим клиентам о подключении к другим серверам (2), которым требуется собственный общедоступный IP / DNS / сертификаты.

Вы можете (и, возможно, должны) также зашифровать трафик между вашим обратным прокси и вышестоящими серверами с помощью сертификатов,в зависимости от схемы вашей сети. Для этого вам по-прежнему нужен сертификат для каждого вышестоящего сервера, но они также могут быть самоподписанными (но не должны).

Если вы используете что-то вроде Let's Encrypt, в настоящее время создание SAN на сертификатах довольно просто, поэтому я обычно выбираю вариант 1.

1
ответ дан 3 December 2019 в 09:56

Теги

Похожие вопросы