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