Как обрабатывать сертификаты SSL для https / защищенных веб-сокетов на динамически запускаемых экземплярах Windows EC2? - PullRequest
0 голосов
/ 09 мая 2018

Мне нужно несколько советов о том, как обращаться с SSL-сертификатами для соединений https и wss (безопасный веб-сокет) в динамически запускаемых экземплярах EC2.

Во-первых, контекст: В настоящее время мы используем экземпляры Windows в Amazon EC2 для запуска установки сервера / клиента следующих компонентов: - исполняемый файл «server», работающий в качестве службы Windows (разработан в C # /. Net) - веб-сервер (IIS), на котором размещено одностраничное веб-приложение (разработано в TypeScript / React) - хранилище данных для работы в Amazon S3 - аутентификация пользователя через Amazon Cognito

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

До сих пор у нас был только один экземпляр EC2, настроенный с именем хоста (скажем, «mycompany.com») и запись в настройках DNS с нашим провайдером доменных имен, которая указывает на IP-адрес экземпляра Amazon. Мы можем использовать «https» для веб-приложения и «wss» для подключения к веб-сокету, используя специальный сертификат SSL для «mycompany.com».

Недавно мы добавили способ запуска новых экземпляров в EC2 из этого первого экземпляра («центральный»). Мы используем пользовательские данные EC2 + сценарий Power Shell для настройки экземпляров при запуске. Все это работает нормально, и мы, по сути, получаем новые экземпляры, которые также запускают исполняемый файл «сервер» и веб-сервер, на котором размещается одностраничное веб-приложение. Вы можете перейти к общедоступному IP-адресу новых экземпляров и, по существу, запустить веб-приложение, связанное с сервером, на новом компьютере (независимо от 1-го «центрального» экземпляра).

Теперь, следующее, что мы сделаем: когда мы запустим новый экземпляр с 1-го компьютера, мы НЕ будем переходить к общему IP-адресу недавно запущенного экземпляра, а просто переключим соединение через веб-сокет уже запущенного веб-приложение на сервере исполняемого файла на новом экземпляре. С этого момента действия, выполняемые в веб-приложении, будут отправлять / получать запросы / ответы на команды к / от исполняемого файла «server», запущенного на новом экземпляре. (В принципе, нам больше не нужно запускать веб-сервер на новом экземпляре, поскольку содержимое веб-приложения остается обслуживаемым 1-м «центральным» компьютером.)

Это на самом деле уже работает, если мы запустим веб-страницу как «http» и websocket как «ws» (конечно, это небезопасно). Когда мы пытаемся использовать «https» и «wss» (безопасные веб-сокеты), мы сталкиваемся со следующими вопросами, касающимися работы с сертификатами SSL для динамически запускаемых экземпляров EC2:

Для использования SSL веб-серверу и привязке к веб-сокету требуется сертификат SSL.

Как отмечалось выше, когда у нас был только 1 экземпляр, мы купили сертификат SSL для «mycompany.com» и использовали его для подключений https через порт 443 на веб-сервере IIS. И мы также использовали сертификат для защиты соединения через веб-сокет, выполнив: netsh http add sslcert ipport = certhash = appid = {} Поскольку у нас был только 1 экземпляр и сертификат SSL для имени хоста этого экземпляра, все это было просто и работало (после настройки брандмауэра для учета трафика через порт веб-сокета).

Теперь, когда мы запустим несколько экземпляров и переключим соединение через веб-сокет с центрального компьютера на вновь запущенные, как мы справимся с этим?

  • Нужно ли устанавливать имя хоста для каждого экземпляра и добавлять запись DNS для каждого экземпляра?
  • Затем мы создаем новый сертификат SSL для каждого экземпляра? Я предполагаю, что для этого нам нужно использовать подстановочный сертификат «* .mycompany.com», но нам все еще нужен способ сообщить компьютеру, что он является частью этого домена, или сертификат не будет считаться действительным.
  • Если нам нужно сделать записи DNS для каждой новой машины, которая запускается, как мы будем делать это динамически при запуске машин? И как быстро эти записи DNS становятся активными?
  • Или есть способ использовать IP-адреса (общедоступные или частные) для подключения к сокету, но при этом использовать универсальный сертификат домена для всех компьютеров?
  • Поскольку мы будем запускать веб-приложение с веб-сервера на 1-м (центральном) экземпляре и подключаться к другому компьютеру, нужно ли что-то особенное настроить для этого?
  • Можем ли мы просто продолжать привязывать сертификат в новых экземплярах к порту, используемому для подключения к веб-сокету, как мы делали раньше?

Я уверен, что многие из вас уже сделали это, поэтому любые советы очень приветствуются! Спасибо!

Koen

PS Я немного читал об AWS Certificate Manager и Route 53, но это кажется довольно сложным, поэтому я предпочел бы не использовать это, если это возможно. Если они нам действительно нужны, пусть будет так.

1 Ответ

0 голосов
/ 24 мая 2018

Мудрее всего здесь использовать Route53, диспетчер сертификатов с EC2 балансировщиком нагрузки и целевыми группами. На все ваши вопросы они ответят.

На самом деле, если вы не используете вышеперечисленное, это сделает его более сложным для вас. Все эти 4 очень простые услуги, и вам будет удобно, когда вы начнете практиковать и использовать их.

Если вы хорошо знаете кодирование, terraform может быть очень полезным.

Спасибо.

...