Рейтинг:0

Передайте сертификаты HTTPS с нижестоящих серверов через прокси-сервер NGINX клиенту.

флаг de

У меня есть парк крайних компьютеров Ubuntu, на которых размещены простые веб-серверы HMI. Многие используют динамические IP-адреса, где переадресация портов недоступна.

Таким образом, для доступа к ним каждый использует autossh для создания обратного туннеля на центральный облачный прокси-сервер. Затем я могу получить доступ к каждому из них с помощью https://proxy.mydomain.com:6001, 6002 и т.д. Это работает.

Теперь я хочу использовать NGINX, чтобы нам не приходилось запоминать номера портов. Таким образом, у каждого объекта будет свой собственный поддомен: https://site1.mydomain.com, site2 и т. д. Все поддомены будут указывать на мой прокси-сервер. Затем NGINX должен просмотреть поддомен и проксировать https-трафик на соответствующий порт обратного туннеля.

Конфигурация NGINX показана ниже.

На данный момент моя проблема заключается в том, что NGINX хочет, чтобы я определил сертификат SSL. Однако я хотел бы использовать сертификаты, уже установленные на каждом из пограничных компьютеров.

Итак, как мне передать эти сертификаты клиенту через прокси-сервер NGINX?

Если это невозможно - как лучше всего определить один или отдельные сертификаты на прокси-сервере, которые можно использовать для всех поддоменов?

сервер {
    слушать 443 ssl;
    имя_сервера site1.mydomain.com;
    место расположения / {
        proxy_set_header Хост $host;
        прокси_пароль https://127.0.0.1:6001;
        proxy_ssl_server_name включено;
        прокси_перенаправление выключено;
    }
}

сервер {
    слушать 443 ssl;
    имя_сервера site2.mydomain.com;
    место расположения / {
        proxy_set_header Хост $host;
        прокси_пароль https://127.0.0.1:6002;
        proxy_ssl_server_name включено;
        прокси_перенаправление выключено;
    }
}

ОБНОВИТЬ Для тех, кому интересно, я смог использовать проект «SNIProxy» вместо NGINX и решил эту проблему. Сертификаты HTTPS прошли без проблем.

Рейтинг:0
флаг cn

Вы можете использовать подстановочный сертификат *.mydomain.com для вашего прокси.
Этот закрытый ключ + сертификат будет работать для любого поддомена.
Либо бесплатно от let's encrypt (certbot), либо платно от центра сертификации, такого как digicert.

djdomi avatar
флаг za
не забудьте добавить domain.tld И *.domain.tld, иначе в вашем сертификате будет отсутствовать информация;)
Рейтинг:0
флаг us

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

Я сам не использовал эту конфигурацию, поэтому она может быть не на 100% точной, но должна показать принципы.

транслировать {
    слушать 443;
    ssl_preread включен;
    proxy_connect_timeout 1 с;
    прокси_таймаут 3 с;
    proxy_pass $ вверх по течению;
}

карта $ssl_preread_server_name $upstream {
    site1.example.com 127.0.0.1:6001;
    site2.example.com 127.0.0.2:6002;
    сайт по умолчанию1;
}

в транслировать блок, мы включаем предварительное чтение данных протокола SSL. Nginx извлекает поле SNI в $ssl_preread_server_name переменная.

Мы используем карта функция для преобразования предварительно прочитанного имени сервера в пункт назначения. Затем пункт назначения используется как транслировать модуль proxy_pass пункт назначения.

Здесь nginx читает только имя хоста для SSL-соединения, а затем проксирует TCP-соединение к месту назначения для этого имени хоста.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.