Я разработал приложение NodeJs + express, развернутое как приложение Cloud Foundry в IBM Cloud. Я хочу выполнить взаимную аутентификацию (сертификаты клиента и сервера), чтобы контролировать входящий трафик и запросы к моему приложению. Мои сертификаты генерируются Secure Gateway, как описано в здесь с моим приложением, настроенным как место назначения в облаке (для доступа из локальных клиентов).
Secure Gateway сгенерировал следующие pem-файлы: первичный, промежуточный и корневой сертификат сервера, а также целевой сертификат и ключ. В документации есть довольно понятный Пример Nodejs с использованием tls.createServer.
В моем сценарии есть некоторые различия: во-первых, я нахожусь в противоположном сценарии (с локальными клиентами, подключающимися к облачному приложению через Secure Gateway, создающий туннель). Во-вторых, и это основная причина этого поста, мое приложение развернуто как CF-приложение.
Прочитав документацию CF о HTTP-маршрутизации, я понял, что облако IBM использует только порты 80 и 443, а затем перенаправляет запросы через HTTP на порты, которые приложение прослушивает (например, если мои NodeJs работают на порте 6001 и я вызываю конечную точку облака на порте 443, GoRouter перенаправит запрос через HTTP на правильный порт , добавляя заголовок X-Forwarded-Proto
, чтобы передать приложению информацию об исходном протоколе, используемом для запроса.
Имея это в виду (при условии, что это правильно), в моем коде NodeJs я не могу использовать что-то вроде https.createServer(opts, app)
, учитывая, что все запросы, поступающие в контейнер приложения, будут осуществляться через HTTP.
Чтение документов CF здесь Я понимаю, что можно указать CF пересылать сертификаты вверх к моему приложению, но есть кое-что, чего я не могу понять.
Прежде всего, в чем разница между завершением TLS в Load Balancer или GoRouter? Каковы причины этого выбора?
Мой второй вопрос: как правильно обрабатывать сертификаты после их перенаправления в мое приложение в виде заголовков HTTP? Это связано с тем, что мой сервер NodeJs будет http-сервером, созданным с помощью express стандартным способом http.createServer(app)
.
Спасибо всем, кто поможет мне в этом разобраться. Очевидно, что если у вас есть какие-либо примеры или советы, это будет очень полезно.